在运维工作中,使用 Docker 镜像启动容器的核心命令是 docker run
。下面详细介绍用法、参数和常见场景:
一、基本命令格式
docker run [选项] 镜像名称[:标签] [命令] [参数...]
关键参数解释:
-d
:后台运行容器(detach 模式)-p
:端口映射(宿主机端口:容器端口)--name
:指定容器名称(自定义,便于管理)-v
:挂载卷(宿主机路径:容器路径)-e
:设置环境变量--rm
:容器退出时自动删除(临时测试用)--restart=always
:容器自动重启(生产环境常用)
二、常用场景示例
1. 最简单的前台运行(测试用)
docker run alpine echo "Hello Docker"
- 启动
alpine
镜像 - 执行
echo "Hello Docker"
命令 - 命令执行完后容器自动退出
2. 后台运行并映射端口(最常用)
docker run -d --name my-nginx -p 80:80 nginx:1.23
-d
:后台运行--name my-nginx
:容器命名为my-nginx
-p 80:80
:将宿主机的 80 端口映射到容器的 80 端口nginx:1.23
:使用nginx
镜像的1.23
版本
3. 挂载数据卷(持久化存储)
docker run -d -v /data/nginx/html:/usr/share/nginx/html nginx
-v /data/nginx/html:/usr/share/nginx/html
:将宿主机的/data/nginx/html
目录挂载到容器的/usr/share/nginx/html
目录- 容器内的文件修改会同步到宿主机,实现数据持久化
4. 设置环境变量
docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
-e MYSQL_ROOT_PASSWORD=123456
:设置 MySQL 的 root 密码为123456
- 很多镜像通过环境变量配置参数(如数据库连接信息、服务端口等)
5. 交互式终端(进入容器内部)
docker run -it --name my-bash alpine /bin/sh
-i
:保持标准输入打开-t
:分配一个伪终端(Terminal)- 进入容器后,可以执行
ls
、cd
等命令
6. 容器退出时自动删除(临时测试)
docker run --rm alpine uname -a
--rm
:容器退出后自动删除,不保留容器实例- 适合临时执行命令,避免残留无用容器
7. 生产环境常用配置(自动重启 + 资源限制)
docker run -d \--name my-app \--restart=always \-m 512m \--cpus=0.5 \-p 8080:8080 \my-image:v1
--restart=always
:容器崩溃或宿主机重启时,自动重启容器-m 512m
:限制容器最多使用 512MB 内存--cpus=0.5
:限制容器最多使用 0.5 个 CPU 核心
三、验证容器是否启动成功
# 查看运行中的容器
docker ps# 查看所有容器(包括已停止的)
docker ps -a# 查看容器日志
docker logs my-nginx# 进入运行中的容器
docker exec -it my-nginx bash
四、完整参数参考(选读)
docker run
的参数非常多,常用参数汇总:
参数 | 作用 |
---|---|
-d |
后台运行容器 |
-p 宿主机端口:容器端口 |
端口映射(如 -p 80:80 、-p 8080:80 ) |
--name 容器名 |
自定义容器名称(便于管理) |
-v 宿主机路径:容器路径 |
挂载卷(如 -v /data:/app/data ) |
-e 变量名=值 |
设置环境变量(如 -e DB_HOST=localhost ) |
--rm |
容器退出时自动删除 |
--restart=策略 |
重启策略(always 、on-failure 、unless-stopped ) |
-m 内存大小 |
限制内存(如 -m 512m 、-m 1g ) |
--cpus=CPU数 |
限制 CPU(如 --cpus=0.5 、--cpus=2 ) |
-it |
交互式终端(用于进入容器) |
--network=网络名 |
指定容器所属的网络 |
五、总结
启动容器的核心是理解 docker run
的参数组合,根据实际需求选择:
- 测试:用
--rm
和-it
快速验证 - 服务:用
-d
、-p
、--restart=always
长期运行 - 数据持久化:用
-v
挂载卷 - 资源隔离:用
-m
和--cpus
限制资源
掌握这些,你就能灵活管理 Docker 容器,满足各种运维场景需求。