1.Docker的安装

# 1、yum 包更新到最新 
yum update
# 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

## 问题:搭建过程中法线上面的太老了已经无法使用,下面的阿里云镜像可以正常安装
yum-config-manager --add-repo https:/                   /mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


# 4、 安装docker,出现输入的界面都按 y 
yum install -y docker-ce
# 5、 查看docker版本,验证是否验证成功
docker -v

image-20260731091145157

image-20260731091202477

至此Docker安装成功

2.Docker架构

一、概念定义

1. 镜像(Image)

镜像是一个只读的静态模板,包含了运行应用所需的一切:

  • 操作系统基础文件(如 Alpine、Ubuntu)
  • 运行时环境(如 Node.js、Python、JDK)
  • 应用代码与依赖
  • 环境变量、配置文件
  • 启动命令

类比:镜像就像面向对象编程中的 类(Class),它是创建实例的蓝图。

2. 容器(Container)

容器是镜像的一个运行实例,拥有:

  • 独立的文件系统(基于镜像的可写层)
  • 独立的网络栈
  • 独立的进程空间
  • 资源限制(CPU、内存等)

容器可以被创建、启动、停止、删除、暂停。同一个镜像可以同时运行多个相互隔离的容器。

类比:容器就像类的 实例对象(Object Instance)

3. 镜像仓库(Registry)

镜像仓库是存储和分发镜像的中心化服务:

  • 推送(Push):将本地构建好的镜像上传到仓库
  • 拉取(Pull):从仓库下载镜像到本地
  • 常见仓库:Docker Hub、Harbor、阿里云 ACR、AWS ECR

类比:镜像仓库就像代码的 GitHub/GitLab — 存储版本化的镜像,方便团队共享。

4. 进程(Process)

进程是容器内部运行的实际应用程序

  • 每个容器至少有一个主进程(PID 1)
  • 进程是容器"活着的"体现
  • 当容器内主进程退出时,容器也随之停止

类比:进程是容器这个"虚拟机"里真正干活的"工人"。

二、四者关系总结

镜像仓库  ←——推送(Push)——→  本地镜像  ——创建——→  容器  ——运行——→  进程
(远程存储)   拉取(Pull)     (本地模板)  运行    (隔离实例)  封装    (应用程序)
关系 说明
镜像 → 容器 镜像是静态模板,容器是动态运行实例。一个镜像可以创建多个容器
镜像 ↔ 镜像仓库 镜像通过 Push 上传到仓库,通过 Pull 从仓库下载
容器 → 进程 容器封装并隔离了进程的运行环境,进程在容器内部执行
进程 → 容器 进程的生命周期决定容器的状态:进程运行则容器运行,进程退出则容器停止

三、Mermaid 关系图

💻 本地主机

☁️ 远程仓库

进程执行层

容器运行层

镜像存储层

Pull 拉取

Push 推送

docker run 创建启动

docker run 创建启动

docker run 创建启动

封装运行

封装运行

封装运行

进程退出 → 容器停止

进程退出 → 容器停止

进程退出 → 容器停止

📦 镜像仓库 Registry
Docker Hub / Harbor

📀 镜像 Image
只读静态模板

📋 容器 A (运行实例)

📋 容器 B (运行实例)

📋 容器 C (运行实例)

⚙️ 进程 PID 1
Nginx

⚙️ 进程 PID 1
Node.js

⚙️ 进程 PID 1
Python


3.配置Docker加速器

3.1注册阿里云账号并创建容器实例(免费版)

image-20260731101909763

3.2试图获取阿里云官方加速

image-20260731101948845

服务不再提供

3.3配置加速器

配置国内镜像加速

mkdir -p /etc/docker
vim /etc/docker/daemon.json

写入:

{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com",
    "https://docker.1panel.live"
  ]
}

重新加载并重启:

systemctl daemon-reload
systemctl restart docker

验证加速生效:

docker info   # 输出中应有 Registry Mirrors

image-20260731104020759

允许非 root 用户执行 Docker 命令

groupadd docker                # 通常已存在
usermod -aG docker $USER      # 将当前用户加入 docker 组
newgrp docker                 # 刷新当前终端权限

退出重新登录后,docker ps 不再需要 sudo。

开放防火墙端口(按需)
容器需要对外服务时执行,例如:

firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload

4.Docker命令

4.1docker服务相关命令

启动、看状态、停止、重启、开机自启动

systemctl start docker
systemctl status docker
systemctl stop docker
systemctl restart docker
systemctl enable docker

4.2docker镜像相关的命令

查看镜像(本地)

docker images

搜索镜像(国内可能无法使用)

docker search xxx

拉取镜像

docker pull xxx [:版本号]  #不写默认官方版

删除镜像

