前言
Docker 是一个开源的容器化平台,使开发人员能够轻松地创建、部署和运行应用程序。它通过容器技术将应用程序及其所有依赖项打包在一起,确保在任何环境中都能一致运行。掌握 Docker 命令行工具是使用 Docker 的关键。本文将详细介绍常用的 Docker 命令,并附带示例。
一、Docker 基本命令
1.1 查看 Docker 版本
docker --version
示例输出:
Docker version 20.10.6, build 370c289
1.2 查看 Docker 系统信息
docker info
该命令显示 Docker 系统的详细信息,包括容器数量、镜像数量、存储驱动等。
二、镜像相关命令
2.1 搜索镜像
docker search <镜像名称>
例如,搜索 Nginx 镜像:
docker search nginx
2.2 拉取镜像
docker pull <镜像名称>
例如,拉取最新的 Ubuntu 镜像:
docker pull ubuntu:latest
2.3 列出本地镜像
docker images
2.4 删除镜像
docker rmi <镜像ID>
列出镜像并删除指定的镜像:
docker images
docker rmi 1234567890ab
三、容器相关命令
3.1 运行容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
例如,运行一个交互式的 Ubuntu 容器并进入其终端:
docker run -it ubuntu /bin/bash
3.2 列出正在运行的容器
docker ps
列出所有容器(包括停止的容器):
docker ps -a
3.3 停止容器
docker stop <容器ID>
3.4 启动容器
docker start <容器ID>
3.5 删除容器
docker rm <容器ID>
四、容器管理命令
4.1 查看容器日志
docker logs <容器ID>
4.2 进入运行中的容器
docker exec -it <容器ID> /bin/bash
4.3 查看容器资源使用情况
docker stats <容器ID>
4.4 导出容器
docker export <容器ID> > <文件名>.tar
4.5 导入容器
cat <文件名>.tar | docker import - <镜像名称>:<标签>
五、网络相关命令
5.1 查看网络
docker network ls
5.2 创建网络
docker network create <网络名称>
5.3 删除网络
docker network rm <网络名称>
5.4 连接容器到网络
docker network connect <网络名称> <容器ID>
5.5 断开容器与网络的连接
docker network disconnect <网络名称> <容器ID>
六、Docker Compose 相关命令
6.1 启动 Docker Compose
docker-compose up
6.2 后台运行 Docker Compose
docker-compose up -d
6.3 停止 Docker Compose
docker-compose down
6.4 查看 Docker Compose 日志
docker-compose logs
6.5 列出 Docker Compose 服务
docker-compose ps
七、docker run 命令详解
docker run
命令是 Docker 最常用的命令之一,用于创建并启动一个新的容器。该命令非常强大,支持多种选项来控制容器的行为和配置。下面我们详细介绍 docker run
命令的各种用法及其常用选项。
7.1 基本用法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
IMAGE
: 指定要运行的镜像。COMMAND
: (可选)指定要在容器中执行的命令。ARG...
: (可选)传递给命令的参数。
7.2 常用选项
1. 交互模式 (-i
和 -t
)
-i
或--interactive
: 使容器保持标准输入打开。-t
或--tty
: 分配一个伪终端。
通常一起使用以便于进入容器的交互式终端,例如:
docker run -it ubuntu /bin/bash
2. 后台运行 (-d
)
-d
或--detach
: 后台运行容器并返回容器ID。
docker run -d nginx
3. 命名容器 (--name
)
--name
: 为容器指定一个名称,便于管理和识别。
docker run --name mynginx -d nginx
4. 端口映射 (-p
和 -P
)
-p
: 指定端口映射,格式为host_port:container_port
。
docker run -p 8080:80 nginx
-P
: 随机映射所有暴露的端口。
docker run -P nginx
5. 环境变量 (-e
)
-e
或--env
: 设置环境变量。
docker run -e "ENV_VAR_NAME=value" ubuntu env
6. 挂载卷 (-v
)
-v
或--volume
: 挂载主机目录或卷到容器内,格式为host_dir:container_dir
。
docker run -v /host/data:/container/data ubuntu
7. 限制资源
--memory
: 限制容器的内存使用,例如100m
。--cpus
: 限制容器使用的 CPU 数,例如0.5
表示限制使用 50% 的 CPU。
docker run --memory="100m" --cpus="0.5" ubuntu
8. 自动重启 (--restart
)
--restart
: 设置容器的重启策略,例如no
,on-failure
,always
,unless-stopped
。
docker run --restart=always nginx
9. 网络设置
--network
: 指定容器使用的网络模式,例如bridge
,host
,none
,container:<name|id>
。
docker run --network=host nginx
10. 移除容器 (--rm
)
--rm
: 容器退出时自动删除容器。
docker run --rm ubuntu
11. 用户 (-u
)
-u
或--user
: 以指定用户身份运行容器。
docker run -u username ubuntu
12. 停止信号 (--stop-signal
)
--stop-signal
: 设置停止容器时发送的系统信号,默认是SIGTERM
。
docker run --stop-signal=SIGKILL ubuntu
7.3 示例
- 运行一个带有环境变量的交互式 Ubuntu 容器
docker run -it -e "MY_VAR=hello" ubuntu /bin/bash
- 运行一个后台 Nginx 容器并映射端口
docker run -d -p 8080:80 --name mynginx nginx
- 运行一个具有卷挂载和资源限制的容器
docker run -d -v /host/data:/container/data --memory="200m" --cpus="1.0" ubuntu
- 运行一个自动重启的 MySQL 容器
docker run -d --restart=unless-stopped --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql
- 运行一个在自定义网络中的 Redis 容器
docker network create mynetwork
docker run -d --network=mynetwork --name redis redis
docker run
命令提供了强大的功能和灵活性,通过结合不同的选项,用户可以创建符合各种需求的容器化应用。掌握这些选项将极大地提升您使用 Docker 的效率和能力。
八、docker exec 命令详解
docker exec
命令用于在一个已经运行的容器中执行命令。这对于调试和管理运行中的容器非常有用。通过 docker exec
,可以进入容器的终端,检查容器的状态,运行脚本或程序,而无需停止和重新启动容器。
8.1 基本用法
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
CONTAINER
: 运行的容器的名称或 ID。COMMAND
: 要在容器中执行的命令。ARG...
: 传递给命令的参数。
8.2 常用选项
1. 交互模式 (-i
和 -t
)
-i
或--interactive
: 使命令保持标准输入打开。-t
或--tty
: 分配一个伪终端。
通常一起使用以便于进入容器的交互式终端。例如:
docker exec -it <CONTAINER> /bin/bash
2. 用户 (-u
)
-u
或--user
: 指定以哪个用户身份执行命令。可以是用户名或 UID。
docker exec -u <USER> <CONTAINER> <COMMAND>
例如,以 root 用户在容器中执行命令:
docker exec -u root <CONTAINER> /bin/bash
3. 环境变量 (-e
)
-e
或--env
: 设置环境变量。
docker exec -e "ENV_VAR_NAME=value" <CONTAINER> <COMMAND>
4. 运行特权 (--privileged
)
--privileged
: 给予命令特权,允许访问更多系统资源。
docker exec --privileged <CONTAINER> <COMMAND>
5. 分离模式 (-d
)
-d
或--detach
: 在后台执行命令。
docker exec -d <CONTAINER> <COMMAND>
8.3 示例
- 在运行的容器中启动一个交互式 Bash 终端
docker exec -it mycontainer /bin/bash
- 以指定用户身份执行命令
docker exec -u username mycontainer ls /home/username
- 设置环境变量并执行命令
docker exec -e "MY_VAR=hello" mycontainer printenv MY_VAR
- 在容器中后台运行一个进程
docker exec -d mycontainer sh -c "while true; do echo hello; sleep 1; done"
- 使用特权模式执行命令
docker exec --privileged mycontainer /sbin/init
8.4 实际案例
调试运行中的 Web 服务器容器
假设有一个正在运行的 Nginx 容器,并且需要检查其配置文件:
docker exec -it mynginx /bin/bash
进入容器后,可以查看和编辑配置文件:
cat /etc/nginx/nginx.conf
vi /etc/nginx/nginx.conf
运行数据库查询
假设有一个正在运行的 MySQL 容器,并且需要执行一个数据库查询:
docker exec -it mymysql mysql -uroot -p
进入 MySQL 终端后,可以运行 SQL 查询:
SHOW DATABASES;
在后台运行健康检查脚本
假设有一个需要在后台运行的健康检查脚本,以便定期检查应用程序的状态:
docker exec -d myappcontainer /path/to/healthcheck.sh
通过这些示例,我们可以看到 docker exec
命令在容器管理中的灵活性和强大功能。掌握 docker exec
命令,将有助于更有效地调试和管理 Docker 容器化应用。
总结
以上是 Docker 常用命令的简要概述,掌握这些命令将有助于您更高效地使用 Docker 进行容器管理和应用部署。在实际操作中,可以通过 docker --help
和 docker <命令> --help
查看每个命令的详细用法和参数选项。希望本文能为您提供一个良好的参考。