【Docker】一文看懂docker run的使用方法

1. docker run 的基本用法

docker run 的基本格式为:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • IMAGE:你想要运行的 Docker 镜像名。
  • COMMAND:你希望在容器中执行的命令(可选)。
  • [ARG...]:传递给命令的参数(可选)。

例如,运行一个简单的 Ubuntu 容器:

docker run ubuntu

这会从 Docker Hub 拉取 ubuntu 镜像(如果本地不存在),并启动一个基于该镜像的容器。

2. 常用的 docker run 选项

2.1. -d:后台运行容器

使用 -d 选项可以让容器在后台运行,而不是占据当前终端。它是“detached”模式的缩写。

docker run -d ubuntu

此时容器会在后台运行,你不会看到输出,但可以通过 docker ps 查看容器的状态。

2.2. --name:为容器指定名称

每次启动容器时,Docker 都会为它分配一个随机名称。如果你希望为容器指定一个自定义名称,可以使用 --name 选项。

docker run --name my_container ubuntu

这样,你的容器将以 my_container 为名称,而不是自动生成的名字。

2.3. -it:交互式终端

-i-t 常常一起使用,分别表示交互式模式(-i)和分配一个伪终端(-t)。这通常用于需要与容器交互的场景,例如运行 Bash 终端:

docker run -it ubuntu bash

此命令将启动一个 Ubuntu 容器,并进入 Bash 终端,你可以直接与容器进行交互。

2.4. -p:端口映射

当容器内部的应用需要通过特定端口与外部通信时,可以使用 -p 选项将容器的端口映射到主机的端口。格式为:

docker run -p [host_port]:[container_port] IMAGE

例如,将本地主机的 8080 端口映射到容器的 80 端口:

docker run -p 8080:80 nginx

此时,你可以通过访问 http://localhost:8080 来与 Nginx 服务器交互。

2.5. -v:挂载卷

为了在主机和容器之间共享文件,Docker 提供了卷(Volume)功能。使用 -v 选项可以将主机的目录挂载到容器中。

docker run -v /host/path:/container/path ubuntu

例如,将本地主机的 /data 目录挂载到容器的 /mnt 目录:

docker run -v /data:/mnt ubuntu

这样,容器可以访问并修改主机上的 /data 目录内容。

2.6. --rm:自动删除容器

默认情况下,容器在退出后会保留它的文件系统和状态。使用 --rm 选项可以在容器退出时自动删除该容器,以节省资源。

docker run --rm ubuntu

此容器在任务完成后将被自动删除。

2.7. -e:设置环境变量

通过 -e 选项,可以在容器中设置环境变量。例如,运行一个 MySQL 容器时,通常需要设置 MySQL 的 root 用户密码:

docker run -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql

这会在容器中设置 MYSQL_ROOT_PASSWORD 环境变量。

3. 容器生命周期管理

使用 docker run 启动的容器可以通过以下命令进行管理:

  • docker ps:列出正在运行的容器。
  • docker stop [container_name]:停止指定的容器。
  • docker start [container_name]:启动已停止的容器。
  • docker rm [container_name]:删除一个已停止的容器。

例如,停止名为 my_container 的容器:

docker stop my_container

4. 运行容器的典型场景

4.1. 运行一个 Web 服务器

使用 docker run 快速启动一个 Web 服务器是 Docker 的常见用法。例如,运行一个 Nginx 服务器,并将主机的 8080 端口映射到容器的 80 端口:

docker run -d -p 8080:80 nginx

此时,你可以通过访问 http://localhost:8080 来查看 Nginx 服务器的默认页面。

4.2. 运行数据库服务

你可以使用 docker run 轻松启动一个数据库服务。例如,启动一个 MySQL 容器,并设置 root 用户的密码:

docker run -d -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 mysql

这会启动一个 MySQL 容器,外界可以通过端口 3306 访问数据库。

4.3. 本地开发环境