docker rmi 对应的ID或者名字

4.3docker容器相关的命令

查看容器

docker ps #查看正在运行的容器
docker ps -a #查看所有容器

创建并启动容器

docker run 参数

image-20260731110723642

退出 exit

进入容器

docker exec 参数 # 退出容器容器不会关闭

启动、停止、删除、查看

停止容器

docker stop 容器名称

启动容器

docker start 容器名称

删除容器

docker rm 容器名称 # 如果容器时运行状态则删除失败,需要停止容器

查看容器信息

docker inspect 容器名称

5.Docker容器的数据卷

5.1数据卷的概念

Docker容器删除后,在容器中产生的数据就不在了

docker容器和外部机器可以直接交换文件吗?不可以

容器之间想要进行数据交互?


数据卷是宿主机中的一个目录或文件

当容器目录和数据卷目录绑定后,对方的修改会立即同步

一个数据卷可以被多个容器同时挂载

一个容器也可以挂载多个数据卷

数据卷的作用:

  • 容器数据持久化
  • 外部机器和容器间接通信
  • 容器之间数据交换

5.2配置数据卷

创建启动容器时,使用-v参数 设置数据卷

image-20260731113627281

5.3数据卷容器

多容器进行数据交换

  1. 多个容器挂载同一个数据卷
  2. 数据卷容器

image-20260731134144612

配置数据卷容器

1.创建启动c3数据卷容器,使用-v参数设置数据卷

docker run -it --name=c3 -v /volume centos:7 /bin/bash

2.创建启动c1 c2 容器,使用–volumes-from参数设置数据卷

docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash

6.Docker应用部署

6.1 MySQL部署

需求:在docker容器中部署MySQL,并通过外部MySQL客户端操作MySQL server

实现步骤:

  1. 搜索MySQL镜像

    问题:无法使用search命令,尝试直接pull拉取,依旧无法连接,经排查发现原先添加进json文件的镜像加速失效,重新添加了加速地址

    cat > /etc/docker/daemon.json <<'EOF'
    {
    "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me"
    ],
    "features": {
    "containerd-snapshotter": false
    }
    }
    EOF
    

    添加了以后已经可以下载了,但速度缓慢

    image-20260731142934331

  2. 拉取镜像

  3. 创建容器

  4. 操作容器中的mysql

7.Dockerfile

7.1

docker镜像是有特殊的文件系统叠加而成

最低端是bootfs,并使用宿主机的bootfs

第二层是root问价系统rootfs,成为base image

在往上可以叠加其他的镜像文件

Docker镜像本质是什么?
是一个分层文件系统
Docker中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个个G?
Centos的iso镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层
Docker中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MB?
由于docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖于父镜像和基础镜像,所有整个对外暴露的
tomcat镜像大小500多MB

7.2 镜像制作

  1. 容器转为镜像,了解一下即可

    docker commit 容器id 镜像名称:版本号
    docker save -o 压缩文件名称 镜像名称:版本号
    docker load -i 压缩文件名称
    

7.3dockerfile概念

Dockerfile 是一个文本文件
包含了一条条的指令
每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
对于开发人员:可以为开发团队提供一个完全一致的开发环境
对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件
构建一个新的镜像开始工作了
对于运维人员:在部署时,可以实现应用的无缝移植

8.Docker私有仓库

一、私有仓库搭建

# 1、拉取私有仓库镜像 
docker pull registry
# 2、启动私有仓库容器 
docker run -id --name=registry -p 5000:5000 registry
# 3、打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓库 搭建成功
# 4、修改daemon.json   
vim /etc/docker/daemon.json    
# 在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip 
{"insecure-registries":["私有仓库服务器ip:5000"]} 
# 5、重启docker 服务 
systemctl restart docker
docker start registry

二、将镜像上传至私有仓库

# 1、标记镜像为私有仓库的镜像     
docker tag centos:7 私有仓库服务器IP:5000/centos:7
 
# 2、上传标记的镜像     
docker push 私有仓库服务器IP:5000/centos:7

三、 从私有仓库拉取镜像

#拉取镜像 
docker pull 私有仓库服务器ip:5000/centos:7
n   
vim /etc/docker/daemon.json    
# 在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip 
{"insecure-registries":["私有仓库服务器ip:5000"]} 
# 5、重启docker 服务 
systemctl restart docker
docker start registry

二、将镜像上传至私有仓库

# 1、标记镜像为私有仓库的镜像     
docker tag centos:7 私有仓库服务器IP:5000/centos:7
 
# 2、上传标记的镜像     
docker push 私有仓库服务器IP:5000/centos:7

三、 从私有仓库拉取镜像

#拉取镜像 
docker pull 私有仓库服务器ip:5000/centos:7
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