跳到主要内容

docker run 命令

docker run 简介

docker run 是 Docker 中最常用的命令之一,用于从镜像创建并启动容器。

当用户下达 docker run 指令,Docker 首先会创建(pull)对应的镜像,然后部署容器,最后启动容器。

docker run 是一个复杂的命令,它的格式如下:

docker run [选项] 镜像名 [命令] [命令参数]

docker run 示例

示例1:运行一个 Reference 容器

Reference 是一个计算机技术备忘清单,我们通过 Docker 部署它,就能在浏览器中使用。

部署:

ubuntu@HomeLab:~$ docker run -d -P --restart always wcjiang/reference
540d3b254ed8660f59a60577a0e233a2b959f785d1428f47333a958e869e9fb1

ubuntu@HomeLab:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
540d3b254ed8 wcjiang/reference "/busybox httpd -f -…" 4 seconds ago Up 4 seconds 0.0.0.0:32769->3000/tcp, :::32769->3000/tcp mystifying_jang
  • -d 后台启动
  • -P 自动映射端口
  • --restart always 服务器启动时,自动启动该容器
  • 在 docker ps 可查看已映射(桥接)的端口,本地32769端口应经映射到容器3000端口

访问:

image-20250225104544527

示例2:运行一个交互式 Ubuntu 容器

部署一个 Ubuntu 容器,临时用用,退出容器后自动销毁:

docker run -it --rm ubuntu bash
  • 启动一个临时的 Ubuntu 容器并进入交互式 shell。
  • 容器退出后自动删除。

Ubuntu 容器与 Ubuntu 虚拟机的区别:

原理特性容器虚拟机
操作系统层面运行在宿主机的操作系统上,共享宿主机内核运行在虚拟化层上,每个虚拟机有自己的操作系统
资源分配动态分配,按需使用宿主机资源静态分配,为每个虚拟机预分配资源
启动时间快速启动,通常在毫秒到秒之间启动较慢,通常需要数秒到数分钟
隔离机制名字空间(Namespace)和控件组(Cgroups)实现隔离硬件虚拟化技术实现完全隔离
系统开销低,因为不需要模拟硬件高,因为需要模拟完整的硬件环境
可移植性高,容器镜像可以在不同的宿主机上运行低,虚拟机镜像依赖于特定的虚拟化技术和硬件
镜像大小小,通常只有几十MB到几百MB大,通常有几个GB
管理和部署简单快捷,通过容器引擎如Docker相对复杂,需要虚拟化管理软件如VMware或OpenStack

验证:

ubuntu@HomeLab:~$ uname -a
Linux HomeLab 6.11.0-13-generic #14-Ubuntu SMP PREEMPT_DYNAMIC Sat Nov 30 23:51:51 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

ubuntu@HomeLab:~$ docker run -it --rm ubuntu bash
# 进入ubuntu容器
# 容器与宿主共用内核,所以版本号相同
root@a68481c766c3:/# uname -a
Linux a68481c766c3 6.11.0-13-generic #14-Ubuntu SMP PREEMPT_DYNAMIC Sat Nov 30 23:51:51 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
# 这个ubuntu容器仅占用84MB,非常精简
root@a68481c766c3:/# du -sh /
84M /
root@a68481c766c3:/# exit
exit
# 退出容器

# ubuntu 容器已经销毁,所以只能看到 reference 容器
ubuntu@HomeLab:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
540d3b254ed8 wcjiang/reference "/busybox httpd -f -…" 30 minutes ago Up 30 minutes 0.0.0.0:32769->3000/tcp, :::32769->3000/tcp mystifying_jang

Ubuntu 容器与 Ubuntu 虚拟机的区别:进入容器后,使用 du -sh / 查看系统大小,使用了 84M 比

示例3:运行一个Nginx容器

ubuntu@HomeLab:~$ docker run start -d -P nginx
5e1e65aa227a2f171b8d2df26d757cd4312c6ee3db6962fcaa2213906c2dedcc

ubuntu@HomeLab:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5e1e65aa227a nginx "/docker-entrypoint.…" 4 seconds ago Up 3 seconds 0.0.0.0:32770->80/tcp, :::32770->80/tcp confident_sanderson
540d3b254ed8 wcjiang/reference "/busybox httpd -f -…" About an hour ago Up About an hour 0.0.0.0:32769->3000/tcp, :::32769->3000/tcp mystifying_jang

image-20250225114327867

docker run 选项详细说明

1. 容器运行模式

  • -d--detach:后台运行容器(守护模式)。

    docker run -d nginx
  • --rm:容器退出后自动删除。

    docker run --rm alpine echo "Hello, Docker!"
  • -it:交互式运行容器(通常与 bashsh 结合使用)。

    docker run -it ubuntu bash

2. 容器命名

  • --name:为容器指定一个名称(否则 Docker 会随机生成)。
    docker run --name my-nginx nginx

3. 网络配置

  • -p--publish:映射容器端口到主机端口(格式:主机端口:容器端口)。

    docker run -p 8080:80 nginx
  • --network:指定容器使用的网络(如 bridgehost 或自定义网络)。

    docker run --network my-network nginx

4. 数据卷挂载

  • -v--volume:挂载主机目录或卷到容器(格式:主机路径:容器路径)。

    docker run -v /host/data:/container/data nginx
  • --mount:更灵活的挂载方式(支持更多选项)。

    docker run --mount type=bind,source=/host/data,target=/container/data nginx

5. 环境变量

  • -e--env:设置容器内的环境变量。

    docker run -e MY_ENV=value nginx
  • --env-file:从文件加载环境变量。

    docker run --env-file .env nginx

6. 资源限制

  • --memory:限制容器内存使用(如 512m2g)。

    docker run --memory="512m" nginx
  • --cpus:限制容器使用的 CPU 核数。

    docker run --cpus="1.5" nginx

7. 其他常用选项

  • --restart:设置容器重启策略(如 noon-failurealways)。

    docker run --restart always nginx
  • --privileged:赋予容器特权模式(访问主机设备等)。

    docker run --privileged nginx
  • --user:指定运行容器的用户(如 root1000)。

    docker run --user 1000 nginx

docker run 常用命令总结

docker run 是 Docker 的核心命令,通过组合不同的选项可以实现复杂的容器运行需求。掌握常用选项后,可以灵活应对各种场景。

# 格式
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

# 创建、启动容器
docker run hello-world

# 后台启动、分配网口、命名容器
docker run -d -p 80:80 --name my_nginx nginx

# 启动时执行命令,防止退出
docker run -it -d ubuntu /bin/bash

# 设置容器自动重启策略
docker run --restart unless-stopped 镜像名

# 数据持久化(映射本机目录到容器,删除容器后目录依然存在本机)
docker run -v /host/path:/container/path 镜像名

# 设置环境变量
docker run -e VAR_NAME=value 镜像名

# 获取帮助
docker run --help