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