赞
踩
docker compose将所有管理的容器分为三层,分为工程(project),服务(service)以及容器(container),docker compose运行目录下的所有文件(docker -compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。一个服务当中可包括多个容器实例,docker compose并没有解决负载均衡的问题,因此需要借助其他工具实现服务发现及负载均衡,比如consul。
创建docker-compose工程的核心在于定义配置文件,配hi在文件默认名称dokcer-compose.yml,也可以用其他名称,但需要修改环境变量COMPOSE_FILE或者启动时通过-f参数指定配置文件。配置我呢见定义了多个由依赖关系的服务以及每个服务运行的容器,docer启动一个工程主要经历如下步骤:
工程初始化-解析配置文件(包括docker-compose.yml,外包配置文件extends files,环境变量配置文件env_file),并将每个服务的配置转换成python字典,初始化docker-py客户端用于与docker engine通信。
根据docker compose的命令参数将命令分发给相应的处理函数,齐总启动命令为up;
调用project类的up函数,得到当前工程中的所有服务,并根据服务的依赖关系进行拓扑排序并去掉重复出现的服务;
通过工程名以及服务名从docker engine获取当前工程中处于运行中容器,从而确定当前工程中各个服务的状态,再根据当前状态为每个服务定制接下来的动作。docker compose使用labels标记启动的容器,使用docker inspect可以看到通过docker compose启动的容器都被添加了标记。
若容器不存在,则服务动作设置为创建(create);
若容器存在但设置不允许重建,则服务动作设置为启动(start);
若容器配置发送变化(config-hash)或者设置强制重建标记,则服务动作设置为重建(recreate);
若容器状态为停止,则服务动作设置为启动(start);
若容器状态为运行但依赖容器需要重建,则服务状态设置为重建(recreate);
若容器状态为运行其无配置改变则不做操作;
根据每个服务不同的动作执行不同的操作;
根据拓扑排序的次序,依次执行每个服务的动作。如果服务动作为创建:
如果服务动作为重建:
如果服务动作为启动则启动停止的容器。
YAML是一个可读性高,易于理解,用来表达数据序列化的格式。它的语法和其他高级语言类似,并且可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数 据结构、各种配置文件等。
YAML的配置文件后缀为.yml。
(1)用于全局的配置文件 ( ini / yaml ):环境,数据库信息,账号信息,日志格式,报告名称。
(2)用于接口自动化里面的多一些复杂的多接口串联。
(3)用于编写接口测试用例
在运维这里主要是用于全局的配置文件。
对象: 键值对的字典 animal: pets 数组: 一组按次序排列的列表 - cat - dog - goldfish 布尔值 debug: "true" debug: "false" #Yaml示例 languages: #序列的映射 - Java - Golang - Python websites: #映射的映射 Baidu: www.baidu.com Wangyi: www.163.com Souhu: www.souhu.com #或者 languages: ["Java","Golong","Python"] websites: Baidu: www.baidu.com Wangyi: www.163.com Souhu: www.souhu.com #Json格式 { languages: [ 'Java', 'Golong', 'Python', ], websites: [ Baidu: 'www.baidu.com', Wangyi: 'www.163.com', Souhu: 'www.souhu.com', ] }
字段 | 描述 |
---|---|
build | 指定Dockerfile文件名(要指定的Dockerfile文件需要在build标签的子级标签中用dockerfile标签指定) |
dockerfile | 构建镜像上下文路径 |
context | 可以是dockerfile路径,或者是执行git 仓库的url地址 |
image | 指定镜像(已存在) |
command | 执行命令,会覆盖容器启动后默认执行的命令(会覆盖Dockerfile的CMD指令) |
container_name | 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale指定容器数量 |
deploy | 指定部署和运行服务相关配置,只能在Swarm模式使用 |
environment | 添加环境变量 |
container_name | 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale指定容器数量 |
deploy | 指定部署和运行服务相关配置,只能在Swarm模式使用 |
environment | 添加环境变量 |
volumes | 挂载一个宿主机目录或命令卷到容器,命名卷要在顶级volumes 定义卷名称 |
volumes_from | 从另一个服务或容器挂载卷,可选参数 :ro 和 :rw,(仅版本‘2’支持) |
hostname | hostname |
hostname | 在容器内设置内核参数 |
links | 连接到另一个容器,- 服务名称[ : ] |
privileged | 用来给容器root权限,注意是不安全的,true |
restart | 重启策略,定义是否重启容器;1.no,默认策略,在容器退出时不重启容器。2.on-failure,在容器非正常退出时(退出状态非0),才会重启容器。3.on-failure:3,在容器非正常退出时重启容器,最多重启3次。4.always,在容器退出时总是重启容器。5.unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器。 |
depends_on | 此标签用于解决容器的依赖,启动先后问题。如启动应用容器,需要先启动数据库容器php:depends_on:- apache- mysql |
字段 | 描述 |
---|---|
build | 重新构建服务 |
ps | 列出容器 |
up | 创建和启动容器 |
exec | 在容器里面执行命令 |
scale | 指定一个服务容器启动数量 |
top | 显示正在运行的容器进程 |
logs | 查看服务容器的输出 |
down | 删除容器、网络、数据卷和镜像 |
stop/start/restart | 停止/启动/重启服务 |
Docker-Compose 是 Docker 的独立产品,因此需要安装 Docker 之后在单独安装 Docker Compose。
//安装docker compose工具
yum install docker-ce -y
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
cp -p docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose
yum install -y tree
第一步:编辑nginx的dockerfile
cd /opt/docker mkdir compose-nginx cd compose-nginx mkdir nginx cd nginx ==拖入安装包nginx-1.12.2.tar.gz== vim Dockerfile FROM centos:7 MAINTAINER this is nginx images by shimeng RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make RUN useradd -M -s /sbin/nologin nginx ADD nginx-1.12.2.tar.gz /usr/local WORKDIR /usr/local/nginx-1.12.2 RUN ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_stub_status_module && make && make install RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf RUN echo -e "#!/bin/bash \n /usr/local/nginx/sbin/nginx" > /run.sh RUN chmod +x /run.sh EXPOSE 80 CMD ["/run.sh"]
//第二步,编写docker-compose.yml文件 version: '3' services: nginx: container_name: web1 hostname: nginx build: context: ./nginx dockerfile: Dockerfile ports: - 1998:80 networks: lnmp: ipv4_address: 172.18.0.80 volumes: - ./wwwroot:/usr/local/nginx/html networks: lnmp: driver: bridge ipam: config: - subnet: 172.18.0.0/16 //启动docker compose管理 docker-compose -f docker-compose.yml up -d //查看容器和compose docker ps docker-compose ps
mkdir /opt/docker/compose-nginx/tomcat ==拖入安装包apache-tomcat-9.0.16.tar.gz、jdk-8u201-linux-x64.rpm== vim Dockerfile FROM centos:7 as build //这里的build表示如果centos:7镜像不存在则进行新建该进行(pull获取) MAINTAINER create this is image by shimeng ADD jdk-8u201-linux-x64.rpm /usr/local WORKDIR /usr/local/ RUN rpm -ivh jdk-8u201-linux-x64.rpm ENV JAVA_HOME=/usr/java/jdk1.8.0_201-amd64 ENV CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar ENV PATH=$JAVA_HOME/bin:$PATH ADD apache-tomcat-9.0.16.tar.gz /usr/local/ WORKDIR /usr/local/ RUN mv apache-tomcat-9.0.16 /usr/local/tomcat EXPOSE 8080 CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
//编写docker-compose.yml文件 version: '3' services: nginx: container_name: web1 hostname: nginx build: context: ./nginx dockerfile: Dockerfile ports: - 1998:80 networks: lnmp: ipv4_address: 172.18.0.80 volumes: - ./wwwroot:/usr/local/nginx/html tomcat: container_name: web2 hostname: tomcat build: context: ./tomcat dockerfile: Dockerfile ports: - 1999:8080 networks: lnmp: ipv4_address: 172.18.0.88 networks: lnmp: driver: bridge ipam: config: - subnet: 172.18.0.0/16 //启动docker compose管理 docker-compose -f docker-compose.yml up -d //查看容器和compose docker ps docker-compose ps docker-compse top
ubnet: 172.18.0.0/16
//启动docker compose管理
docker-compose -f docker-compose.yml up -d
//查看容器和compose
docker ps
docker-compose ps
docker-compse top
[外链图片转存中...(img-yZOlGePn-1663501670502)]
[外链图片转存中...(img-6Kwmkuan-1663501670502)]
[外链图片转存中...(img-SRqUY6Eg-1663501670503)]
[外链图片转存中...(img-EG7v0FZc-1663501670503)]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。