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)

  1. 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的镜像

  1. 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)- (unames)(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值