【DOCKER】-5 镜像仓库与容器编排
文章目录
- 镜像仓库与容器编排
- 1、registry私有仓库的使用与优化
- 1.1 registry的定义
- 1.2 registry私有仓库的配置
- 1.3 registry仓库上传镜像
- 1.4 Registry私有仓库-常用API管理
- 2、 docker compose 容器编排
- 2.1 docker compose 概述
- 2.2 compose文件技巧指导
- 2.3 服务部署、扩展和更新
- 2.4 yaml语言介绍
- 2.4.1 YAML语言
- 2.4.2 文件编写格式及注意事项
- 2.4.3 应用场景
- 2.4.4 YAML语言格式
- 2.5 docker compose 语法
- 2.6 docker compose 常用命令
- 3、compose 实践-wordpress构建
- 3.1 安装docker compose
- 3.2 构建wordpress
- 3.3 网站页面
镜像仓库与容器编排
1、registry私有仓库的使用与优化
1.1 registry的定义
Docker Registry是一个用于存储和分发Docker镜像的服务,可理解为Docker镜像的仓库。
-
作用描述:提供镜像的集中存储和管理,支持镜像的版本控制,便于团队间共享和协作。
-
官方Registry与私有Registry:Docker官方提供了公共的Registry服务,同时企业或个人也可搭建私有的Registry服务以满足特定需求。
1.2 registry私有仓库的配置
#示例
[root@docker-lucky-cloud docker]# cat /etc/docker/daemon.json
{"log-level": "error","storage-driver": "overlay2","log-driver": "json-file","log-opts": {"max-size": "50m","max-file": "3"},"registry-mirrors": ["https://0f8a3388042b4b0ab6611ccc6e866ab3.mirror.swr.myhuaweicloud.com"],"insecure-registries": [ "http://192.168.110.160:5000"]
}{"registry-mirrors": [ "https://84c29fdcf3f34b74a2abdc40926e4c88.mirror.swr.myhuaweicloud.com"],"insecure-registries": [ "http://192.168.107.186:5000"]
}#重启docker的配置,并查看运行状态
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# systemctl status docker
● docker.service - Docker Application Container EngineLoaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)Active: active (running) since 四 2025-07-17 11:52:25 CST; 13s agoDocs: https://docs.docker.comMain PID: 14145 (dockerd)Tasks: 10Memory: 30.9MCGroup: /system.slice/docker.service└─14145 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
1.3 registry仓库上传镜像
#启动私有镜像registry[root@localhost ~]# docker run -d \
> -p 5000:5000 \
> -v /var/lib/local_registry:/var/lib/registry \
> --name local_registry \
> registry:latest
Unable to find image 'registry:latest' locally
latest: Pulling from library/registry
0368fd46e3c6: Pull complete
56cbcc5405f0: Pull complete
b65b097f3c34: Pull complete
60999dff384a: Pull complete
e6a3228d448c: Pull complete
Digest: sha256:45fbac229389d0ee0d2ba80c92df8a2bd5896f51950b6070b6f92e8009955268
Status: Downloaded newer image for registry:latest
b4964f1e14cab113bb1f3d97a14ac4124eac613c50c5d8a47e36cdacb0967eaa
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 22bd15417453 2 days ago 192MB
tomcat latest 9ca267cc83c7 12 days ago 468MB
registry latest 3c52eedeec80 3 months ago 57.7MB
centos 7 eeb6ee3f44bd 3 years ago 204MB
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b4964f1e14ca registry:latest "/entrypoint.sh /etc…" 22 seconds ago Up 20 seconds 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp local_registry
[root@localhost ~]# #现有的镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest 9ca267cc83c7 12 days ago 468MB
nginx latest 9592f5595f2b 3 weeks ago 192MB
centos 7 eeb6ee3f44bd 3 years ago 204MB
[root@localhost ~]# #打标签
[root@localhost ~]# docker tag nginx:latest 192.168.107.186:5000/nginx:new
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.107.186:5000/nginx new 22bd15417453 2 days ago 192MB
nginx latest 22bd15417453 2 days ago 192MB
tomcat latest 9ca267cc83c7 12 days ago 468MB
registry latest 3c52eedeec80 3 months ago 57.7MB
centos 7 eeb6ee3f44bd 3 years ago 204MB#上传镜像
[root@localhost ~]# docker push 192.168.107.186:5000/nginx:new
The push refers to repository [192.168.107.186:5000/nginx]
f3cecf76da4f: Pushed
215876b36153: Pushed
2649de478044: Pushed
05afaee498cf: Pushed
c29414fee8ae: Pushed
cff9e7c67fbb: Pushed
1bb35e8b4de1: Pushed
new: digest: sha256:cc15857a248b9206876724049b8cb5a53890075161ddce1fa29f266008f010cf size: 1778
[root@localhost ~]# #拉取镜像
[root@localhost ~]# docker pull 192.168.107.186:5000/nginx:new
new: Pulling from nginx
Digest: sha256:cc15857a248b9206876724049b8cb5a53890075161ddce1fa29f266008f010cf
Status: Image is up to date for 192.168.107.186:5000/nginx:new
192.168.107.186:5000/nginx:new
[root@localhost ~]#
1.4 Registry私有仓库-常用API管理
#查看Registry列表
[root@localhost ~]# curl 127.0.0.1:5000/v2/_catalog
{"repositories":["nginx"]}#查看镜像tag列表
[root@localhost ~]# curl -X GET 127.0.0.1:5000/v2/nginx/tags/list
{"name":"nginx","tags":["new"]}
2、 docker compose 容器编排
2.1 docker compose 概述
- 定义:Docker Compose是一个用于定义和运行多容器Docker应用程序的工具,使用YAML文件来配置应用程序的服务。
- 核心功能:通过Compose,可以轻松地定义、构建、启动、停止和重启多容器应用程序,实现容器间的依赖管理和网络配置。
- 应用场景:Compose适用于开发、测试和生产环境中,可以简化复杂的容器部署流程,提高运维效率。
2.2 compose文件技巧指导
- 文件格式:Compose文件采用YAML语法,具有简洁明了的特点,易于阅读和编写。
- 服务定义:在Compose文件中,可以定义多个服务,每个服务对应一个或多个容器,通过指定镜像、端口、环境变量等参数来配置容器。
- 网络配置:通过networks关键字可以定义网络,实现容器间的互联互通。
- 依赖关系:可以使用depends_on关键字来定义服务之间的依赖关系,确保在启动服务时按照正确的顺序进行。
2.3 服务部署、扩展和更新
- 部署策略:可以使用Compose命令行工具进行服务的部署,支持一键启动、停止和重启等操作。
- 扩展策略:通过scale关键字可以轻松地扩展服务的实例数量,实现负载均衡和高可用性。
- 更新策略:Compose支持滚动更新策略,可以在不中断服务的情况下逐步更新容器镜像或配置。
2.4 yaml语言介绍
2.4.1 YAML语言
- YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。
- 类似于 json 数据描述语言,语法比 json 简单的很多。
- YAML 数据结构通过缩进来表示,连续的项目通过减号来表示。
- 键值对用冒号分隔,数组用中括号 [] 括起来, hash 用花括号 {} 括起来
2.4.2 文件编写格式及注意事项
- 大小写敏感
- 通过缩进表示层级关系
- 不支持制表符tab键缩进,只能用空格缩进
- 缩进空格数不重要,只要相同层级左对齐,通常开头缩进2个空格
- 用#注释
- 符号字符后缩进1个空格,如冒号 : 、逗号 , 、横杠 -
- 如果包含特殊字符用单引号(‘’)引起来会作为普通字符串处理,双引号(“”): 特殊字符作为本身想表示的意思
2.4.3 应用场景
-
配置文件:**容器编排工具:**Kubernetes 的配置文件(如 Deployment、Service、ConfigMap、Secret 等)几乎全部采用 YAML 格式。这些文件定义了如何在 Kubernetes 集群中部署、管理、配置和扩展应用程序。
CI/CD **工具:**许多持续集成/持续部署(CI/CD)工具(如 Jenkins、GitLab CI、Tekton 等)使用 YAML 文件来定义管道、任务和触发器。
**其他云原生工具:**如 Prometheus 的监控配置、Istio 的服务网格配置等,也常采用 YAML 格式。
-
数据交换:
-
API配置:某些云原生API可能接受YAML格式的请求体,用于传递复杂的配置或参数。
-
配置共享:团队间或项目间可共享YAML格式的配置文件,以确保一致性并简化配置管理。
- 序列化与反序列化
-
状态持久化:应用程序可能将当前状态或配置序列化为YAML格式,存储在文件或数据库中,以便后续恢复。
-
测试数据:测试框架可能使用YAML文件来存储和管理测试用例数据,提高测试的可维护性和可读性。
2.4.4 YAML语言格式
-
大小写敏感
-
通过缩进表示层级关系
-
不支持制表符 tab 键缩进,只能使用空格缩进
-
缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格
-
用 # 号注释
-
符号字符后缩进1个空格,如冒号 : 、逗号 , 、横杠 -
-
如果包含特殊字符用单引号(‘’)引起来会作为普通字符串处理,双引号(“”): 特殊字符作为本身想表示的意思
示例:
version: '3.8'
services:webapp:image: my-webapp-image:latestports:- "5000:5000"environment:- DEBUG=1- DB_HOST=databasedepends_on:- databasedatabase:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: exampleMYSQL_DATABASE: mydatabase
2.5 docker compose 语法
2.6 docker compose 常用命令
3、compose 实践-wordpress构建
3.1 安装docker compose
[root@localhost ~]# yum install epel-release.noarch -y
已加载插件:fastestmirror, langpacks
Running transaction...已安装:epel-release.noarch 0:7-14
完毕!
[root@localhost ~]# #安装dockercompsoe
yum -y install docker-compose...作为依赖被安装:python3.x86_64 0:3.6.8-21.el7_9 python3-libs.x86_64 0:3.6.8-21.el7_9
.....
完毕![root@localhost ~]#
3.2 构建wordpress
[root@localhost ~]# mkdir /opt/wordpress-compose
[root@localhost ~]# cd /opt/wordpress-compose/
[root@localhost wordpress-compose]# ls
[root@localhost wordpress-compose]# touch docker-compose.yaml
[root@localhost wordpress-compose]# ls
docker-compose.yaml
[root@localhost wordpress-compose]# vim docker-compose.yaml####version: '3.1'services:wordpress:image: wordpressrestart: alwaysports:- 8000:80environment:WORDPRESS_DB_HOST: dbWORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: wordpressWORDPRESS_DB_NAME: wordpressvolumes:- /opt/wordpress:/var/www/htmldb:image: mysql:5.7restart: alwaysenvironment:MYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpressMYSQL_RANDOM_ROOT_PASSWORD: '1'volumes:- /opt/mysql:/var/lib/mysql####[root@localhost wordpress-compose]# docker-compose up -d
Creating network "wordpresscompose_default" with the default driver
Pulling wordpress (wordpress:latest)...
....
Status: Downloaded newer image for mysql:5.7
Creating wordpresscompose_wordpress_1 ... done
Creating wordpresscompose_db_1 ... done
[root@localhost wordpress-compose]# #查看状态
[root@localhost wordpress-compose]# docker-compose ps Name Command State Ports
-------------------------------------------------------------------------------------------------------
wordpresscompose_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
wordpresscompose_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8000->80/tcp,:::8000->80/tcp
[root@localhost wordpress-compose]#