Docker系列13:容器编排(1)
发表于:2024-11-28 作者:千家信息网编辑
千家信息网最后更新 2024年11月28日,一、容器编排基础1、容器编排概念可以指定各个容器中的程序是有依赖关系的比如有个web服务必须在mysql正常的情况下,才能运行,那么这个时候就是web容器是依赖mysql容器的,只有mysql容器正常
千家信息网最后更新 2024年11月28日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安全错误
数据库的锁怎样保障安全
网络安全技术专业能考什么证
丰台区服务器管理
软件开发相关内容
中国网络安全宣传周
对网络安全保障措施的思考
软件开发文档 百度云
网络安全演练计划 豆丁
软件开发大专考试科目
大型计算机系统使用的数据库是
数据库的驱动包名称
超难我的世界服务器生存
建立电子数据库的步骤
网络安全主题教育交流发言
c语言数据库识别
为什么要用数据库
软件开发怎么包装简历
网络安全性影响因素
浪潮ps11数据库
夜神服务器
徐州专业led大屏服务器
青少年网络安全素养心得体会
网络安全领域政府占比
gb标准数据库 数据结构
互联网科技数码君
关系型数据库中所谓的
网络技术的设计经典案例
防疫软件开发优惠
河南凯佳互联网科技
树莓派数据库用户名密码
苏州新宇软件开发公司.