跳到主要内容
Docker 容器核心指令与数据库容器化部署 | 极客日志
Shell / Bash
Docker 容器核心指令与数据库容器化部署 Docker 容器核心指令与数据库容器化部署。内容涵盖容器概念、生命周期、常用命令详解(run、exec、logs 等)以及 MySQL 和 Redis 的容器化安装实践。重点讲解端口映射、环境变量配置及资源限制方法,帮助开发者实现环境标准化与服务隔离。
小熊软糖 发布于 2026/3/15 更新于 2026/5/29 34 浏览概念简介
什么是容器?
容器是一种标准的软件单元,它将代码及其所有依赖关系打包在一起,从而使应用能够从一个计算环境快速、可靠地运行到另一个计算环境。您可以把它想象成一个轻量化的、标准化的'软件集装箱'。镜像跑起来后就是容器,就像 C++ 中类实例化后就是对象一样。镜像本身是只读的。当从一个镜像启动一个容器时,Docker 会在镜像的所有层之上添加一个可写的容器层。
容器与容器之间,容器与外部环境是隔离的
一个容器的资源是有限制的
为什么需要容器?
提高资源利用率 :使用容器能实现在一台服务器运行各种系统。
环境标准化 :用同一个镜像实例化的容器使得开发、测试、预发布和生产环境中完全一致地运行。
资源弹性伸缩 :可以根据实际情况灵活控制资源的分配。
差异化环境 :一个复杂的应用可能包含多个服务(微服务架构),这些服务可能依赖于不同的、甚至冲突的语言运行时和库版本,把这些服务部署到不同容器,每个容器都拥有独立的用户空间和依赖项,能实现彼此完全隔离,互不干扰。
沙箱安全 :当一个容器崩了,宿主机和其他容器依旧正常。
启动速度快 :容器本质是主机操作系统上的一个隔离进程,无需启动整个操作系统内核。因此其启动速度极快,可以达到毫秒到秒级。
容器生命周期
创建状态:docker create
运行状态:docker start
暂停状态:docker pause
停止状态:docker stop
删除状态:docker rm
容器指令
1. 指令清单
docker create :创建容器,但不运行
docker run :创建并运行容器
docker attach :与运行的容器进行交互
docker commit :将容器运行状态导出成镜像(类似快照)
docker cp :容器和宿主机之间的资源拷贝
docker diff :容器中文件的增删改
docker exec :运行的容器中执行指令
docker export :保存容器导出镜像 tar(不保留元数据)
docker import :从 tar 文件中导出镜像
docker container inspect :查看容器详细信息(不带 container 参数时自动识别镜像,容器)
docker kill :杀死容器
docker logs :查看容器日志
docker ps :查看那些容器在运行
docker pause :暂停容器,剥夺 cpu 时间片
docker port :查看端口映射
docker container prune :删除已停止的容器
:修改容器名字
docker rename
docker restart :重启容器
docker rm :删除容器
docker start :启动容器
docker stats :显示容器资源配置情况
docker stop :停止运行的容器
docker top :查看容器中运行的进程信息,支持 ps 指令参数
docker unpause :启动容器中所有被暂停的进程
docker update :更新容器配置
docker wait :阻塞运行直到容器停止,然后打印出它的退出码
2. 命令详解
docker run docker run [OPTIONS] IMAGE [COMMAND][ARG...]
-d:后台运行容器,并返回容器 ID
-i:以交互模式运行容器,通常与 -t 同时使用
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用
-P:随机端口映射,容器内部端口随机映射到主机的端口
-p:指定端口映射,格式为:主机 (宿主) 端口:容器端口
--name="nginx-lb":为容器指定一个名称
-h "mars":指定容器的 hostname
-e username="ritchie":设置环境变量
--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2":绑定容器到指定 CPU 运行
-m:设置容器使用内存最大值
--network="bridge":指定容器的网络连接类型
--link=[]:添加链接到另一个容器
--volume, -v:绑定一个卷
--rm:shell 退出的时候自动删除容器
示例:
到官网找到 centos7
查看宿主机版本:cat /etc/*release*
将 centos:7 拉取到本地:docker pull centos:7
运行 centos:7:docker run centos:7
这里执行 docker run 不带任何选项看上去没有任何效果,其实这个容器已经被打开了但因为没交互所以退出了。
使用 docker ps -a 可以看到历史执行过的容器
注意:通常不会单独使用-i 或-t 选项,需要两个一起使用,即-it(常用于交互式容器)
接下来我们运行一个 nginx:1.24.0 容器,如果本地没有会自动从服务器拉取。
当我们在浏览器中直接访问服务器(宿主机)时,访问的是宿主机本身的服务(如果有的话)。Docker 容器拥有独立的网络命名空间,外网无法直接访问容器内的 Nginx 服务。需要通过端口映射将宿主机的端口与容器的端口进行绑定。例如,将宿主机的 7070 端口映射到容器 Nginx 的 80 端口后,当访问宿主机 IP 的 7070 端口时,流量会被自动转发到容器内部的 80 端口,从而访问到容器中的 Nginx 服务。
如下 -p 选项的使用:
-P 是绑定随机端口,后面不用带任何信息,该选项很少使用,如:docker run -P -d nginx:1.24.0
--name 选项改变容器名字,使用新起的容器名与其交互会变得很方便。
-m:设置容器使用内存最大值,如下给限定容器内存使用 500MB
docker run -d -m 500m --name mynginx3 nginx:1.24.0 docker stats mynginx3
-rm 选项:shell 退出的时候自动删除容器,使用 docker ps -a 是查不到的。
如:docker run -it --name=mycentos4 -rm centos:7
docker create docker create [OPTIONS] IMAGE [COMMAND][ARG...]
别名:docker container create
关键参数:和 run 的关键参数相同
docker ps 别名:docker container ls, docker container list, docker container ps
-a:显示所有的容器,包括未运行的。
-f:根据条件过滤显示的内容。
--format:指定返回值的模板文件。如 json 或者 table
-l:显示 latest 的容器。
-n:列出最近创建的 n 个容器。
--no-trunc:不截断输出。
-q:静默模式,只显示容器编号。
-s:显示总的文件大小。
docker logs docker logs [OPTIONS] CONTAINER
别名:docker container logs
关键参数:
-f, --follow: 跟踪日志输出
--since: 显示某个开始时间的所有日志
-t, --timestamps: 显示时间戳
-n, --tail: 仅列出最新 N 条容器日志
docker attach docker attach [OPTIONS] CONTAINER
别名:docker container attach
关键参数:
--sig-proxy:是否将所有信号代理,默认是 true,如果设置为 false,退出的话不会影响容器,否则退出会导致容器退出。
示例:docker attach --sig-proxy myweb1
如上不加 --sig-proxy 参数的话 Ctrl+C 会直接停止容器
docker exec docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
-d: 分离模式:在后台运行
-i: 即使没有附加也保持 STDIN 打开
-t: 分配一个伪终端
-e: 设置环境变量
-u, --user: 指定用户 '<name|uid>[:<group|gid>]'
-w, --workdir: 指定工作目录
docker stop docker start [OPTIONS] CONTAINER [CONTAINER...]
别名:docker container start
docker start docker start [OPTIONS] CONTAINER [CONTAINER...]
别名:docker container start
docker restart docker restart [OPTIONS] CONTAINER [CONTAINER...]
别名:docker container restart
关键参数:
docker kill docker kill [OPTIONS] CONTAINER [CONTAINER...]
别名:docker container kill
关键参数:
-s: 发送的信号
注意:docker stop 发送的是 SIGTERM 信号,docker kill 发送的是 SIGKILL 信号
docker top 功能:查看容器中运行的进程信息,支持 ps 命令参数。
语法:
docker top CONTAINER [ps OPTIONS]
别名:docker container top
示例:
docker stats 功能:显示容器资源的使用情况,包括:CPU、内存、网络 I/O 等。
语法:
docker stats [OPTIONS][CONTAINER...]
别名:docker container stats
关键参数:
-a, --all: 显示所有的容器,包括未运行的。
--format: 指定返回值的模板文件。如 table.json
--no-stream: 展示当前状态就直接退出了,不再实时更新。
--no-trunc: 不截断输出。
CONTAINER ID与 NAME: 容器 ID 与名称。
CPU %与 MEM %: 容器使用的 CPU 和内存的百分比。
MEM USAGE / LIMIT: 容器正在使用的总内存,以及允许使用的内存总量。
NET I/O: 容器通过其网络接口发送和接收的数据量。
BLOCK I/O: 容器从主机上的块设备读取和写入的数据量。
PIDs: 容器创建的进程或线程数。
docker container inspect docker container inspect [OPTIONS] CONTAINER [CONTAINER...]
-f: 指定返回值的模板文件。如 table、json
-s: 显示总的文件大小。
注:docker inspect会自动检查是镜像还是容器然后显示相应信息
docker port 功能:用于列出指定的容器的端口映射,或者查找将 PRIVATE_PORT NAT 到面向公众的端口。
语法:
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
别名:docker container port
示例:
docker cp docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] SRC_PATH - CONTAINER:DEST_PATH
别名:docker container cp
示例:
注意:容器之间不能互相拷贝,只能先拷贝到宿主机,再由宿主机拷贝到另一个容器。
docker diff 别名:docker container diff
示例:
docker commit docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a: 提交的镜像作者;
-c: 使用 Dockerfile 指令来创建镜像;可以修改启动指令;
-m: 提交时的说明文字;
-p: 在 commit 时,将容器暂停。
注意:在容器里添加或修改的文件也会被提交到镜像
示例:自定义镜像制作
docker pause docker pause CONTAINER [CONTAINER...]
别名:docker container pause
docker unpause docker unpause CONTAINER [CONTAINER...]
别名:docker container unpause
docker rm docker rm [OPTIONS] CONTAINER [CONTAINER...]
别名:docker container rm
关键参数:
-f: 通过 SIGKILL 信号强制删除一个运行中的容器。
docker export docker export [OPTIONS] CONTAINER
别名:docker container export
docker import docker import[OPTIONS] file[URL] - [REPOSITORY[:TAG]]
别名:docker image import
关键参数:
-c: 应用 docker 指令创建镜像;
-m: 提交时的说明文字;
注意:export,import 会丢失元数据,save 和 load 更为常用。
docker wait 功能:阻塞运行直到容器停止,然后打印出它的退出代码。
语法:
docker wait CONTAINER [CONTAINER...]
docker rename docker rename CONTAINER NEW_NAME
别名:docker container rename
示例:
docker container prune docker container prune [OPTIONS]
docker update docker update [OPTIONS] CONTAINER [CONTAINER...]
别名:docker container update
--cpus: cpu 数量
--cpuset-cpus: 使用哪些 cpu
--memory: 内存限制
--memory-swap: 交换内存
--cpu-period: 是用来指定容器对 CPU 的使用要在多长时间内做一次重新分配
--cpu-quota: 是用来指定在这个周期内,最多可以有多少时间用来跑这个容器
容器的模式
交互模式
attached :前台模式,将容器附加到主线程,例如执行一个 nginx 容器:docker attach 容器名,每次刷新网页都会在前台打印日志。所以 Ctrl+C 等发送信号会使容器直接退出,除非添加 --sig-proxy=false 字段
detached 模式:后台运行,即 -d 选项,即使退出 ssh 容器也不会断开
注:attached 附加到 detached 模式的容器下 Ctrl+C 也会使程序退出
interactive 模式:交互模式,与容器进行 bash 命令行交互,可以在 run 启动容器时添加-it 选项,或在容器运行后 exec 时添加-it 选项进行交互。
run 启动的交互模式执行 exit 退出容器后容器停止,因此这种交互模式很少使用。
容器运行后使用 exec 交互时 exit 退出容器不会是容器停止。
MySQL 与 Redis 容器化部署
1. MYSQL 容器安装 在官网 docker hub 找到 mysql 版本,比如我们使用 mysql:5.7 版本
直接 run 创建并运行容器(如果没有镜像会自动拉取)
docker run --name=qsy_mysql -e MYSQL_ROOT_PASSWORD=a@123456 -p 7306:3306 -d mysql:5.7
docker exec -it qsy_mysql bash
2. Redis 容器安装 同样到 docker hub 搜索 redis 版本,例如使用 redis:7
docker run --name myredis -d -p 45446:6379 redis:7
docker exec -it myredis bash
相关免费在线工具 Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown转HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
HTML转Markdown 将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
JSON 压缩 通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
JSON美化和格式化 将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online