文章目录

  • 前言
  • 一、概览
  • 二、docker-compose文件介绍
  • 为了更好的解释直接贴上完整实例:
  • 2.nginx配置
  • 总结



前言

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


一、概览

在使用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拉取就好了。