Docker 教程

Docker 创建容器常用选项

在 Docker 中,docker run 是 Docker 中用于启动一个新容器的主要命令。以下是对 docker run 命令的详细介绍和一些选项:

语法

命令用法:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

参数说明:

  • IMAGE:要运行的 Docker 镜像名称。可以是从 Docker Hub 或其他镜像仓库拉取的镜像,也可以是本地构建的镜像。

  • OPTIONS:命令选项。

  • COMMAND 和 ARG:可选的命令和参数,用于在容器启动时执行特定的应用程序或命令。如果镜像的默认启动命令不满足需求,可以通过这些参数指定自定义的命令。

别名

docker container run, docker run

常用选项

-d 后台运行容器

以分离模式(detached mode)运行容器,即在后台运行容器,容器启动后不会将控制台连接到容器的标准输入输出。这对于长期运行的服务容器非常有用。

例如:

docker run -d nginx

将在后台启动一个 Nginx 容器。

-p 端口映射

将容器的端口映射到主机的端口。格式为 -p <主机端口>:<容器端口>。这允许外部通过主机的端口访问容器内运行的服务。

例如:

docker run -p 8080:80 nginx

将容器内的 80 端口映射到主机的 8080 端口,这样可以通过访问主机的 8080 端口来访问容器内的 Nginx 服务。

-v 文件挂载

将主机的目录或文件挂载到容器中。格式为 -v <主机路径>:<容器路径>。这可以用于在容器和主机之间共享数据,或者为容器提供持久化存储。

例如:

docker run -v /host/data:/container/data nginx

将主机上的 /host/data 目录挂载到容器内的 /container/data 目录。

--name 设置名称

为容器指定一个名称。这使得在后续操作中更容易识别和管理容器。

例如:

docker run --name mycontainer nginx

将启动一个名为 mycontainer 的 Nginx 容器。

-e 设置环境变量

可以在容器启动时为容器内的应用程序设置环境变量。

例如:

docker run -e MY_ENV_VAR=value nginx

将设置一个名为 MY_ENV_VAR,值为 value 的环境变量。

-it 交互模式运行

以交互模式(interactive mode)运行容器,并为容器分配一个伪终端(tty)。这允许用户直接与容器进行交互,例如在容器内执行命令。

例如:

docker run -it ubuntu /bin/bash

将启动一个 Ubuntu 容器,并打开一个 bash 终端,用户可以在其中执行命令。

--rm 容器退出时自动删除容器

当容器退出时自动删除容器。这对于临时运行的容器非常有用,可以避免手动清理容器。

例如:

docker run --rm ubuntu echo "Hello, Docker!"

将启动一个 Ubuntu 容器,执行 echo 命令后退出,并自动删除容器。

-u 指定用户和用户组

指定容器内运行的用户和用户组。格式为 -u <用户>:<用户组>。

例如:

docker run -u 1000:1000 nginx

将以用户 ID 为 1000 和用户组 ID 为 1000 的用户在容器内运行 Nginx。

--network 指定容器连接的网络

可以是默认的 bridge 网络,也可以是自定义的网络或其他网络模式。

例如:

docker run --network mynetwork nginx

将容器连接到名为 mynetwork 的网络。

