docker总结

Docker 核心技术全总结

一、Docker 基础认知

(一)核心概念

  • 容器:轻量级、可移植、自包含的软件打包技术,包含应用及依赖,共享宿主机内核,启动秒级、资源开销低。

  • 镜像:只读模板,是创建容器的基础,采用分层文件系统,支持版本管理和增量构建。

  • 仓库:集中存放镜像的场所,分公有(如 Docker Hub、华为云 SWR)和私有(如 Harbor)。

  • Docker 架构:C/S 架构,客户端(docker 命令)通过 REST API 与守护进程(dockerd)通信,守护进程负责镜像构建、容器管理等核心操作。

(二)容器与虚拟机对比

特性 容器 虚拟机
启动速度 秒级 分钟级
性能 接近原生 有虚拟化开销
资源占用 极低(MB 级) 较高(GB 级)
隔离性 进程级隔离(namespace) 完全隔离(独立内核)
运行密度 单机支持上千个 数十个

(三)容器生态系统

  • 核心技术:OCI 规范(runtime spec、image format spec)、容器运行时(runc、lxc、rkt)、管理工具(Docker Engine)、定义工具(Dockerfile、ACI)、仓库(Docker Hub)、容器 OS(CoreOS、Atomic)。

  • 平台技术:编排引擎(Docker Swarm、Kubernetes、Mesos+Marathon)、管理平台(Rancher)、容器 PaaS(Deis、Dokku)。

  • 支持技术:网络(Docker Network、Flannel、Calico)、服务发现(etcd、Consul、Zookeeper)、监控(cAdvisor、Weave Scope)、数据管理(Flocker)、日志(docker logs、logspout)、安全(OpenSCAP)。

二、Docker 安装与环境配置

(一)系统要求

  • 操作系统:CentOS Stream 8(推荐)、Ubuntu、Windows、macOS。

  • 依赖:内核版本 ≥ 3.10,关闭 SELinux,配置静态 IP。

(二)安装步骤(CentOS Stream 8)

  1. 卸载旧版本:yum remove docker-ce

  2. 安装依赖工具:yum install -y yum-utils lvm2 vim

  3. 配置镜像源(阿里云):yum-config-manager --add-repo ``https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  4. 安装 Docker CE:yum install -y docker-ce

  5. 启动并设置开机自启:systemctl enable docker.service --now

  6. 验证安装:docker --versionsystemctl status docker

(三)镜像加速器配置

  1. 阿里云加速器:修改 /etc/docker/daemon.json,添加 "registry-mirrors": ["``https://xxx.mirror.aliyuncs.com``"]

  2. 华为云加速器:配置 "registry-mirrors": ["``https://xxx.mirror.swr.myhuaweicloud.com``"]

  3. 生效配置:systemctl daemon-reload && systemctl restart docker

  4. 验证:docker info 查看 Registry Mirrors 字段。

三、镜像核心操作

(一)镜像基础命令

