- 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)
- 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 |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的镜像
- 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
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
复制源镜像至指定目录
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-
(
u
n
a
m
e
−
s
)
−
(uname -s)-
(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
3776

被折叠的 条评论
为什么被折叠?



