当前位置: 首页 > news >正文

【Docker基础】Docker容器管理:docker run及其参数详解

目录

1 Docker容器基础概念

1.1 容器与镜像的关系

1.2 容器的生命周期

2 docker run命令概述

2.1 基本语法

2.2 命令执行流程

3 核心参数详解

3.1 容器标识与名称

3.1.1 --name

3.1.2 --rm

3.2 运行模式控制

3.2.1 -d, --detach

3.2.2 -it

3.3 网络配置

3.3.1 --network

3.3.2 -p, --publish

3.4 存储卷挂载

3.4.1 -v, --volume

3.4.2 --mount

3.5 资源限制

3.5.1 -m, --memory

3.5.2 --cpus

3.6 环境变量

3.6.1 -e, --env

3.6.2 --env-file

4 高级参数解析

4.1 安全相关参数

4.1.1 --user

4.1.2 --read-only

4.2 健康检查

4.2.1 --health-cmd

4.2.2 --health-interval

4.3 容器重启策略

4.3.1 --restart

5 实践示例

5.1 基础示例

5.2 生产环境示例

6 参数组合解析

6.1 开发环境典型组合

6.2 生产环境典型组合

7 常见问题与解决方案

7.1 容器立即退出

7.2 端口冲突

7.3 权限问题

7.4 存储空间不足

8 总结


1 Docker容器基础概念

1.1 容器与镜像的关系

容器是镜像的运行实例,它们之间的关系可以类比为:
  • 镜像:相当于面向对象编程中的"类"(Class),是一个静态的、不可变的文件包
  • 容器:相当于"对象"(Object),是镜像运行时的动态实例

1.2 容器的生命周期

2 docker run命令概述

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

2.1 基本语法

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

2.2 命令执行流程

  • 用户通过Docker客户端发出docker run命令
  • Docker守护进程检查本地是否存在指定镜像
  • 如果镜像不存在,则从配置的Registry拉取镜像
  • 创建容器的可写层文件系统
  • 初始化网络和存储配置
  • 执行容器启动命令
  • 将容器运行状态返回给用户

3 核心参数详解

3.1 容器标识与名称

3.1.1 --name

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

3.1.2 --rm

  • 容器退出时自动删除容器
docker run --rm alpine echo "hello"

3.2 运行模式控制

3.2.1 -d, --detach

  • 后台运行容器
docker run -d nginx

3.2.2 -it

  • 交互式运行容器(通常一起使用)
docker run -it ubuntu bash

3.3 网络配置

3.3.1 --network

  • 设置容器的网络模式
docker run --network host nginx
常见网络模式:
  • bridge:默认的桥接网络
  • host:使用主机网络
  • none:无网络
  • container:NAME:共享其他容器的网络栈

3.3.2 -p, --publish

  • 端口映射(主机端口:容器端口)
docker run -p 8080:80 nginx

3.4 存储卷挂载

3.4.1 -v, --volume

  • 挂载主机目录或卷到容器
docker run -v /host/path:/container/path nginx

3.4.2 --mount

  • 更详细的挂载方式(推荐新项目使用)
docker run --mount type=bind,source=/host/path,target=/container/path nginx

3.5 资源限制

3.5.1 -m, --memory

  • 内存限制
docker run -m 512m nginx

3.5.2 --cpus

  • CPU限制
docker run --cpus=1.5 nginx

3.6 环境变量

3.6.1 -e, --env

  • 设置环境变量
docker run -e MY_VAR=value nginx

3.6.2 --env-file

  • 从文件读取环境变量
docker run --env-file .env nginx

4 高级参数解析

4.1 安全相关参数

4.1.1 --user

  • 指定运行用户
docker run --user 1000:1000 nginx

4.1.2 --read-only

  • 以只读模式运行容器
docker run --read-only alpine touch /test

4.2 健康检查

4.2.1 --health-cmd

  • 设置健康检查命令
docker run --health-cmd="curl -f http://localhost || exit 1" nginx

4.2.2 --health-interval

  • 设置健康检查间隔
docker run --health-interval=30s nginx

4.3 容器重启策略

4.3.1 --restart

  • 设置容器退出时的重启策略
docker run --restart unless-stopped nginx
可选值:
  • no:不自动重启(默认)
  • on-failure[:max-retries]:失败时重启
  • always:总是重启
  • unless-stopped:除非明确停止,否则总是重启

