我常用的 docker 和 docker-compose 命令

作者: 科技微讯

日期:

docker 我已经用了一段时间, 还写了好几篇涉及 docker 的文章, 但 docker 有些命令我用得少, 隔一段时间再用又会忘记, 影响工作效率, 所以决定写下来, 一方面加深记忆, 另一方面是当我再忘记时, 可以快速查询使用.

docker 命令

docker build

docker build -t image_name:latest .

根据 Dockerfile 创建一个 docker image, 最后的 . 表示当前目录, 当前目录需要包含一个 Dockerfile 文件, -t 表示 tag, 后面是这个 docker image 的名称, 这个名称可以选择性地添加标签.

docker save

docker save -o ~/Desktop/docker_image image_name

把一个叫 image_name 的镜像导出为 tar 归档文件, 并保存在桌面, 后面可以接多个镜像名称.

docker save image_name | gzip > ~/Desktop/docker_image_zip

把镜像导出, 并通过 gzip 压缩使其体积变小.

docker load

docker load -i ~/Desktop/docker_image

docker save 出来的文件可以通过 load 命令读取, 可以 load 压缩过或没有压缩过的镜像文件.

docker logs

docker logs container_name

读取一个叫 container_name 的容器的日志记录, 会展示从开始运行到现在的所有日志, 如果日志很多, 可能不容易查找到自己需要的信息.

docker logs -f container_name

增加一个 -f 选项, 可以让日志实时显示在终端, f 的意思是 follow.

docker logs --since 2020-08-19T09:00:00 --until 2020-08-19T10:00:00 container_name

通过 since 和 until 可以查看某个区间的日志, 时间采用 ISO 8601 Extended 格式.

docker exec

docker exec -it container_name /bin/bash
docker exec -it container_name /bin/sh

有时候是 /bin/bash 有时候是 /bin/sh, 作用是进入 container_name 这个容器.

docker cp

docker cp container_name:/path/to/the/file/you/want/to/copy .

把 docker container 中的文件复制到本地, 如果不确定 container 的文件路径, 可以用 docker exec 进入 container 确认一下.

docker system prune

docker system prune

删除所有没有使用的 container, network, images 等, 这些东西可能会占据很多硬盘空间.

docker ps

docker ps
docker container ls

一样的, 都是列出所有 container, docker images 就是列出所有 image.

docker-compose 命令

up

docker-compose up -d

执行这条命令会自动在当前目录寻找一个叫 docker-compose.yml 的文件, up 的意思是运行这个文件里声明的所有容器, -d 意思是在后台运行这些容器, 它是 detach 的简称.

如果你的 yml 文件不叫 docker-compose.yml, 可以通过 -f 指定 yml 文件:

docker-compose -f another-docker-compose.yml up -d

如果你只是希望运行 docker-compose.yml 文件中声明的某个容器, 可以:

docker-compose  up -d container_name

docker-compose up 不同于 docker run, 在更新一个容器时, 前者不需要先停止这个容器, 只需要重新 up 一次, 后者需要先停止这个容器, 然后再 run 一次.

down

docker-compose down

暂停并移除 docker-compose.yml 文件中声明的所有容器, 这样 docker ps 的清单就看不到这些容器了.

logs

docker-compose logs container_name

如果后面没有加 container_name, 就显示所有容器的 logs, 可以加 -f 实时显示.