个人常用 Docker 命令 持续更新
镜像相关
查看本地镜像列表
docker images
从记录中心查询镜像
docker search 镜像关键词
从记录中心拉取镜像到本地
笔者说
如果镜像名称后不指定 标签/版本 ,则会默认使用最新版本(latest)。
例如:docker pull tomcat:8.5.0 拉取的就是 8.5.0 版本的 tomcat 镜像,而 docker pull tomcat -> 拉取的实际是 docker pull tomcat:latest,这个 latest 是跟随记录中心中的最新版本变化的,无法确定当前拉取的是哪一个版本。
docker pull 镜像名称[:标签/版本]
删除本地镜像
# 删除指定镜像
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)。
docker build -t 镜像名称[:标签/版本] Dockerfile文件路径
将本地镜像导出为 tar 文件
笔者说
如果镜像名称后不指定 标签/版本 ,则会默认使用最新版本(latest)。
docker save -o/-output 文件路径.tar 镜像名称[:标签/版本]
从 tar 文件导入为本地镜像
docker load -i/-input 文件路径.tar
容器相关
查看容器列表
# 查看正在运行的容器
docker ps
# 查看全部容器(包含已经停止的)
docker ps -a
# 模糊查询容器
docker ps [-a] | grep 容器关键词
创建容器并运行
笔者说
如果镜像名称后不指定 标签/版本 ,则会默认使用最新版本(latest)。
如果本地不存在该版本的镜像,则会先从记录中心拉取到本地。
# -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 网络别名]
停止容器
# 停止指定容器
docker stop 容器ID/容器名称 [容器ID/容器名称...]
# 停止所有容器
docker stop `docker ps -aq`
docker stop $(docker ps -aq)
笔者说
q
是 quiet 的意思,加上这个参数后,docker ps 输出的就不是容器详细列表了,而是容器 ID 列表,通常用于编写脚本时使用。
所以,上方停止所有容器的命令实际是 docker stop 容器1ID 容器2ID...
启动容器
docker start 容器ID/容器名称
重启容器
docker restart 容器ID/容器名称
删除容器
# 删除指定容器
docker rm 容器ID/容器名称 [容器ID/容器名称...]
# 删除所有容器
docker rm `docker ps -aq`
docker rm $(docker ps -aq)
笔者说
q
是 quiet 的意思,加上这个参数后,docker ps 输出的就不是容器详细列表了,而是容器 ID 列表,通常用于编写脚本时使用。
所以,上方删除所有容器的命令实际是 docker rm 容器1ID 容器2ID...
进入容器内部
docker exec -it 容器ID/容器名称 bash
docker exec -it 容器ID/容器名称 sh
从容器内部退出
exit
向容器内拷贝文件
docker cp 宿主机内文件路径 容器名称:容器内文件路径
查看容器日志
# -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)。
docker commit [-a "作者"] [-m "信息"] 容器ID/容器名称 镜像名称[:标签/版本]
将容器导出为 tar.gz 文件
docker export 容器ID/容器名称 > 文件路径.tar.gz
将 tar.gz 文件导入为镜像
笔者说
如果镜像名称后不指定 标签/版本 ,则会默认使用最新版本(latest)。
docker import 文件路径.tar.gz 镜像名称[:标签/版本]
网络相关
查看网络列表
docker network ls
创建 bridge 网络
docker network create 网络名称
删除网络
docker network rm 网络ID/网络名称
其他
查看 docker 版本
docker -v
docker version
查看 docker 信息
docker info
查看 docker 容器数据大小
# 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
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命令
启动并后台运行所有的服务
docker-compose up -d
停止并删除容器、网络、卷、镜像
docker-compose down
列出项目中目前的所有容器
docker-compose ps
停止容器
docker-compose stop 容器名
启动容器
docker-compose start 容器名
修改 yml 文件后,重新启动并后台运行
docker-compose up --force-recreate -d
重新构建镜像并启动
适用于通过 build Dockerfile 构建的镜像。
docker-compose up --force-recreate --build -d 容器名