Appearance
Docker 常用命令
1. 镜像命令
1.1. 列出本地镜像
Bash
docker images [OPTIONS] [REPOSITORY[:TAG]]1.2. 拉取镜像
Bash
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
# example
docker pull ubuntu:24.041.3. 删除镜像
Bash
docker rmi [OPTIONS] IMAGE [IMAGE...]
# example
docker rmi ubuntu:24.041.4. 检查镜像详情
Bash
docker inspect [OPTIONS] NAME|ID [NAME|ID...]Note:
inspect除了可以检查镜像也可以检查容器。
1.5. 构建镜像
Bash
docker buildx build [OPTIONS] PATH | URL | -docker buildx 是 Docker 提供的一个扩展工具,用于构建和推送多平台镜像。它支持并行构建和跨平台构建,适用于需要在不同架构(如 AMD64、ARM64 等)上运行的容器镜像。
以下是一个经典的 docker buildx build 示例,展示如何使用 buildx 构建和推送多平台镜像:
安装 Docker Buildx
首先,确保你已经安装了 Docker Buildx。如果没有安装,可以使用以下命令进行安装:
Bashdocker buildx create --use创建一个 Dockerfile
假设你有一个简单的 Dockerfile,内容如下:
Dockerfile# syntax=docker/dockerfile:1 FROM ubuntu:latest RUN apt-get update && apt-get install -y curl CMD ["curl", "--version"]构建多平台镜像
以下命令将构建一个支持
linux/amd64和linux/arm64架构的镜像,并推送到 Docker Hub:Bashdocker buildx build \ --platform linux/amd64,linux/arm64 \ -t yourusername/yourimage:latest \ --push \ .选项说明:
--platform linux/amd64,linux/arm64:指定目标平台;-t yourusername/yourimage:latest:标记镜像;--push:在构建完成后推送镜像到 Docker Hub;.:指定构建上下文,通常是当前目录;
其他常用选项:
--load:在构建完成后加载镜像到本地 Docker 守护进程;--no-cache:不使用缓存构建镜像;--progress:显示构建进度;
1.6. 保存镜像到 tar 文件
Bash
docker save [OPTIONS] IMAGE [IMAGE...]
# example
docker save -o fedora-latest.tar fedora:latest1.7. 从 tar 文件加载镜像
Bash
docker load [OPTIONS]
# example
docker load --input fedora.tar1.8. 标记镜像
Bash
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
# example
docker tag rhel-httpd:latest registry-host:5000/myadmin/rhel-httpd:latest1.9. 推送镜像到仓库
Bash
docker push [OPTIONS] NAME[:TAG]
# example
docker push registry-host:5000/myadmin/rhel-httpd:latest2. 容器命令
2.1. 运行容器
Bash
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# example
docker run \
-d \ # 以后台模式运行
--name mycontainer \ # 指定容器名称
ubuntu:latest \ # 使用的镜像
sleep 3600 # 容器启动后运行的命令常用选项说明:
-d:以后台模式运行容器;--name mycontainer:为容器指定名称;-it:交互方式运行;-p:指定宿主机与容器的端口映射,示例:-p 主机端口:容器端口;-v:指定宿主机与容器的挂载映射,示例:-v 主机路径:容器路径;--volumes-from:从指定容器装载卷;--rm:当容器退出时自动删除容器及其关联的匿名卷;
以 CentOS 7 为例:
Bash
docker run -it centos:centos7 /bin/bash进入容器后有两种方式退出容器:
exit:停止容器并退出;^P ^Q:容器不停止退出;
2.2. 列出运行中的容器
Bash
docker ps [OPTIONS]常用选项说明:
-a:显示所有容器(默认显示仅运行);-n:显示最近创建的 n 个容器(包括所有状态);-q:仅显示容器 ID;
2.3. 停止/启动/重启容器
Bash
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker start [OPTIONS] CONTAINER [CONTAINER...]
docker restart [OPTIONS] CONTAINER [CONTAINER...]除了 docker stop,docker kill 也可以用于停止运行中的 Docker 容器:
Bash
docker kill [OPTIONS] CONTAINER [CONTAINER...]以下是它们的主要区别:
docker stop:容器会收到SIGTERM信号,容器内的进程有机会完成清理工作,如果容器在 10 秒内没有响应SIGTERM,会收到SIGKILL信号强制终止。docker kill:容器会立即收到SIGKILL信号,强制终止所有进程,无法完成任何清理工作。
2.4. 暂停/恢复容器
Bash
docker pause CONTAINER [CONTAINER...]
docker unpause CONTAINER [CONTAINER...]2.5. 进入容器
Bash
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
# example
docker exec -it mycontainer /bin/bash除了 docker exec,docker attach 也可以用于进入运行中的 Docker 容器:
Bash
docker attach [OPTIONS] CONTAINER以下是它们的主要区别:
docker exec:在容器内启动一个新的进程,运行任意命令。适用于在容器内运行额外命令或进行调试。docker attach:连接到容器的主进程,查看主进程的输出和与主进程交互。适用于调试容器启动时的问题。
2.6. 查看容器日志
Bash
docker logs [OPTIONS] CONTAINER
# example
docker logs -tf -n 10 mycontainer常用选项说明:
-f:跟踪日志输出;-n:从日志末尾开始显示的行数(默认为 “全部”);-t:显示时间戳;
2.7. 查看统计信息
Bash
docker stats [OPTIONS] [CONTAINER...]2.8. 删除容器
Bash
docker rm [OPTIONS] CONTAINER [CONTAINER...]
# example
docker rm -f $(docker ps -aq) # 删除所有的容器
docker ps -aq | xargs docker rm -f # 删除所有的容器删除所有停止的容器:
Bash
docker container prune2.9. 文件复制
从容器复制文件:
Bash
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
# example
docker cp my_container:/path/to/file /host/path/to/destination复制文件到容器:
Bash
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
# example
docker cp /host/path/to/file my_container:/path/to/destination3. 其它命令
3.1. 数据卷管理
Bash
docker volume COMMAND常用选项说明:
inspect:显示一个或多个卷的详细信息;ls:列出卷;rm:删除一个或多个卷;
3.2. 网络管理
Bash
docker network COMMAND常用选项说明:
connect:将容器连接到指定网络;常用选项:
--alias <alias>:为容器在网络中设置别名;--ip <ip_address>:指定容器的静态 IP(仅在支持自定义 IP 的网络中有效)。
示例:
Bashdocker network connect my_network my_containercreate:创建一个新的 Docker 网络;常用选项:
--driver <driver>:指定网络驱动(默认bridge);--subnet <subnet>:设置网络子网;--gateway <gateway>:设置网关地址。
示例:
Bashdocker network create --subnet 172.20.0.0/16 --gateway 172.20.0.1 my_custom_networkdisconnect:从指定网络中断开容器;示例:
Bashdocker network disconnect my_network my_containerinspect:查看网络的详细信息;示例:
Bashdocker network inspect --format '{{.Name}} - {{.Driver}}' my_networkls:列出所有 Docker 网络;prune:删除所有未使用的网络;rm:删除指定的一个或多个网络。
3.3. 修改容器配置
docker update 命令用于动态更新一个或多个正在运行的 Docker 容器的配置,无需停止或重新创建容器。
例如:
Bash
docker update --restart=always my_container3.4. --format 参数
--format 参数基本用法:
Bash
docker <command> --format <template><template> 使用 Go 模板语法,允许你提取容器相关的字段并按照指定的格式输出。
示例:
显示容器 ID、镜像、名称、状态和端口映射:
Bashdocker ps --format "table {{.ID}}\t{{.Image}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"只显示镜像、名称和状态:
Bashdocker ps --format "table {{.Image}}\t{{.Names}}\t{{.Status}}"JSON 格式输出所有字段:
Bashdocker ps --format "{{json .}}"
4. 经典示例
4.1. MySQl
Bash
docker run \
-d \
-p 3306:3306 \
-v /path/to/local/conf:/etc/mysql/conf.d \
-v /path/to/local/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=your_password \
--name your_name \
mysql:5.7.44