Docker系列13:容器编排(1)
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,一、容器编排基础1、容器编排概念可以指定各个容器中的程序是有依赖关系的比如有个web服务必须在mysql正常的情况下,才能运行,那么这个时候就是web容器是依赖mysql容器的,只有mysql容器正常
千家信息网最后更新 2025年02月02日Docker系列13:容器编排(1)
一、容器编排基础
1、容器编排概念
- 可以指定各个容器中的程序是有依赖关系的
- 比如有个web服务必须在mysql正常的情况下,才能运行,那么这个时候就是web容器是依赖mysql容器的,只有mysql容器正常启动,web容器才能启动。
2、容器编排工具
- docker compose
- k8s
- k3s
二、compose详解
1、什么是compose
- Docker Compose 将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container)
- Docker Compose 运行目录下的所有文件(docker-compose.yml)组成一个工程,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖,一个服务可包括多个容器实例
2、安装compse
方法1:用提供的这个conpose文件,将这个文件放到/usr/local/bin
方法2:用epel和extra源中的安装包
1)配置yum源
[root@host1 ~]# cat /etc/yum.repos.d/epel.repo [epel]name=epelbaseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7Server/x86_64/enabled=1gpgcheck=0
2)安装docker-compose
[root@host1 ~]# yum install docker-compose -y
3、compose参数详解
先看一个dyml文件样例
参数1:build
- build,它可以指定 Dockerfile 所在文件夹的路径。Compose 将会利用它自动构建这个镜像,然后使用这个镜像启动服务容器。
- 也可以是相对路径,只要上下文确定就可以读取到 Dockerfile。
参数2:context
- 这个是用来指定dockerfile文件的工作目录的
- 这是build的一个子选项
参数3:dockerfile
- 指定具体的dockerfile来做镜像
- 这是build的一个子选项
参数4:ARGS
- 设置变量,这些变量仅仅在build的过程中才会用到
- 这是build的一个子选项
参数5:labels
- 这是build的一个子选项
- 用来指定build过程中的元数据
参数6:shm_size
- 这是build的一个子选项,控制基于build构建的镜像的参数配置
- /dev/shm是linux中系统中物理内存的映射,使用/dev/shm对文件操作的效率会高很多,我在优化系统的时候,常用用到
参数7:command
- 使用 command 可以覆盖容器启动后默认执行的命令。
参数8:image
- image 则是指定服务的镜像名称或镜像 ID。
- 如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
image: redisimage: ubuntu:14.04image: tutum/influxdbimage: example-registry.com:4000/postgresqlimage: a4bc65fd
参数9:container_name
- 可以使用这个标签指定容器名称
参数10:depends_on
- 这个标签解决了容器的依赖、启动先后的问题
案例:下面容器会先启动 redis 和 db 两个服务,最后才启动 web 服务:
参数11:dns
- 指定DNS服务器的地址
dns: 8.8.8.8dns: - 8.8.8.8 - 9.9.9.9
参数12:dns_search
- 设置搜索域
dns_search: example.comdns_search: - dc1.example.com - dc2.example.com
参数13:tmpfs
- 挂载临时目录到容器内部
tmpfs: - /run - /tmp
参数14:entrypoint
- 用于覆盖 Dockerfile 中的定义
entrypoint: - php - -d - zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so - -d - memory_limit=-1 - vendor/bin/phpunit
参数15:env_file
- docker-compose.yml 中可以定义一个专门存放变量的文件。
- 如果通过 docker-compose -f FILE 指定了配置文件,则 env_file 中路径会使用配置文件路径。
- 如果有变量名称与 environment 指令冲突,则以后者为准。
env_file: - ./common.env - ./apps/web.env - /opt/secrets.env
参数16:environment
- 这个标签的作用是设置镜像变量,它可以保存变量到镜像里面,也就是说启动的容器也会包含这些变量设置,这是与 arg 最大的不同。
- environment 和 Dockerfile 中的 ENV 指令一样会把变量一直保存在镜像、容器中,类似 docker run -e 的效果。
environment:RACK_ENV: developmentSHOW: 'true'SESSION_SECRET:
environment:
- RACK_ENV=development
- SHOW=true
- SESSION_SECRET
#### 参数17:expose* 这个标签与Dockerfile中的EXPOSE指令一样,用于指定暴露的端口,但是只是作为一种参考* 实际上docker-compose.yml的端口映射还得ports这样的标签。
expose:
- "3000"
- "8000"
参数18:external_links
- 为了使Compose能够连接这些不在docker-compose.yml中定义的容器,external_links可以让Compose项目里面的容器连接到那些项目配置外部的容器
external_links:- redis_1- project_db_1:mysql- project_db_1:postgresql
参数19:extra_hosts
- 添加主机名的标签,就是往/etc/hosts文件中添加一些记录
extra_hosts:- "somehost:162.242.195.82"- "otherhost:50.31.209.229"
标签20:labels
- 向容器添加元数据,和Dockerfile的LABEL指令一个意思
labels:com.example.description: "Accounting webapp"com.example.department: "Finance"com.example.label-with-empty-value: ""labels: - "com.example.description=Accounting webapp" - "com.example.department=Finance" - "com.example.label-with-empty-value"
标签21:links
- depends_on吧,那个标签解决的是启动顺序问题
- 这个标签解决的是容器连接问题,与Docker client的--link一样效果,会连接到其它服务中的容器。
links:- db- db:database- redis
标签22:logging
- 这个标签用于配置日志服务。
logging:driver: syslogoptions:syslog-address: "tcp://192.168.0.42:123"
标签23:pid
- 容器使用这个标签将能够访问和操纵其他容器和宿主机的名称空间。
- pid: "host":将PID模式设置为主机PID模式,跟主机系统共享进程命名空间。
标签24:ports
- 映射端口的标签。
- 使用HOST:CONTAINER格式或者只是指定容器的端口,宿主机会随机映射端口。
ports:- "3000"- "8000:8000"- "49100:22"- "127.0.0.1:8001:8001"
- 当使用HOST:CONTAINER格式来映射端口时,如果你使用的容器端口小于60你可能会得到错误得结果
- 因为YAML将会解析xx:yy这种数字格式为60进制。所以建议采用字符串格式。
标签25:security_opt
- 为每个容器覆盖默认的标签。简单说来就是管理全部服务的标签。比如设置全部服务的user标签值为USER。
security_opt: - label:user:USER - label:role:ROLE
标签26:stop_signal
- 设置另一个信号来停止容器。
- 在默认情况下使用的是SIGTERM停止容器。
标签27:volumes
- 挂载一个目录或者一个已存在的数据卷容器
- 可以直接使用 [HOST:CONTAINER] 这样的格式,或者使用 [HOST:CONTAINER:ro] 这样的格式,后者的数据卷是只读的
- Compose的数据卷指定路径可以是相对路径,使用 . 或者 .. 来指定相对目录。
标签28:volumes_from
- 从其它容器或者服务挂载数据卷
- 可选的参数是 :ro或者 :rw,前者表示容器只读,后者表示容器对数据卷是可读可写的
- 默认情况下是可读可写的。
volumes_from: - service_name - service_name:ro - container:container_name - container:container_name:rw
标签29:cap_add, cap_drop
- 添加或删除容器的内核功能
标签30:cgroup_parent
- 指定一个容器的父级cgroup。
标签31:devices
- 设备映射列表。与Docker client的--device参数类似。
标签32:extends
- 这个标签可以扩展另一个服务,扩展内容可以是来自在当前文件,也可以是来自其他文件
- 相同服务的情况下,后来者会有选择地覆盖原有配置。
extends:file: common.yml service: webapp
标签33:network_mode
- 设置网络模式
- 与Docker client的--net参数类似,只是相对多了一个service:[service name] 的格式
network_mode: "bridge"network_mode: "host"network_mode: "none"network_mode: "service:[service name]"network_mode: "container:[container name/id]"
标签34:networks
services:some-service: networks: - some-network - other-network
端口暴露问题
- ports:暴露端口信息。使用:宿主:容器 (HOST:CONTAINER)格式或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。
- expose:暴露端口,但不映射到宿主机,只被连接的服务访问。
关于控制启动顺序的问题
- depends_on:表示服务之前的依赖关系,有两个效果:
- 1)docker-compose up,启动web服务之前、启动redis、db。
- 2)docker-compose up web,启动web容器时,检查依赖depends_on的配置内容,先启动db和redis
version: '2'services: web: build: . depends_on: - db - redisredis: image: redisdb: image: postgres
容器
标签
参数
服务
文件
端口
镜像
格式
配置
变量
数据
路径
这是
个子
目录
问题
名称
宿主
情况
指令
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库专用服务器
苏州数据网络技术咨询热线
数据库三表连接的条件顺序
南宁市公安网络安全保卫支队
近年网络安全问题数据
湖北ai人脸识别软件开发
河北回收服务器cpu 云主机
丰镇市网络安全应急指挥中心
贵州网络技术服务创新服务
服务器管理器一堆乱码怎么办
淄博恒业网络技术
银行软件开发工作内容
nacicat如何建立数据库
中邮科软件开发
网络安全法草案2017
软件开发企业销售部职能
软件开发不允许联网
软件开发需要游戏本么
网络安全最新资讯三六零
门口易测服务器坏了
网络安全辩论会正方
服务端防止前端修改数据库
公司内网络安全检查
服务器有三个网卡如何互通
网络技术公司的文员
cs 起源服务器
如何成为云服务器供应商
做软件开发考哪里的研究生好
数据库行迁移
sql+数据库+实例