5 实践示例

5.1 基础示例

  • 运行Nginx Web服务器
docker run -d --name my_web -p 8080:80 nginx
  • 运行交互式Python环境
docker run -it --rm python:3.9 bash

5.2 生产环境示例

  • 运行MySQL数据库
docker run -d \--name mysql_db \-e MYSQL_ROOT_PASSWORD=my-secret-pw \-v mysql_data:/var/lib/mysql \-p 3306:3306 \--restart unless-stopped \mysql:8.0
  • 运行带资源限制的Node.js应用
docker run -d \--name node_app \-m 1g \--cpus=2 \--env-file .env \-p 3000:3000 \--health-cmd="curl -f http://localhost:3000/health || exit 1" \my-node-app:latest

6 参数组合解析

6.1 开发环境典型组合

docker run -it --rm \-v $(pwd):/app \-w /app \-p 3000:3000 \-e DEBUG=true \node:14 bash
参数解析:
  • -it:交互式终端
  • --rm:退出时自动删除
  • -v:挂载当前目录到容器内/app
  • -w:设置工作目录
  • -p:端口映射
  • -e:设置环境变量

6.2 生产环境典型组合

docker run -d \--name my_app \--restart unless-stopped \--network my_network \-m 2g \--cpus=2 \--read-only \-v app_data:/data \-p 80:8080 \my-app:prod

7 常见问题与解决方案

7.1 容器立即退出

  • 问题现象
docker run ubuntu 
# 容器立即退出
解决方案
  • 使用交互式模式:docker run -it ubuntu bash
  • 让容器运行持久化进程:docker run -d ubuntu tail -f /dev/null

7.2 端口冲突

  • 错误信息
Bind for 0.0.0.0:80 failed: port is already allocated
解决方案
  • 查找占用端口的容器:docker ps
  • 停止冲突容器或改用其他端口:-p 8080:80

7.3 权限问题

  • 错误信息
Permission denied inside container
解决方案
  • 使用--user指定用户
  • 调整挂载目录权限
  • 使用--privileged(不推荐生产环境使用)

7.4 存储空间不足

  • 错误信息
No space left on device
解决方案
  • 清理未使用的容器和镜像:docker system prune
  • 调整Docker存储驱动配置
  • 增加系统磁盘空间

8 总结

docker run是Docker容器管理的核心命令,通过掌握其知识,能够高效地使用Docker运行和管理容器,为应用部署和开发环境搭建打下坚实基础。

相关文章:

  • Python 使用 Requests 模块进行爬虫
  • 学习设计模式《十四》——组合模式
  • dijkstra(迪杰斯特拉)算法详解
  • 阿里云CentOS系统搭建全攻略:开启云端技术之旅
  • bash的配置文件,source
  • 云函数调测、部署及日志查看
  • VSCode性能调优:从卡顿到丝滑的终极方案
  • 颠覆传统接口测试!用 Streamlit + SQLite + GPT 打造可视化自动化平台
  • 计算鱼眼相机的内参矩阵和畸变系数方法
  • SSL过期自动续签脚本-腾讯云
  • 【后端】负载均衡
  • YSYX学习记录(十一)
  • Node.js爬虫 CheerioJS ‌轻量级解析、操作和渲染HTML及XML文档
  • 深度解析云计算网络架构:VLAN+OVS+Bonding构建高可靠虚拟化平台
  • 将Linux装进口袋: Ubuntu to Go 制作
  • 【编程语言】javascript、java、go对比应用场景
  • ✨【超详细】基于 CUDA 12.4 + Python 3.11 构建 Wan2.1 项目的集成推理环境(含 PyTorch 2.5.1 GPU 安装教程)
  • 如何仅用AI开发完整的小程序<5>—让AI制作开始页面
  • 第八章 网络安全
  • uni-app项目实战笔记21--uniapp缓存的写入和读取
  • web网站漏洞扫描/关键词排名优化网站
  • 网站建设报价图片欣赏/引流软件有哪些
  • 知识付费网站搭建教程/宁德市安全教育平台
  • 做哪一类网站容易有排名/seo 首页
  • 企业网站建设北京公司排名/河源seo
  • 手机下载app并安装/杭州网站建设方案优化