欢迎光临
我们一直在努力

Docker容器详解

📑 目录

  • 一、容器命令清单
  • 二、核心容器命令详解
  • 三、综合实战:容器化制作
    • 实战一:MySQL 容器化安装
    • 实战二:Redis 容器化安装
    • 实战三:C++ 容器制作
    • 实战四:容器资源更新
  • 四、常见问题辨析

一、容器命令清单

完整命令参数与示例见 Docker 容器命令文档。

命令功能
docker create 创建新容器但不启动
docker run 创建并运行容器
docker ps 列出容器
docker logs 查看容器日志
docker attach 连接运行中的容器
docker exec 在容器内执行命令
docker start 启动已停止的容器
docker stop 停止容器(发送 SIGTERM)
docker restart 重启容器
docker kill 强制退出容器(发送 SIGKILL)
docker top 查看容器进程信息
docker stats 显示资源使用情况
docker container inspect 查看容器详细信息
docker port 列出端口映射
docker cp 容器与宿主机间拷贝文件
docker diff 检查容器文件结构更改
docker commit 从容器创建新镜像
docker pause 暂停容器所有进程
docker unpause 恢复容器所有进程
docker rm 删除停止的容器
docker export 导出容器为 tar 文件
docker wait 阻塞至容器停止
docker rename 重命名容器
docker container prune 删除所有停止的容器
docker update 更新容器配置(CPU/内存限制)

二、核心容器命令详解

docker run(创建并运行容器)

docker run 是使用频率最高的命令,OPTIONS 选项极多,完整参数说明见 docker run 参考。

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 别名:docker container run

关键参数:

参数说明
-d 后台运行容器,返回容器 ID
-i 以交互模式运行容器,通常与 -t 同时使用
-t 为容器分配伪输入终端,通常与 -i 同时使用
-P 随机端口映射
-p 指定端口映射,格式:主机端口:容器端口
–name 为容器指定名称
-h 指定容器的 hostname
-e 设置环境变量
–cpuset-cpus 绑定容器到指定 CPU 运行
-m 设置容器使用内存最大值
–network 指定容器的网络连接类型
–link 添加链接到另一个容器
-v / –volume 绑定一个卷
–rm shell 退出时自动删除容器
–restart 自动重启

# 后台启动 nginx 容器并命名
docker run –name mynginx -d nginx:latest

# 端口映射 + 目录挂载
docker run -p 80:80 -v /data:/data -d nginx:latest

docker ps(列出容器)

docker ps [OPTIONS]
# 别名:docker container ls / docker container list / docker container ps

关键参数:-a(显示所有容器含未运行的)、-f(过滤)、–format(指定模板)、-l(显示最新的)、-n(最近 N 个)、–no-trunc(不截断)、-q(仅显示容器编号)、-s(显示文件大小)。

docker logs(查看容器日志)

docker logs [OPTIONS] CONTAINER

关键参数:-f/–follow(跟踪输出)、–since(起始时间)、-t/–timestamps(显示时间戳)、-n/–tail(最新 N 条)。

docker exec(容器内执行命令)

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

关键参数:-d(后台运行)、-i(保持 STDIN)、-t(伪终端)、-e(环境变量)、-u(用户)、-w(工作目录)。

💡 进入容器的常用方式:docker exec -it 容器名 bash

docker stop / kill(停止容器)

命令信号说明
docker stop SIGTERM 优雅停止
docker kill SIGKILL 强制退出

docker stats(资源使用情况)

docker stats [OPTIONS] [CONTAINER...]

  返回容器的 CPU%、MEM%、MEM USAGE/LIMIT、NET I/O、BLOCK I/O、PIDs 等信息。参数:-a(全部)、–no-stream(不实时更新)、–no-trunc(不截断)。

docker commit(从容器创建新镜像)

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

关键参数:-a(作者)、-c(应用 Dockerfile 指令,可修改启动命令)、-m(提交说明)、-p(暂停容器后提交)。

docker update(更新容器配置)

完整选项见 docker update 参考。

docker update [OPTIONS] CONTAINER [CONTAINER...]

关键参数:–cpus(CPU 数量)、–cpuset-cpus(使用哪些 CPU)、–memory(内存限制)、–memory-swap(交换内存)、–cpu-period/–cpu-quota(CPU 配额控制)。

