Skip to content

个人常用 Docker 命令 持续更新

镜像相关

查看本地镜像列表

shell
docker images

从记录中心查询镜像

shell
docker search 镜像关键词

从记录中心拉取镜像到本地

笔者说

如果镜像名称后不指定 标签/版本 ,则会默认使用最新版本(latest)。

例如:docker pull tomcat:8.5.0 拉取的就是 8.5.0 版本的 tomcat 镜像,而 docker pull tomcat -> 拉取的实际是 docker pull tomcat:latest,这个 latest 是跟随记录中心中的最新版本变化的,无法确定当前拉取的是哪一个版本。

shell
docker pull 镜像名称[:标签/版本]

删除本地镜像

shell
# 删除指定镜像
docker rmi 镜像ID/镜像名称 [镜像ID/镜像名称...]

# 删除所有镜像
docker rmi `docker images -q`
docker rmi $(docker images -q)

笔者说

q 是 quiet 的意思,加上这个参数后,docker images 输出的就不是镜像详细列表了,而是镜像 ID 列表,通常用于编写脚本时使用。

所以,上方删除所有镜像的命令实际是 docker rmi 镜像ID1 镜像ID2...

从 Dockerfile 创建镜像

笔者说

如果镜像名称后不指定 标签/版本 ,则会默认使用最新版本(latest)。

shell
docker build -t 镜像名称[:标签/版本] Dockerfile文件路径

将本地镜像导出为 tar 文件

笔者说

如果镜像名称后不指定 标签/版本 ,则会默认使用最新版本(latest)。

shell
docker save -o/-output 文件路径.tar 镜像名称[:标签/版本]

从 tar 文件导入为本地镜像

shell
docker load -i/-input 文件路径.tar

容器相关

查看容器列表

shell
# 查看正在运行的容器
docker ps  

# 查看全部容器(包含已经停止的)
docker ps -a

# 模糊查询容器
docker ps [-a] | grep 容器关键词

创建容器并运行

笔者说

如果镜像名称后不指定 标签/版本 ,则会默认使用最新版本(latest)。

如果本地不存在该版本的镜像,则会先从记录中心拉取到本地。

shell
# -d 指定容器在后台运行
# --name 指定容器名称
# -m 限定容器内存大小
# --restart 指定重新启动方式,always 表示始终重启
# -e 指定环境变量配置
# -p 指定容器和宿主机的网络端口映射
# -v 指定容器和宿主机的目录挂载
# --network 指定容器使用的网络
# --network-alias 指定容器在网络中的别名

docker run -d \
--name 容器名称 镜像名称[:标签/版本] \
[-m xxxm] \
--restart=always \
[-e 环境变量名=环境变量值] \
[-p 宿主机端口:容器内部端口] \
[-v 宿主机目录:容器内部目录] \
[--network 网络名称 --network-alias 网络别名]

停止容器

shell
# 停止指定容器
docker stop 容器ID/容器名称 [容器ID/容器名称...]

# 停止所有容器
docker stop `docker ps -aq`
docker stop $(docker ps -aq)

笔者说

q 是 quiet 的意思,加上这个参数后,docker ps 输出的就不是容器详细列表了,而是容器 ID 列表,通常用于编写脚本时使用。

所以,上方停止所有容器的命令实际是 docker stop 容器1ID 容器2ID...

启动容器

shell
docker start 容器ID/容器名称

重启容器

shell
docker restart 容器ID/容器名称

删除容器

shell
# 删除指定容器
docker rm 容器ID/容器名称 [容器ID/容器名称...]

# 删除所有容器
docker rm `docker ps -aq`
docker rm $(docker ps -aq)

笔者说

q 是 quiet 的意思,加上这个参数后,docker ps 输出的就不是容器详细列表了,而是容器 ID 列表,通常用于编写脚本时使用。

所以,上方删除所有容器的命令实际是 docker rm 容器1ID 容器2ID...

进入容器内部

shell
docker exec -it 容器ID/容器名称 bash

docker exec -it 容器ID/容器名称 sh

从容器内部退出

shell
exit

向容器内拷贝文件

shell
docker cp 宿主机内文件路径 容器名称:容器内文件路径

查看容器日志

shell
# -f/--flow 跟踪日志输出
# -n/--tail 从日志末尾显示的行数,默认为 all
# -t/--timestamps 显示时间戳
# --since 自某个时间之后的日志
# 例如:--since "2022-09-30" 表示显示2022年9月30日后的日志
# 例如:--since 30m 表示显示最近 30 分钟内的日志
# --until 某个时间之前的日志
docker logs -f [-n 行数] [-t] [--since 开始时间] [--until 结束时间] 容器ID/容器名称

