点击学习开源企业 Docker 镜像仓库 Harbor 软件 教程。
在 Docker 中,docker run 是 Docker 中用于启动一个新容器的主要命令。以下是对 docker run 命令的详细介绍和一些选项:
命令用法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
参数说明:
IMAGE:要运行的 Docker 镜像名称。可以是从 Docker Hub 或其他镜像仓库拉取的镜像,也可以是本地构建的镜像。
OPTIONS:命令选项。
COMMAND 和 ARG:可选的命令和参数,用于在容器启动时执行特定的应用程序或命令。如果镜像的默认启动命令不满足需求,可以通过这些参数指定自定义的命令。
docker container run, docker run
以分离模式(detached mode)运行容器,即在后台运行容器,容器启动后不会将控制台连接到容器的标准输入输出。这对于长期运行的服务容器非常有用。
例如:
docker run -d nginx
将在后台启动一个 Nginx 容器。
将容器的端口映射到主机的端口。格式为 -p <主机端口>:<容器端口>。这允许外部通过主机的端口访问容器内运行的服务。
例如:
docker run -p 8080:80 nginx
将容器内的 80 端口映射到主机的 8080 端口,这样可以通过访问主机的 8080 端口来访问容器内的 Nginx 服务。
将主机的目录或文件挂载到容器中。格式为 -v <主机路径>:<容器路径>。这可以用于在容器和主机之间共享数据,或者为容器提供持久化存储。
例如:
docker run -v /host/data:/container/data nginx
将主机上的 /host/data 目录挂载到容器内的 /container/data 目录。
为容器指定一个名称。这使得在后续操作中更容易识别和管理容器。
例如:
docker run --name mycontainer nginx
将启动一个名为 mycontainer 的 Nginx 容器。
可以在容器启动时为容器内的应用程序设置环境变量。
例如:
docker run -e MY_ENV_VAR=value nginx
将设置一个名为 MY_ENV_VAR,值为 value 的环境变量。
以交互模式(interactive mode)运行容器,并为容器分配一个伪终端(tty)。这允许用户直接与容器进行交互,例如在容器内执行命令。
例如:
docker run -it ubuntu /bin/bash
将启动一个 Ubuntu 容器,并打开一个 bash 终端,用户可以在其中执行命令。
当容器退出时自动删除容器。这对于临时运行的容器非常有用,可以避免手动清理容器。
例如:
docker run --rm ubuntu echo "Hello, Docker!"
将启动一个 Ubuntu 容器,执行 echo 命令后退出,并自动删除容器。
指定容器内运行的用户和用户组。格式为 -u <用户>:<用户组>。
例如:
docker run -u 1000:1000 nginx
将以用户 ID 为 1000 和用户组 ID 为 1000 的用户在容器内运行 Nginx。
可以是默认的 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 的默认页面。
点击学习开源企业 Docker 镜像仓库 Harbor 软件 教程。