功能 命令
查看镜像 docker images
搜索镜像 docker search 镜像名(如 docker search nginx
拉取镜像 docker pull 镜像名:标签(如 docker pull centos:7
删除镜像 docker rmi 镜像ID/镜像名:标签
保存镜像 docker save -o 文件名.tar 镜像名
导入镜像 docker load -i 文件名.tar

(二)镜像构建

1. Dockerfile 核心指令
指令 功能
FROM 指定基础镜像(如 FROM centos:8.4.2105
RUN 构建时执行命令(如 yum install -y openssh-server
COPY 复制本地文件到镜像(仅复制,不解压)
ADD 复制文件并自动解压归档文件(如 ADD jdk.tar.gz /usr/local/
ENV 设置环境变量(如 ENV JAVA_HOME /usr/local/java
WORKDIR 指定工作目录(如 WORKDIR /usr/local
EXPOSE 声明容器暴露端口(如 EXPOSE 80
CMD 容器启动默认命令(可被 docker run 参数覆盖)
ENTRYPOINT 容器启动必执行命令(参数可被 CMD 传递)
2. 构建命令
复制代码
docker build -t 镜像名:标签 -f Dockerfile路径 构建上下文路径

示例:基于当前目录的 Dockerfile 构建镜像

docker build -t centos:ssh .
3. 镜像分层与缓存
  • 镜像由多层只读镜像层叠加而成,上层覆盖下层同名文件。

  • 构建时优先使用缓存,若某层指令变更,其上层缓存全部失效,建议将稳定指令(如安装依赖)放在前面。

(三)镜像仓库使用

1. 公有仓库(Docker Hub)
  • 登录:docker login -u 用户名

  • 镜像命名规范:用户名/镜像名:标签(如 gaoqiaodong/centos_httpd:v1

  • 推送镜像:docker push 用户名/镜像名:标签

  • 拉取镜像:docker pull 用户名/镜像名:标签

2. 私有仓库(Harbor)
  • 安装:下载离线安装包,修改 harbor.yml(配置 hostname、密码),执行 ./``install.sh

  • 登录:docker login 仓库地址(如 docker login ``192.168.108.30

  • 镜像推送:docker tag 本地镜像 仓库地址/项目名/镜像名:标签 && docker push 仓库地址/项目名/镜像名:标签

四、容器核心操作

(一)容器生命周期管理

功能 命令
创建容器 docker create --name 容器名 镜像名
启动容器 docker start 容器ID/容器名
运行容器 docker run -d(后台)-it(交互)--name 容器名 镜像名
停止容器 docker stop 容器ID/容器名(温和停止)
强制停止 docker kill 容器ID/容器名(发送 SIGKILL)
重启容器 docker restart 容器ID/容器名
查看容器 docker ps(运行中)、docker ps -a(所有)
删除容器 docker rm 容器ID/容器名(需先停止)
强制删除 docker rm -f 容器ID/容器名(强制停止并删除)

(二)容器交互与监控

  • 进入容器:docker exec -it 容器ID /bin/bash(推荐,不中断容器进程)、docker attach 容器ID(依附于启动命令终端)。

  • 查看日志:docker logs -f 容器ID(实时输出)。

  • 资源监控:docker stats(实时查看 CPU、内存、网络占用)、docker top 容器ID(查看容器内进程)。

(三)容器资源限制

  • 内存限制docker run -m 200M --memory-swap=300M 镜像名(限制内存 200M,swap 100M)。

  • CPU 限制docker run --cpu-shares 512 镜像名(设置 CPU 权重,默认 1024,资源紧张时生效)。

  • 自动重启docker run --restart=always 镜像名(容器退出时自动重启)。

五、Docker 网络配置

(一)原生网络类型

网络类型 特点 适用场景
bridge 默认网络,通过 docker0 网桥转发,支持端口映射 容器间通信、容器访问外网
host 共享宿主机网络栈,无端口映射开销 对网络性能要求高的场景
none 仅保留 lo 接口,无网络连接 无需联网的安全场景(如生成密码)

(二)自定义网络

  1. 创建桥接网络:docker network create --driver bridge --subnet ``172.22.16.0/24`` --gateway ``172.22.16.1`` 网络名

  2. 容器连接网络:docker run --network 网络名 --ip ``172.22.16.8`` 容器名

  3. 容器跨网络通信:docker network connect 目标网络 容器名(为容器添加多网卡)

(三)端口映射与外部访问

  • 随机映射:docker run -P 镜像名(映射容器暴露端口到宿主机随机端口)。

  • 指定映射:docker run -p 宿主机端口:容器端口 镜像名(如 docker run -p 8080:80 nginx)。

  • 容器访问外网:通过 NAT 实现,宿主机 iptables 自动配置 MASQUERADE 规则。

(四)容器间通信

  • IP 通信:同一网络内容器可通过私有 IP 直接通信。

  • DNS 通信 :自定义网络支持容器名解析,docker run --name 容器名 --network 网络名 镜像名 后,可通过容器名 ping 通。

  • Joined 容器docker run --network container:目标容器名 镜像名,共享目标容器网络栈,支持 127.0.0.1 通信。

六、Docker 存储管理

(一)存储类型

  • 镜像层与容器层:由 storage driver 管理(默认 overlay2),容器层可写,镜像层只读,采用 Copy-on-Write 机制。

  • Data Volume:持久化存储,独立于容器生命周期,分两种类型:

  1. Bind Mount :挂载宿主机已有目录 / 文件到容器,docker run -v 宿主机路径:容器路径 镜像名,支持只读权限(:ro)。

  2. Docker Managed Volume :Docker 自动在 /var/lib/docker/volumes/ 创建目录,docker run -v 容器路径 镜像名,容器内已有数据会自动复制到卷。

(二)数据共享与备份

  • 容器间共享:通过 --volumes-from 数据卷容器 实现,数据卷容器仅提供卷,无需运行。

  • 备份:直接复制宿主机卷目录(如 /var/lib/docker/volumes/xxx/_data)或使用 docker cp 拷贝容器内数据。

  • 恢复:将备份数据复制到新卷目录,或通过 docker cp 导入容器。

(三)实战:MySQL 数据持久化

复制代码
 创建数据卷挂载目录

mkdir -p /gqd/mysql/{data,conf,log}

启动 MySQL 容器,挂载卷并配置字符集

docker run -d -p 3306:3306 --privileged=true \\

-v /gqd/mysql/data:/var/lib/mysql \\

-v /gqd/mysql/conf:/etc/mysql/conf.d \\

-v /gqd/mysql/log:/var/log/mysql \\

-e MYSQL\_ROOT\_PASSWORD=123456 \\

\--name mysql mysql:5.7

 配置中文支持(在 /gqd/mysql/conf 中创建 my.cnf)

echo -e "\[client]\ndefault\_character\_set=utf8\n\[mysqld]\ncharacter\_set\_server=utf8\ncollation\_server=utf8\_general\_ci" > /gqd/mysql/conf/my.cnf

docker restart mysql

七、Docker Compose 多容器编排

(一)核心概念

  • 服务(Service):一个应用容器,可包含多个相同镜像的实例。

  • 项目(Project) :由一组关联服务组成的完整业务单元,通过 docker-compose.yml 定义。

(二)常用命令

功能 命令
启动项目 docker compose up -d(后台运行)
停止项目 docker compose down(停止并删除容器、网络)
查看服务 docker compose ps
查看日志 docker compose logs -f 服务名
构建镜像 docker compose build(基于 Dockerfile)

(三)实战:WordPress 多容器部署

复制代码
 docker-compose.yml

services:

 db:

  image: mysql:latest

  restart: always

 environment:

     MYSQL\_ROOT\_PASSWORD: huawei

    MYSQL\_DATABASE: wordpress

blog:

   image: wordpress:latest

  restart: always

   ports:

    - "80:80"

   links:

     - db

  environment:

    WORDPRESS\_DB\_HOST: db

    WORDPRESS\_DB\_USER: root

    WORDPRESS\_DB\_PASSWORD: huawei

    WORDPRESS\_DB\_NAME: wordpress

启动命令:docker compose up -d

八、Docker 图形化管理工具

(一)Docker UI

  • 安装:docker run -d --name docker.ui --restart always -v /var/run/docker.sock:/var/run/docker.sock -p 8999:8999 joinsunsoft/docker.ui

  • 访问:http://宿主机IP:8999,默认账号密码:ginghan/123456。

(二)Portainer

  • 安装:
  1. 创建卷:docker volume create portainer_data

  2. 启动容器:docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

  • 访问:https://宿主机IP:9443,首次登录创建管理员账号。

九、Docker 实战案例

(一)自定义 SSH 镜像

复制代码
 centos.ssh.dockerfile

FROM centos:8.4.2105

RUN sed -e "s|^mirrorlist=|#mirrorlist=|g" -e "s|^#baseurl=http://mirror.centos.org/\\\$contentdir/\\\$releasever|baseurl=https://mirrors.aliyun.com/centos-vault/8.4.2105|g" -i.bak /etc/yum.repos.d/CentOS-\*.repo

RUN yum install -y openssh-server && ssh-keygen -t rsa -f /etc/ssh/ssh\_host\_rsa\_key && ssh-keygen -t ecdsa -f /etc/ssh/ssh\_host\_ecdsa\_key

RUN echo "root:huawei" | chpasswd

EXPOSE 22

CMD \["/usr/sbin/sshd", "-D"]

 构建并启动

docker build -t centos:ssh -f centos.ssh.dockerfile .

docker run -d -p 2022:22 --name sshtest centos:ssh

(二)Ghost 博客系统部署

复制代码
 拉取镜像

docker pull ghost

 创建数据目录

mkdir -p /data/ghost && chmod -R 777 /data/ghost

 启动容器

docker run -d --restart always --name ghost -p 2368:2368 -v /data/ghost:/var/lib/ghost/content -e NODE\_ENV=development -e url=http://192.168.108.30:2368 ghost

 访问:http://192.168.108.30:2368,后台:http://192.168.108.30:2368/ghost

十、Docker 核心命令速查表

类别 常用命令
镜像操作 docker images docker pull docker build docker push docker rmi
容器操作 docker run docker ps docker stop docker rm docker exec docker logs
网络操作 docker network ls docker network create docker network connect
存储操作 docker volume ls docker volume inspect docker run -v
Compose docker compose up docker compose down docker compose logs
相关推荐
LCG米3 小时前
车载以太网SOME/IP协议栈在TI TDA4VM平台上的实现与测试
网络·网络协议·tcp/ip
qq_2153978973 小时前
内网穿透服务 frps
运维·docker·容器
嵌入式×边缘AI:打怪升级日志4 小时前
USB协议详解:从物理连接到数据传输的完整解析
网络·学习·usb
简单点的学玩4 小时前
国标充电基础介绍
网络
hello_2504 小时前
排查K8s Pod Core Dump问题
linux·docker·kubernetes
可爱又迷人的反派角色“yang”5 小时前
docker(三)
linux·运维·网络·docker·容器·云计算
爱潜水的小L5 小时前
自学嵌入式day37,网络编程
开发语言·网络·php
ベadvance courageouslyミ5 小时前
网络编程基础(一)
网络·udp·ip
lusasky6 小时前
实现智能体调用海量api
网络