ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

docker-compose编排实战

2021-06-26 14:05:17  阅读:143  来源: 互联网

标签:compose app 192.168 nginx 编排 模块 docker


文章目录


前言

项目中如果使用到了容器,那么合理的编排手段是必不可少的!


一、概览

在使用docker-compose过程中,我们想要有什么样的功能及效果呢?
对于我来说它最好能够:

  1. 同一个服务器中可能存在多个不同的项目,所以我需要能够关联nginx以便我可以进行反代操作
  2. 能够顺序启动不同的模块,db模块,队列模块等
  3. 能够在运行docker-compose的时候就指定参数,如数据库的登录
  4. 能够让容器中的数据库等存储直接使用Host主机中的存储目录

二、docker-compose文件介绍

docker-compose是yml类型的文件,所以在编写该文件的时候需遵守yml格式语法。
docker-compose.yml第一行是版本号:

version: '3.8'  

该版本号表示该yml文件语法版本。

version底下则是我们需要编排的模块列表:services.

services下面一般还有个自定义的网络networks.

为了更好的解释直接贴上完整实例:

version: '3.8'

services:
 //模块的名字,一般这个名字用来在services中交互,如底下deepends_on中的名称
  mytestWeb: 
    image: ubuntu:latest //该模块对应的镜像
    container_name: mytestWebContainer //指定容器的名称,可以使用docker ps查看
    volumes: //存储卷,指定容器中/app目录下对应宿主机中的/work/mytest目录
      - /work/mytest:/app
    working_dir: /app //在容器中定位到/app目录
    //使用command在容器中执行命令,底下的命令是执行输出/app目录下的所有文件,并将/app目录下的app文件设为可执行,并执行该文件
    command: sh -c "ls -l &&  chmod 0700 ./app && ./app"
	//暴露端口号,一般我们使用nginx反代时,只需要使用expose声明暴露该端口就好,不要底下
	//ports映射端口,nginx直接listen 80就好了。
    expose:
      - "80"
    ports:
      - 8080:8899
    depends_on: //depends_on表明底下的mytestMongodb模块运行起来后,才开始运行本模块
      - mytestMongoDB
    networks: //使用networks自定义网络
      testcompose: //自定义的网络名称,该名称需要在底下networks模块中定义,否则报错
        //固定当前模块ipv4地址,这种情况下,我们可以使用
        //localhost:8080,192.168.2.6:8899直接访问到本容器
        //如果我们使用了nginx监听了80端口,并且监听本容器Ip proxy_pass = 
        //http://192.168.2.6:8899/,(8899是项目中监听的端口)注意本地测试需要
        //在/etc/hosts中加入域名,域名不能是ip(127.0.0.1除外)
        ipv4_address: 192.168.2.6 

  mytestMongoDB:
    image: mongo:latest
    container_name: mytestMongoContainer
    environment: //该属性可以在第一次启动该容器的时候创建一个作用在admin数据库中的root用户
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: 123
    networks:
      testcompose:
        ipv4_address: 192.168.2.7 //数据库对应的固定ip
        
networks: //该层级的networkds定义网络名称
  testcompose: //自定义的网络名称
    ipam: //固定语法
      config: //固定语法(config对应的是数组,所以底下需要至少两个属性)
        - subnet: 192.168.2.0/24 //网络号段
          gateway: 192.168.2.1 //网关ip

2.nginx配置

顺便展示下,Nginx代理docker固定域名的写法:

server {
    listen 80;
    server_name a.pjsong.top;
    access_log /var/log/nginx/composetest-access.log;
    error_log /var/log/nginx/composetest-error.log;
    
    location / {
        proxy_pass http://192.168.2.6:8899/;
    }
}

这样当监听到a.pjsong.top的时候将代理到192.168.2.6:8899这个ip加端口上面,注意本地测试的时候,server_name不要写已经被解析的域名,不然会直接被公网dns解析。

总结

docker-compose除了直接拉取镜像之外,也可以通过dockerfile来拉取构建,看个人所需,简单的直接doker-compose拉取就好了。

标签:compose,app,192.168,nginx,编排,模块,docker
来源: https://blog.csdn.net/a765717/article/details/118245135

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有