备份容器为本地镜像

笔者说

如果镜像名称后不指定 标签/版本 ,则会默认使用最新版本(latest)。

shell
docker commit [-a "作者"] [-m "信息"] 容器ID/容器名称 镜像名称[:标签/版本]

将容器导出为 tar.gz 文件

shell
docker export 容器ID/容器名称 > 文件路径.tar.gz

将 tar.gz 文件导入为镜像

笔者说

如果镜像名称后不指定 标签/版本 ,则会默认使用最新版本(latest)。

shell
docker import 文件路径.tar.gz 镜像名称[:标签/版本]

网络相关

查看网络列表

shell
docker network ls

创建 bridge 网络

shell
docker network create 网络名称

删除网络

shell
docker network rm 网络ID/网络名称

其他

查看 docker 版本

shell
docker -v
docker version

查看 docker 信息

shell
docker info

查看 docker 容器数据大小

shell
#  du: 用于估算文件或目录空间使用量
#  -d1:递归计算目录大小,仅显示深度为 1 的目录
#  -h:输出结果使用可读格式
#  /var/lib/docker/containers: docker Root 目录,可通过 docker info 查看
#  | sort -rh: 对结果进行排序,-r 表示逆序,-h 表示可读格式
du -d1 -h /var/lib/docker/containers | sort -rh
text
124M    /var/lib/docker/containers
123M    /var/lib/docker/containers/9a4e39cadf982ce4c3e26664372bc04010cb314424cba09358b7f115888caba1
156K    /var/lib/docker/containers/35bb9ff5e03dd3858a1676ca1a4c37e2c4ea443a59800844699097bb2b6490a6
72K     /var/lib/docker/containers/9f46b4b852fdbe7fed5a2a582896eafe16abf80d31d00e53ad13a1d3e91858ff
44K     /var/lib/docker/containers/2692238a2daf1f98c5ea94af986ada84e1d06a552778ee2194a723cb7a57851d
40K     /var/lib/docker/containers/d88a302483e9aba8c3aded15106e62391441939503d575b6bfc26341dd990e6a
40K     /var/lib/docker/containers/c0800ae72568af1f576fd8cf1d9072db4a5f73572dc0cc34555515aa6f833bbc
40K     /var/lib/docker/containers/a9f5d88ffa09ff3c0395b82cdd15122b24cc3c5be01e39689c79fcdd0941c430
40K     /var/lib/docker/containers/7056838973b88637dd54b4c369c080ca52dd82312136f5a1dc5cc814bfd8003c
40K     /var/lib/docker/containers/6e90f3a052ac3b0b937d06d1c67e640001fd261d54d32e40e821bb406d985a87
40K     /var/lib/docker/containers/6da1c0c71de390540465a69a2cc0962fd8bd75f56029ceb322bbf2c046ca64c4
40K     /var/lib/docker/containers/60f665d49c0802ad1583fbadca116d3087c266debf86fdeda8b00d8e33dd9a7f
40K     /var/lib/docker/containers/60d81da51ddab7b1397949d1c3c6197757c30e8fa9b2d868cf9c89d70fc36200
40K     /var/lib/docker/containers/48ad11217cf3306fde51030ad82eb9bcff2bc5c33291bf99f8a112724c530fa9
40K     /var/lib/docker/containers/448969aab4ae06dbc1b5df980385bdcebe63fd3b71191bb4daa6590e82cc569f
40K     /var/lib/docker/containers/2457357e5756920fd70fee8d257e25d968711c528eabffa7d5052065f276266c
40K     /var/lib/docker/containers/100885c3ed9484765394bce68f720561cbf539a14caa8c3bc103bb6550e100ed
40K     /var/lib/docker/containers/0913f195ca70fd4c9e316735e412bee1e850e0c5565768ff46f016f09634beeb
36K     /var/lib/docker/containers/698e171f56a18a561920f31f66e279ff37a64ed8f15967918e5c818154d82685
36K     /var/lib/docker/containers/542d450c5627c6c6283d110d692c7c8e763397ef3a3b23bc5b958d7b0aa7b97a

docker-compose命令

启动并后台运行所有的服务

shell
docker-compose up -d

停止并删除容器、网络、卷、镜像

shell
docker-compose down

列出项目中目前的所有容器

shell
docker-compose ps

停止容器

shell
docker-compose stop 容器名

启动容器

shell
docker-compose start 容器名

修改 yml 文件后,重新启动并后台运行

shell
docker-compose up --force-recreate -d

重新构建镜像并启动

适用于通过 build Dockerfile 构建的镜像。

shell
docker-compose up --force-recreate --build -d 容器名