Docker 部署与管理
·
Docker 全阶段学习指南
1. Docker 基础概念
1.1 云服务与虚拟化基础
1.1.1 云服务模型对比
| 服务模型 | 核心提供 | 用户责任 | 优点 | 缺点 |
|---|---|---|---|---|
| IaaS | 虚拟化资源(虚拟机、存储、网络) | 管 OS、应用部署与资源 | 灵活、可扩展 | 管理复杂,需技术支持 |
| PaaS | 开发平台(运行环境、工具) | 仅专注应用开发 | 简化开发流程 | 灵活度低,受平台限制 |
| SaaS | 现成应用(直接使用) | 仅使用应用 | 快速部署,省成本 | 定制化差,依赖服务商 |
| DaaS | 数据处理、分析与访问服务 | 仅用数据与分析 | 降低数据管理难度 | 存在数据隐私风险 |
1.1.2 常见云服务提供商
- 阿里云、腾讯云、AWS、Google Cloud、华为云等
- 提供存储、计算、网络、CDN 等服务
1.1.3 虚拟化技术
- 全虚拟化:完全模拟硬件环境,兼容多操作系统
- 半虚拟化:与宿主机协作,性能更优
- 主流产品:VMware、KVM、Hyper-V、VirtualBox
1.2 Docker 核心价值
1.2.1 为什么需要 Docker
- 一致性环境:实现跨平台部署,确保应用运行一致性
- 资源高效:相比传统虚拟机,资源消耗减少50%以上
- 快速部署:秒级启动,简化应用部署流程
1.2.2 Docker 与传统虚拟机对比
| 特性 | Docker 容器 | 虚拟机 |
|---|---|---|
| 启动速度 | 秒级 | 分钟级 |
| 资源消耗 | 几乎无 | 损耗50%左右 |
| 性能 | 接近原生 | 较弱 |
| 单机支持量 | 上千个 | 几十个 |
| 隔离性 | 资源隔离/限制 | 完全隔离 |
1.3 Docker 架构组成
核心组件:
- Docker Daemon:后台守护进程
- Docker Client:用户交互界面
- Images:只读模板,包含应用及其依赖
- Containers:镜像的运行实例
- Registry:镜像存储和分发服务(如 Docker Hub)
核心技术:
- Namespace:实现资源隔离(6大命名空间)
- Cgroup:实现资源限制
- Copy-on-Write:高效文件操作
核心概念
- 镜像(Image):包含应用及依赖的只读模板
- 容器(Container):镜像的运行实例,具有独立文件系统、网络、进程空间
- 仓库(Repository):存放 Docker 镜像的地方(如 Docker Hub)
2. Docker 镜像与容器
2.1 安装配置
2.1.1 基本安装步骤
# 关闭防火墙和增强功能
systemctl stop firewalld.service && setenforce 0
# 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置镜像加速——华为云加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [ "https://0a40cefd360026b40f39c00627fa6f20.mirror.swr.myhuaweicloud.com" ]
}
EOF
# 设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 Docker-CE
yum install -y docker-ce docker-ce-cli containerd.io
# 启动服务
systemctl start docker && systemctl enable docker
2.2 镜像管理
2.2.1 基本命令
#查看 Docker 版本
docker --version
#查看 Docker 系统信息
docker info
2.2.2 核心命令
# 拉取镜像
docker pull nginx
# 查看镜像版本
docker inspect <ID>|grep -i version
# 查看镜像
docker images
# 镜像标签
docker tag nginx:latest nginx:web
# 删除镜像
docker rmi nginx:web #通过 仓库:标签
docker rmi ID #通过 ID
# 导出
docker save nginx:latest > nginx.tar
# 导入
docker load < nginx.tar
2.3 容器管理
2.3.1 生命周期管理
# 创建容器
docker create -it nginx:latest /bin/bash
# 启动/停止
docker start <container_id>
docker stop <container_id>
# 创建一个自定义名称的容器
docker run -itd --name 自定义名称 镜像名 [命令]
# 修改容器名称
docker rename 原容器名/原容器ID 新名称
# 运行容器
docker run -itd <镜像名> /bin/bash
# 进入容器
docker exec -it <container_id> /bin/bash
# 文件复制
docker cp ~/test.txt <container_id>:/opt/ # 主机复制到容器
docker cp <container_id>:/opt/test.txt /opt # 容器复制到主机
2.3.2 查看容器
# 查看正在运行的容器
docker ps
# 查看所有容器
docker ps -a
# 查看容器版本号
docker inspect <容器名> |grep -i version
# 查看容器 IP
docker inspect <容器名> |grep -i ipaddress
2.3.2 批量操作
# 批量停止容器
docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash
# 批量清理后台停止的容器
docker rm $(docker ps -a -q)
# 批量删除所有容器
docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash
# 批量删除镜像
docker images | awk 'NR>=2{print "docker rmi "$3}'| bash # 批量删除镜像
docker images |awk 'NR>=2{print "docker rmi "$1 ":" $2}'|bash # 批量删除同id的镜像
3. Docker 网络管理
3.1 网络模式
- bridge:默认桥接模式
- host:共享宿主机network
- container:共享指定容器network
- none:无网络配置,只有IO接口
- 自定义网络
3.2 端口映射
# 随机端口映射
docker run -d --name test1 -P nginx
# 指定端口映射
docker run -d --name test2 -p 43000:80 nginx
(映射端口:容器端口)
3.3 模式命令
# host 主机模式
docker run -itd --name nginx-host --network host nginx
# container 容器模式
docker run -itd --name test1 centos:7 /bin/bash
# none 无网络模式
# bridge 桥接模式(默认)
docker run -itd --name test3 --network bridge centos:7 /bin/bash
(默认 可省略)
# 创建自定义网段
docker network create --subnet 172.18.0.0/16 mynetwork
# 使用指定 IP 运行容器
docker run -itd --name nginx_ceshi01 --net mynetwork --ip 172.18.0.10 nginx
4 资源限制
4.1 CPU 控制
# CPU使用上限限制
docker run -itd --name ceshi01 --cpu-quota 50000 centos:7 # 50% CPUd
# CPU 权重
docker run -itd --name ceshi01 --cpu-shares 512 centos:7 # 使用1024的倍数方便计算
# CPU 绑定
docker run -itd --name ceshi01 --cpuset-cpus "0,2" centos:7 # 绑定指定CPU
4.2 内存限制
# 内存限制
docker run -itd --name ceshi01 -m 512m centos:7 # 物理内存限制
docker run -itd --name ceshi01 -m 300m --memory-swap=1g centos:7 # 内存+swap限制
4.3 磁盘 IO 控制
# IO速率限制
docker run -itd --name ceshi01 --device-write-bps /dev/sda:1MB centos:7
4.4 压力测试与验证
分别进入容器,进行压力测试
yum install -y epel-release
yum install -y stress
stress -c 4 #产生四个进程,每个进程都反复不停的计算随机数的平方根
# 观察资源分配情况
docker stats
5 数据管理
5.1 数据卷
# 挂载数据卷
docker run -itd -v /var/mount:/var/mount --name centos_ceshi01 centos:7 /bin/bash
5.2 数据卷容器
# 创建数据卷容器
docker run -itd --name centos_ceshi01 -v /var/mount centos:7 /bin/bash
# 共享数据卷
docker run -itd --name centos_ceshi02 --volumes-from centos_ceshi02 centos:7 /bin/bash
6 容器互联
6.1 链接容器
# 创建互联容器
docker run -itd --name web1 centos:7
docker run -itd --name web2 --link web1:web1 centos:7 # 不好用,只能单向连
# 测试连接
docker exec -it web2 ping web1
7 Dockerfile——镜像创建
7.1 创建方式对比
| 方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 基于现有镜像 | 简单快速 | 镜像体积大 | 快速测试 |
| 基于本地模板 | 灵活定制 | 需要模板文件 | 特殊系统需求 |
| 基于Dockerfile | 自动化、可版本控制 | 学习成本 | 生产环境 |
7.2 Dockerfile 核心指令
# 1、FROM——指定基础镜像
FROM centos:7
# 2、MAINTAINER——维护者信息(可选)
MAINTAINER "John Doe <johndoe@example.com>"
# 3、RUN——执行命令(常用于安装软件包、修改配置等)
RUN yum install -y httpd
RUN rm -rf /tmp/*
RUN cd /app && ls -la
# 4、ENTRYPOINT——设置容器启动时默认执行的命令
ENTRYPOINT ["httpd"]
# 5、CMD——启动命令
CMD ["httpd", "-D", "FOREGROUND"]
# 6、EXPOSE——容器内的端口
EXPOSE 80
# 7、ENV——设置环境变量
ENV MY_VAR=my_value
# 8、ADD——将文件或目录从宿主机复制到镜像中,支持从 URL 下载文件,并能自动解压归档文件
ADD myfile.tar.gz /app
# 9、COPY——将本地文件或目录复制到镜像中
COPY . /app
# 10、VOLUME——创建容器中的挂载点
VOLUME ["/data"]
# 11、USER—— 设置容器内运行命令时的用户
USER root
# 12、WORKDIR——设置后续指令的工作目录
WORKDIR /app
# 13、ONBUILD——设置当该镜像作为基础镜像时,后续 Dockerfile 执行的命令
ONBUILD RUN echo "Building from base image"
# 14、HEALTHCHECK——设置容器的健康检查
HEALTHCHECK CMD curl --fail http://localhost:8080 || exit 1
7.3 Dockerfile 示例
# 使用 CentOS 7 作为基础镜像
# 建立工作目录
mkdir /opt/apache
cd /opt/apache
vim Dockerfile
------------------------------------------------------------------------------------------------------------
FROM centos:7
MAINTAINER this is apache image <htj>
ADD CentOS-Base.repo /etc/yum.repos.d/
RUN yum clean all
RUN yum -y install httpd
EXPOSE 80
ADD index.html /var/www/html/index.html
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
------------------------------------------------------------------------------------------------------------
vim run.sh
#!/bin/bash
rm -rf /run/httpd/* #清理httpd的缓存
/usr/sbin/apachectl -D FOREGROUND #指定为前台运行
------------------------------------------------------------------------------------------------------------
# 配置注释
# 基于cenyos:7创建
FROM centos:7
# 维护镜像的用户信息
MAINTAINER this is apache image <htj>
# 复制源镜像至指定目录
ADD CentOS-Base.repo /etc/yum.repos.d/
# 镜像操作指令安装apache软件
RUN yum clean all
RUN yum -y update
RUN yum -y install httpd
# 开启 80 端口
EXPOSE 80
# 复制网站首页文件
ADD index.html /var/www/html/index.html
# 将执行脚本复制到镜像中
ADD run.sh /run.sh
# 给脚本赋权
RUN chmod 755 /run.sh
# 启动容器时执行脚本
CMD ["/run.sh"]
============================================================================================================
//配置容器启动的三种方式
#方法一
ADD run.sh /run.sh # 将执行脚本复制到镜像中
RUN chmod 755 /run.sh
# 启动容器时执行脚本
CMD ["/run.sh"]
//方法二:
ENTRYPOINT [ "/usr/sbin/apachectl" ]
CMD ["-D", "FOREGROUND"]
//方法三
# 启动 httpd 服务
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
准备执行脚本(方式一)
vim run.sh
#!/bin/bash
rm -rf /run/httpd/* #清理httpd的缓存
/usr/sbin/apachectl -D FOREGROUND #指定为前台运行
# 因为Docker容器仅在它的1号进程(PID为1)运行时,会保持运行。如果1号进程退出了,Docker容器也就退出了。
//准备网站页面
//
echo "this is test web" > index.html
//生成镜像
docker build -t httpd:centos . #注意别忘了末尾有"."
//新镜像运行容器
docker run -d -p 1216:80 httpd:centos
//测试
http://192.168.10.23:1216/
7.3 镜像构建
# 构建镜像
docker build -t myapp:latest .
# 查看构建历史
docker history myapp:latest
8 Docker Compose编排
8.1 简介
Docker Compose用于定义和运行多容器Docker应用程序。
8.2 YAML文件格式
8.2.1 基本语法
- 大小写敏感:YAML 是大小写敏感的,所以一定要注意区分大小写。
- 缩进:YAML 使用空格进行缩进,不支持 TAB 缩进。通常推荐使用两个空格作为一个层级的缩进。
- 列表:列表项使用
-(短横线)表示。 - 字典:字典使用
:(冒号)连接键值对,冒号后面需要加一个空格。 - 注释:使用
#来添加注释。 - 字符串:如果字符串包含特殊字符,可以使用单引号
'或双引号"来包裹。
8.2.2 常用字段
- build:指定Dockerfile路径
- image:指定镜像
- ports:端口映射
- volumes:数据卷挂载
- networks:网络配置
- depends_on:依赖关系
8.3 Docker Compose 常用字段
build # 指定构建配置,子级 dockerfile 标签可指定 Dockerfile 文件名
dockerfile # 构建镜像的上下文路径
context # 可为 dockerfile 路径或 git 仓库 url
image # 指定镜像
command # 执行命令,覆盖容器默认启动命令
container_name # 指定容器名称(唯一,指定后无法 scale)
deploy # 部署和运行服务配置(仅 Swarm 模式可用)
environment # 添加环境变量
networks # 加入网络,引用顶级 networks 条目
network_mode # 设置容器网络模式(如 host、bridge 等)
ports # 暴露容器端口(同 - p,端口≥60)
volumes # 挂载宿主机目录或命名卷(命名卷需在顶级 volumes 定义)
volumes_from # 从其他服务 / 容器挂载卷(支持:ro/:rw,仅版本 '2' 支持)
hostname # 容器主机名
sysctls # 在容器内设置内核参数
links # 连接其他容器(格式:服务名称 [: 服务别名])
privileged # 给容器 root 权限(true/false,不安全)
restart # 重启策略:no(默认)、on-failure [: 次数]、always、unless-stopped
depends_on # 定义容器依赖关系,控制启动顺序(如 php 依赖 apache、mysql)
8.4 Docker Compose 常用命令
docker-compose build # 重新构建服务
docker-compose ps # 列出容器
docker-compose up # 创建和启动容器
docker-compose exec <服务名> < 命令 > # 在指定服务的容器内执行命令
docker-compose scale <服务名>=< 数量 > # 指定一个服务的容器启动数量
docker-compose top # 显示容器内的进程
docker-compose logs [服务名] # 查看容器的输出(可指定服务名,不指定则查看所有服务)
docker-compose down # 删除容器、网络、数据卷和镜像
docker-compose stop/start/restart [服务名] # 停止/启动/重启服务
8.5 Docker Compose 部署实例
8.5.1 安装 docker
# 关闭防火墙和增强功能
systemctl stop firewalld.service && systemctl disable firewalld.service && setenforce 0
# 安装 Docker
yum install -y yum-utils device-mapper-persistent-data lvm2 && yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo && yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18 containerd.io && systemctl start docker.service && systemctl enable docker.service
# 验证Docker是否安装成功(出现版本号即为成功)
docker --version
# 华为云加速器(镜像加速器)
mkdir -p /etc/docker
------------------------------------------------------------------------------------------------------------
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [ "https://0a40cefd360026b40f39c00627fa6f20.mirror.swr.myhuaweicloud.com" ]
}
EOF
------------------------------------------------------------------------------------------------------------
# 重启服务使配置生效
systemctl daemon-reload
systemctl restart docker
8.5.2 安装 Docker Compose
# 下载最新版 Docker Compose(截至2025年,v2.27.0 为稳定版,可替换为最新版本)
curl -L "https://github.com/docker/compose/releases/download/v2.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予执行权限
chmod +x /usr/local/bin/docker-compose
# 创建软链接(确保命令全局可用)
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 验证安装(出现版本信息即正常)
docker-compose --version
8.5.3 创建项目目录结构
# 创建所有需要的目录(一键执行)
mkdir -p /opt/compose/{nginx/{conf,logs,html},tomcat/{conf,logs,webapps}}
cd /opt/compose
# 目录结构展示
/opt/compose/
├── nginx
│ ├── conf
│ ├── html
│ └── logs
├── tomcat
├── conf
├── webapps
└── logs
8.5.3 主配置文件
创建文件:vim /opt/compose/docker-compose.yml
version: '3'
# 自定义网络
networks:
compose_network:
driver: bridge
services:
nginx:
container_name: compose-nginx
image: nginx:1.20 # 直接使用官方1.20版本镜像
ports:
- "80:80"
volumes:
# 挂载自定义配置覆盖容器默认配置
- /opt/compose/nginx/conf:/etc/nginx/conf.d
# 挂载日志目录
- /opt/compose/nginx/logs:/var/log/nginx
# 静态文件目录
- /opt/compose/nginx/html:/usr/share/nginx/html
depends_on:
- tomcat
networks:
- compose_network
tomcat:
container_name: compose-tomcat
image: tomcat:9.0
ports:
- "8080:8080"
volumes:
- /opt/compose/tomcat/conf:/usr/local/tomcat/conf # 配置挂载(可选)
- /opt/compose/tomcat/logs:/usr/local/tomcat/logs # 日志挂载
- /opt/compose/tomcat/webapps:/usr/local/tomcat/webapps # 应用挂载
networks:
- compose_network
8.5.4 配置 nginx 反向代理
# 配置 nginx 反向代理
vim /opt/compose/nginx/conf/nginx.conf
------------------------------------------------------------------------------------------------------------
server {
listen 80;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# 所有请求转发到 Tomcat
location / {
proxy_pass http://compose-tomcat:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
8.5.4 配置 tomcat
# 配置 nginx 反向代理
vim /opt/compose/nginx/conf/nginx.conf
------------------------------------------------------------------------------------------------------------
server {
listen 80;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# 所有请求转发到 Tomcat
location / {
proxy_pass http://compose-tomcat:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
8.5.6 用户授权
# nginx
chown -R 101:101 /opt/compose/nginx/{conf,logs,html}
chmod -R 755 /opt/compose/nginx/{conf,logs,html}
# tomcat
chown -R 1000:1000 /opt/compose/tomcat/{conf,logs,webapps}
chmod -R 755 /opt/compose/tomcat/{conf,logs,webapps}
8.5.6 启动服务
# 进入项目目录
cd /opt/compose
# 构建或重新构建 Compose 文件中定义的服务所依赖的镜像
docker-compose build
# 启动所有服务(-d表示后台运行)
docker-compose up -d
# 查看启动状态(确保所有服务都是Up状态)
docker-compose ps
更多推荐


所有评论(0)