20.docker之DockerCompose基础进阶

导读:本篇文章讲解 20.docker之DockerCompose基础进阶,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1.docker-compose命令模板

docker-compose.yml 作用:
compose以项目为核心,在项目中定义一组具有相同业务逻辑单元服务运行
注意:在编写docker-compose.yml文件时,所有的冒号(:)、短横线(-)后面都需要加一个空格,不然会出错。

version: '3'

services: #用来书写当前项目中哪些容器服务
  tomcatservice: #服务名称 (服务id)
    container_name: mytomcat #指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式 类似--name
    image: tomcat:8.0-jre8 #使用哪一个镜像 类似image:tag
    posts: #用来完成宿主机与容器内部端口映射关系(可以映射多个) 类似-p
      - "8080:8080" #宿主机端口:容器内部端口 
      - "5672:5672" #宿主机端口:容器内部端口
    volumes: #完成宿主机与容器中目录数据卷共享  类似-v
    # - /root/apps:/user/local/tomcat/webapps #使用自定义路径映射(直接使用)
      - tomcatwebapps:/user/local/tomcat/webapps #需要使用外部声明tomcatwebapps
    networks: #代表当前 服务使用哪个网桥 类似--network
      - mynetwork
    #environment: #用来指定容器启动时的环境参数
     # - MYSQL_ROOT_PASSWORD=ROOT
    env_file: #用来将environment环境中配置放入指定配置文件中
      - ./mysql.env #从mysql.env配置文件获取environment级别配置
    depends_on: #代表这个容器必须依赖哪些容器启动后才能启动
      - tomcatservice1 #依赖容器的服务名
      - mysql
      - redis
    healthcheck:
      test: ["CMD","curl","-f","http://localhost"]
      interval: 1m30s #每90秒发送心跳
      timeout: 10s #超时10秒算作心跳检查失败
      retries: 3 #失败重试3次

  tomcatservice1: #服务名称
    container_name: mytomcat1 #指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式
    image: tomcat:8.0-jre8 #使用哪一个镜像
    posts: #用来完成宿主机与容器内部端口映射关系(可以映射多个)
      - "8081:8080" #宿主机端口:容器内部端口
      - "5673:5672" #宿主机端口:容器内部端口
    volumes: #完成宿主机与容器中目录数据卷共享
    # - /root/apps:/user/local/tomcat/webapps #使用自定义路径映射(直接使用)
      - tomcatwebapps1:/user/local/tomcat/webapps #需要使用外部声明tomcatwebapps
    networks: #代表当前 服务使用哪个网桥
      - mynetwork
    cmd: redis-service /... #用来覆盖容器默认启动的指令 类似

volumes: #声明上面 服务所使用的自动创建的卷名     
  tomcatwebapps1: 
  tomcatwebapps: #声明指定的卷名 compose自动创建 卷名。但是会在之前加入项目名(存放docker-compose.yml的目录名)
  	external: #使用自定义卷名
  		true #true确定使用指定卷名 注意:一旦使用外部自定义卷名,使用服务之前需手动创建卷名 (docker volume create volume_name),此处一般选择false关闭自定义卷名

networks: #定义服务用到的网桥
  mynetwork: #定义上面的服务用到的网桥 默认创建就是bridge
    external: #使用自定义网桥名
  		true #使用服务之前需手动创建卷名 (docker network create -d bridge hellonet)

 

1.env_file

从文件中获取环境变量,可以为单独的文件路径或列表
创建一个.env结尾的文件。
文件内部格式为 key=value
eg:在docker-compose的同级路径,创建mysql.env

MYSQL_ROOT_PASSWORD=ROOT

2.depends_on

代表这个容器必须依赖哪些容器启动后才能启动,后面的配置参数的容器的服务名。web服务不会等待依赖的服务完全启动之后,才会启动。

3.healthcheck

通过命令检查容器是否健康运行。

   healthcheck:
      test: ["CMD","curl","-f","http://localhost"]
      interval: 1m30s #每90秒发送心跳
      timeout: 10s #超时10秒算作心跳检查失败
      retries: 3 #失败重试3次

4.sysctls

配置容器内核参数
sysctls:

  • net.core.somaxconn=1024
  • net.ipv4.tcp_syncookies=0

5.ulimits

指定容器的ulimits限制值 ,用来修改容器中系统内部进程数限制

ulimits:
    noroc: 65535
    nofile:
        soft: 20000
        hard: 40000

在这里插入图片描述

6.build指令

将制定的Dockerfile打包成对应的镜像,然后再运行该镜像

services:
	demoapp: #服务名(即服务id)
		build: #用来指定Dockerfile所在目录,先根据build中dockerfile自动构建镜像,自动运行容器
			context: domopp #指定上下文目录dockerfile所在目录
			dockerfile: Dockerfile #指定dockerfile名称
		container_name: demoapp#指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式 类似--name
        posts: #用来完成宿主机与容器内部端口映射关系(可以映射多个) 类似-p
          - "8080:8080" #宿主机端口:容器内部端口 
          - "5672:5672" #宿主机端口:容器内部端口
		networks:
		  - mynet
		depends_on:
		  - tomcat01  #依赖容器的服务名
		

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/65765.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!