在开发过程中,很多开发者使用 Docker 运行本地开发环境。例如,运行一个带有 Node.js 的容器:

docker run -it -v $(pwd):/app -w /app node bash

这会将当前目录挂载到容器中的 /app 目录,并进入 Node.js 容器中的 Bash 终端。

5. 进阶用法

除了常用的选项外,docker run 还提供了很多进阶用法,可以让用户对容器的行为和资源进行更精细的控制。

5.1. --network:自定义网络配置

Docker 提供了多种网络模式,例如 bridge、host 和 overlay 等。在容器启动时,可以通过 --network 选项指定网络模式。

  • bridge(默认模式):容器之间通过 NAT 网络隔离。
  • host:容器和主机共享同一个网络栈,这使得容器中的服务可以直接使用主机的 IP 和端口。
docker run --network host nginx

此时,容器中的 Nginx 服务会与主机共享网络。

还可以通过 docker network create 创建自定义的网络,容器可以通过该网络进行互联。

docker network create my_network
docker run --network my_network ubuntu
5.2. --link:连接其他容器

--link 选项允许一个容器与另一个容器进行通信,主要用于在没有自定义网络的情况下快速实现容器间的网络连接。它的格式为:

docker run --link [other_container_name]:[alias] IMAGE

例如:

docker run --link db_container:mysql web_container

此命令会将名为 db_container 的容器的网络别名设置为 mysql,并让 web_container 能通过 mysql 这个别名访问 db_container

5.3. --cpus--memory:限制容器资源

为了防止容器占用过多的系统资源,Docker 提供了 CPU 和内存的限制选项。--cpus 选项允许指定容器可以使用的 CPU 数量:

docker run --cpus="1.5" ubuntu

这将限制容器最多使用 1.5 个 CPU 核心。

--memory 选项则用来限制容器的内存使用:

docker run --memory="512m" ubuntu

这将限制容器使用不超过 512MB 的内存。

5.4. --restart:自动重启策略

--restart 选项允许指定容器的自动重启策略,这在生产环境中非常有用。常用的策略有:

  • no:不重启(默认值)。
  • on-failure:当容器非正常退出时(退出码不为 0)自动重启。
  • always:无论退出码为何,容器都会自动重启。
  • unless-stopped:容器会在非手动停止的情况下自动重启。

例如:

docker run --restart always nginx

这会确保 Nginx 容器在退出后会自动重启。

5.5. --env-file:批量设置环境变量

除了使用 -e 来单独设置环境变量,Docker 还支持通过 --env-file 从文件中批量加载环境变量。文件的格式是一行一个变量:

docker run --env-file ./env.list ubuntu

env.list 文件的内容示例如下:

MYSQL_ROOT_PASSWORD=my-secret-pw
MYSQL_DATABASE=mydb

这种方式可以方便地管理大量的环境变量。

6. docker run 实践案例

为了更好地理解 docker run 的强大功能,以下是一些常见的实践案例。

6.1. 部署一个 LAMP 环境

假设你需要快速部署一个 Linux + Apache + MySQL + PHP (LAMP) 的开发环境,使用 docker run 可以轻松实现。

首先,运行 MySQL 容器:

docker run -d --name mysql_container -e MYSQL_ROOT_PASSWORD=rootpassword -e MYSQL_DATABASE=app_db mysql

然后,运行 Apache 和 PHP 的组合容器,并将它与 MySQL 容器链接:

docker run -d --name web_container --link mysql_container:mysql -p 8080:80 php:apache

此时,访问 http://localhost:8080 即可查看 LAMP 环境下的网站。

6.2. 持续集成(CI)环境中的应用测试

在持续集成(CI)环境中,docker run 通常用于自动化测试。例如,在每次代码提交后,可以使用一个干净的容器环境来运行测试,确保代码的正确性。

可以通过如下方式运行测试容器:

docker run --rm -v $(pwd):/app -w /app maven mvn test

这个命令会拉取 Maven 镜像,在容器中执行测试,并在完成后自动删除容器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值