更多选项

  • --add-host list  添加自定义主机到 IP 的映射(host:ip)

  • --annotation map  为容器添加注释(传递给 OCI 运行时),默认为 map[]

  • -a, --attach list  附加到 STDIN、STDOUT 或 STDERR

  • --blkio-weight uint16   块 IO(相对权重),介于 10 和 1000 之间,或 0 表示禁用(默认为 0)

  • -blkio-weight-device list  块 IO 权重(相对设备权重)(默认为[])。

  • --cap-add list   添加 Linux 功能

  • --cap-drop list   删除 Linux 功能

  • --cgroup-parent string  容器的可选父 cgroup

  • --cgroupns string   要使用的 Cgroup 命名空间(host | private)

    • "host":在 Docker 主机的 cgroup 命名空间中运行容器

    • "private": 在自己的私有 cgroup 命名空间中运行容器

    • "": 使用由守护进程上的 default-cgroupns-mode 选项配置的 cgroup 命名空间(默认值)

  • --cidfile string   将容器 ID 写入文件

  • --cpu-period int   限制 CPU CFS(完全公平调度程序)周期

  • --cpu-quota int   限制 CPU CFS(完全公平调度程序)配额

  • --cpu-rt-period int   以微秒为单位限制 CPU 实时周期

  • --cpu-rt-runtime int   以微秒为单位限制 CPU 实时运行时间

  • -c, --cpu-shares int  CPU 占有率(相对权重)

  • --cpus decimal   CPU 数量

  • --cpuset-cpus string   允许执行的 CPU(0-3, 0,1)

  • --cpuset-mems string   允许执行的 MEM(0-3, 0,1)

  • -d, --detach   在后台运行容器并打印容器 ID

  • --detach-keys string   覆盖用于分离容器的键序列

  • --device list   向容器添加主机设备

  • --device-cgroup-rule list   在 cgroup 允许的设备列表中添加一条规则

  • --device-read-bps list   限制从设备读取的速率(每秒字节数)(默认为[])

  • --device-read-iops list   限制设备的读取速率(每秒 IO)(默认为[])

  • --device-write-bps list   限制写入设备的速度(每秒字节数)(默认为[])

  • --device-write-iops list   限制写入设备的速度(每秒 IO)(默认为[])

  • --disable-content-trust   (禁用内容信任)跳过镜像验证(默认为 true)

  • --dns list   设置自定义 DNS 服务器

  • --dns-option list   设置 DNS 选项

  • --dns-search list   设置自定义 DNS 搜索域

  • --domainname string   容器 NIS 域名

  • --entrypoint string   覆盖图像的默认 ENTRYPOINT

  • -e, --env list   设置环境变量

  • --env-file list   读入环境变量文件

  • --expose list   公开一个端口或一系列端口

  • --gpus gpu-request   要添加到容器中的 GPU 设备(“all” 表示通过所有GPU)

  • --group-add list   添加要加入的其他群组

  • --health-cmd string   运行检查健康状况的命令

  • --health-interval duration   运行检查的间隔时间(毫秒|秒|米|小时)(默认为 0 秒)

  • --health-retries int   报告不健康所需的连续失败次数

  • --health-start-interval duration   在启动期间运行检查的间隔时间(毫秒|秒|米|小时)(默认为 0 秒)

  • --health-start-period duration   容器在开始健康重试倒计时前初始化的起始时间(毫秒|秒|米|小时)(默认为 0 秒)

  • --health-timeout duration   允许运行一次检查的最长时间(毫秒|秒|米|小时)(默认为 0 秒)

  • --help   打印用法

  • -h,--hostname string   容器主机名

  • --init   在容器内运行 init,转发信号并回收进程

  • -i,--interactive   STDIN 即使未连接也保持打开状态

  • --ip string   IPv4 地址(如 172.30.100.104)

  • --ip6 string   IPv6 地址(例如,2001:db8::33)

  • --ipc string   要使用的 IPC 模式

  • --isolation string   容器隔离技术

  • --kernel-memory bytes   内核内存限制

  • -l, -label list   设置容器的元数据

  • --label-file list   读入以行分隔的标签文件

  • --link list   添加到另一个容器的链接

  • --link-local-ip list   容器 IPv4/IPv6 链路本地地址

  • --log-driver string   容器的日志驱动程序

  • --log-opt list   日志驱动选项

  • --mac-address string   容器的MAC地址(例如,92:d0:c6:0a:29:33)

  • -m, --memory bytes   内存限制

  • --memory-reservation bytes   内存软限制

  • --memory-swap bytes   交换限制等于内存加交换:'-1'表示启用无限交换

  • -memory-swappiness int   调整容器内存交换度(0 到 100)(默认值 -1)

  • --mount mount   将文件系统挂载到容器上

  • --name string   为容器指定名称

  • --network network   将容器连接到网络

  • --network-alias list   为容器添加网络范围别名

  • --no-healthcheck   禁用容器指定的任何健康检查

  • --oom-kill-disable   禁用 OOM 杀手

  • --oom-score-adj int   调整主机的 OOM 偏好(-1000 至 1000)

  • --pid string   要使用的 PID 命名空间

  • --pids-limit int   调整容器 pids 限制(设置 -1 表示无限制)

  • --platform string   如果服务器支持多平台,则设置平台

  • --privileged   赋予该容器扩展权限

  • -p, --publish list   向主机发布容器端口

  • -P, --publish-all   将所有暴露的端口发布为随机端口

  • --pull string   运行前拉取镜像(always", "missing", "never")(默认为 "missing")

  • -q,--quiet   禁止拉取输出

  • --read-only   以只读方式挂载容器的根文件系统

  • --restart string   容器退出时要应用的重启策略(默认为 “no”)

  • --rm   容器退出时自动移除容器及其关联的匿名卷

  • --runtime string   该容器要使用的运行时

  • --security-opt list   安全选项

  • --shm-size bytes   /dev/shm 的大小

  • --sig-proxy   代理进程接收信号(默认为 true)

  • --stop-signal string   停止容器的信号

  • --stop-timeout int   停止容器的超时(以秒为单位)

  • --storage-opt list   容器的存储驱动选项

  • --sysctl map   Sysctl选项(默认为 map[]

  • --tmpfs list   挂载 tmpfs 目录

  • -t、--tty   分配一个伪TTY

  • --ulimit ulimit   限制选项(默认为 [])

  • -u,--user string   用户名或 UID(格式:<name|uid>[:<group|gid>]

  • --userns string   要使用的用户命名空间

  • --uts string   要使用的UTS命名空间

  • -v,--volume list   绑定挂载卷

  • --volume-driver string   容器的可选卷驱动程序

  • --volumes-from list   从指定容器挂载卷

  • -w,--workdir string   容器内的工作目录

示例

以下是一些创建 Docker 容器的示例:

基于官方镜像创建容器并运行简单命令

假设你想创建一个基于 Ubuntu 镜像的容器,并在容器中运行一个简单的命令,如查看文件系统。

首先拉取 Ubuntu 镜像:

root@hxstrive:~# docker pull ubuntu:latest
latest: Pulling from library/ubuntu
Digest: sha256:8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04e34a9ab63ee
Status: Image is up to date for ubuntu:latest
docker.io/library/ubuntu:latest

然后创建并进入容器执行命令:

root@hxstrive:~# docker run -it ubuntu:latest /bin/bash
root@c47713422164:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@c47713422164:/#

这个命令会创建一个交互式的容器,使用-it参数让你可以在容器中与终端进行交互。容器启动后,你将处于 Ubuntu 的命令行环境中,可以执行各种命令,比如使用ls查看当前目录内容。

创建容器并映射端口

假设你有一个 Web 应用在容器中运行,需要将容器的端口映射到主机上以便外部访问。

拉取一个包含 Web 应用的镜像,比如 Nginx:

root@hxstrive:~# docker pull nginx:latest
latest: Pulling from library/nginx
e4fff0779e6d: Already exists 
2a0cb278fd9f: Pull complete 
7045d6c32ae2: Pull complete 
03de31afb035: Pull complete 
0f17be8dcff2: Pull complete 
14b7e5e8f394: Pull complete 
23fa5a7b99a6: Pull complete 
Digest: sha256:447a8665cc1dab95b1ca778e162215839ccbb9189104c79d7ec3a81e14577add
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

创建并运行容器,将容器的 80 端口映射到主机的 8080 端口:

# 使用上面的 nginx 镜像创建一个容器
root@hxstrive:~# docker run -d -p 8080:80 nginx:latest
41a203fa62c517aae632147b7e5fe3408b902053df84970a9216ef5334ff39fa

# 使用 curl 访问 nginx 服务
root@hxstrive:~# curl localhost:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
root@hxstrive:~#

-d参数表示以守护式(后台)模式运行容器,-p 8080:80将主机的 8080 端口映射到容器的 80 端口。

现在你可以在浏览器中访问 http://localhost:8080  来查看 Nginx 的默认页面。

说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号