其他常用命令

# 查看容器进程
docker top CONTAINER [ps OPTIONS] # 如 docker top mynginx aux

# 查看容器详细信息(docker inspect 自动识别镜像/容器)
docker container inspect [OPTIONS] CONTAINER

# 端口映射
docker port CONTAINER

# 文件拷贝(双向)
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] DEST_PATH CONTAINER:SRC_PATH

# 检查文件结构更改
docker diff CONTAINER

# 导出容器为 tar
docker export -o 文件名 CONTAINER

# 删除容器(-f 强制删除运行中容器)
docker rm [OPTIONS] CONTAINER
docker rm $(docker ps -a -q) # 删除所有停止的容器

# 删除所有停止的容器
docker container prune -f


三、综合实战:容器化制作

实战一:MySQL 容器化安装

镜像说明与可用 Tag 见 MySQL 官方镜像。

# 1. 拉取镜像
docker pull mysql:5.7

# 2. 启动容器(指定 root 密码和端口映射)
docker run –name mysql -e MYSQL_ROOT_PASSWORD=userroot -p 8200:3306 -d mysql:5.7

# 3. 进入容器登录 MySQL
docker exec -it mysql bash
mysql -p

# 4. 通过 GUI 工具(如 MySQL Workbench)远程连接宿主机 8200 端口

# 5. 释放
docker stop mysql && docker rm mysql

实战二:Redis 容器化安装

镜像说明与可用 Tag 见 Redis 官方镜像。

# 1. 拉取镜像
docker pull redis:7.0

# 2. 启动容器
docker run –name redis -p 8300:6379 -d redis:7.0

# 3. 进入容器测试
docker exec -it redis bash
redis-cli
set mykey 1
get mykey

# 4. 可视化工具:AnotherRedisDesktopManager 连接 8300 端口

# 5. 释放
docker stop redis && docker rm redis

实战三:C++ 容器制作

# 1. 拉取 Ubuntu 镜像
docker pull ubuntu:22.04

# 2. 启动交互容器
docker run –name mygcc -it ubuntu:22.04 bash

# 3. 配置国内镜像源加速
sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list

# 4. 安装工具
apt update
apt install gcc vim -y

# 5. 编写 demo.c(#include <stdio.h> 输出 hello docker)
vim demo.c

# 6. 编译运行
gcc demo.c -o demo
./demo

# 7. 退出后再次进入:docker restart mygcc
# 8. 释放:docker stop mygcc && docker rm mygcc

实战四:容器资源更新

  通过 docker update 动态调整运行中容器的 CPU 和内存限制。

# 1. 运行 nginx 容器
docker run -d –name mynginx5 -p 80:80 nginx:1.22.1

# 2. 查看进程及资源占用
docker top mynginx5 aux
docker stats

# 3. 限制内存为 300M(swap 为 600M)
docker update -m 300m –memory-swap 600m mynginx5
# 再次 docker stats 可见 LIMIT 变为 300MiB

# 4. 限制 CPU 至 10%
# –cpu-period 为重分配周期,–cpu-quota 为周期内可用时间,quota/period = 10%
docker update –cpu-period=100000 –cpu-quota=10000 mynginx5

# 5. 释放
docker stop mynginx5 && docker rm mynginx5


四、常见问题辨析

1. docker create / start / run 的区别

命令说明
docker create 从镜像创建全新容器,但不立即运行
docker start 启动已停止的容器(create 后可用此启动)
docker run 创建+启动的组合,立即启动新容器;本地无镜像时会自动从 Docker Hub 拉取

2. docker import 和 docker load 的区别

  需结合 save/export 理解:

操作链说明
docker save → docker load 导出镜像为文件再导入,保存所有历史记录和元数据,文件较大
docker export → docker import 导出容器为文件再导入为新镜像,丢弃所有历史记录和元数据,仅保存容器当时状态(相当于虚拟机快照),文件较小

3. docker rm / rmi / prune 的差异

命令作用对象
docker rm 删除一个或多个容器
docker rmi 删除一个或多个镜像
docker prune 删除不再使用的 Docker 对象(容器、镜像、卷、网络等)

赞(0)
未经允许不得转载:171主机测评 » Docker容器详解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址