Docker命令
常用命令
docker version
docker info
docker <命令> --help
# 镜像
docker login -u <用户名>
docker tag <镜像名> <用户名>/<镜像名>
docker images
docker push <用户名>/<镜像名>
docker run -dp <本机端口号>:<容器端口号> <用户名>/<镜像名>
docker rmi -f <image-id>
docker rmi -f $(docker images -aq)
docker image prune # 删除所有未被 tag 标记的虚悬镜像
docker search <镜像名> --filter=STARS=3000 # 搜索镜像,过滤出大于3000星的镜像
docker pull <镜像名>:<tag> # 下载镜像,不写 tag 默认下载 latest 版本
# 容器
docker run -d -p 80:80 --name <容器名> <镜像名> # `-d` - 以分离模式(在后台)运行容器
docker run -dp 80:80 --name <容器名> <镜像名> # `-p 80:80` - 将主机的80端口映射到容器的80端口(-p 为 -publish)
docker run -it <镜像名> /bin/bash # 进入交互式容器,退出命令为 exit,`Ctrl + P + Q` 为不停止退出交互式容器
docker exec -d <container-name/container-id> <命令> # 在容器后台运行命令
docker exec -it <container-name/container-id> /bin/bash # 进入容器后开启一个新的终端
docker attach --sig-proxy=false <container-name/container-id> # 进入容器正在执行的终端,不会启动新的进程
docker ps
docker ps -a
docker ps --all
docker start <container-name/container-id>
docker stop <container-name/container-id>
docker restart <container-name/container-id>
docker kill <container-name/container-id>
docker rm <container-id>
docker rm <container-id> <container-id> <container-id> <container-id>
docker rm -f <container-id> # 强制移除容器(包括正在运行的)
docker rm -f $(docker ps -aq) # 强制移除所有容器
docker top <container-id> # 查看容器进程信息
docker inspect <container-id> # 查看容器内部信息
# 文件拷贝
docker cp <container-id>:<容器中的文件> <拷贝到本机的目录> # 文件从容器拷贝到宿主机
docker cp <本机文件> <container-id>:<容器中的文件的目录> # 文件从宿主机拷贝到容器
# 命名卷
docker volume create <卷名>
docker volume list
docker run -dp <本机端口号>:<容器端口号> -v <卷名>:<容器中的挂载目录> <用户名>/<镜像名> # 自动创建指定的卷,默认存放路径 `/var/lib/docker/volumes/<卷名>/_data`
docker volume inspect <卷名> # 查看卷的详细信息
# 绑定挂载
docker run -dp 3000:3000 \
-w /app \ # 设定「工作目录」或指令运行的工作目录
-v "$(pwd):/app" \ # 将当前工作目录挂载到容器里面的`/app`目录
node:12-alpine \ # 要使用的镜像及版本
sh -c "yarn install && yarn run dev" # 用 `sh -c` 开启一个 shell 执行字符串中的内容
# 通过日志来查看内部的执行信息,按 `Ctrl+C` 退出
docker logs -f <container-id>
docker logs -tf --tail 10 <container-id>
# 网络
docker network create <网络名>
docker network create -d bridge <网络名> # 创建一个桥接网络
docker network list
docker run -d \
--network <网络名> \
--network-alias <网络别名> \
-v <卷名>:<容器中的挂载目录> \
-e MYSQL_ROOT_PASSWORD=<root用户密码> \
-e MYSQL_DATABASE=<数据库名> \
mysql:5.7
docker exec -it <mysql-container-id> mysql -u root -p # 进入容器,并执行命令
docker run -it --network <网络名> nicolaka/netshoot # 用 DNS 工具查找主机名 mysql 的 IP 地址
dig mysql # 查找主机名 mysql 的 IP 地址,虽然 mysql 不是一个有效的主机名,但 Docker 可以将其解析为具有该网络别名的容器的 IP 地址Dockerfile
Dockerfile 文件
命令
Docker Compose
docker-compose.yml
默认情况下,Docker Compose 会自动为应用程序堆栈创建一个网络(这就是为什么我们没有在 Compose 文件中定义一个网络)。
安全
镜像分层
应用示例
Dockerfile
下载一个demo:https://github.com/docker/getting-started/tree/master/app
Dockerfile
.dockerignore
在这种情况下,应该在第二个 COPY 步骤中省略 node_modules 文件夹,因为它可能会覆盖 RUN 步骤中命令创建的文件。
多阶段构建
克隆项目
dockerfile.multigrade
用 -t 为镜像添加标签,例如 <镜像名:版本号>
用 -f 指定自定义的 Dockerfile 文件名,默认的文件名为 Dockerfile
最后的 . 表示 Dockerfile 所在的位置
打开新的命令行
已分离模式运行
储存
网络
启动数据库引擎
配置数据库引擎
示例应用
Docker Compose
docker-compose.yml
docker compose 将自动从 .env 文件中读取环境变量。由于 Compose 文件要求设置 PGPASSWORD,因此我们将以下内容添加到 .env 文件
Last updated