Docker-compose是docker的服务编排工具,主要是用来构建多个服务,一般是构建构建多个有关联的服务,比如要部署一个Spingboot项目,那么一般都需要关系型数据库,有可能还需要NOSQL,比如redis;如果利用dockerfile来构建,就需要编写三个dockerfile,构建镜像,运行容器;但是使用docker-compose,就可以将这三个服务都包含在一个docker-compose.yml文件中,最后使用命令:docker-compose up 命令 就可以构建一整套完整的服务体系。

首先在自己的机器上安装docker-compose 工具,安装教程网上一搜一大把,这里就不详细说了;因为作者也记不住;

安装好docker-compose之后,就可以编写docker-compose文件了,下面先贴出楼主最近写的一个包含了springboot项目和mysql服务;

version : '2'
services:
  mysqldbserver:
    container_name: mysqldbserver
    build:
      context: .
      dockerfile: mysqldb-dockerfile
    environment:
      - "MYSQL_ROOT_PASSWORD=root"
      - "MYSQL_DATABASE=testdb"
      - "MYSQL_ROOT_HOST=%"
    ports:
      - "3307:3307"
    networks:
      - net-spring-db
    command: [
          'mysqld',
          '--innodb-buffer-pool-size=20M',
          '--character-set-server=utf8',
          '--collation-server=utf8_general_ci',
          '--default-time-zone=+8:00',
          '--lower-case-table-names=1'
        ]
  springappserver:
    container_name: springappserver
    build:
      context: .
      dockerfile: springapp-dockerfile
    ports:
      - "8080:8080"
    networks:
      - net-spring-db
    volumes:
      - /vol/development
    depends_on:
      - mysqldbserver
    links:
      - mysqldbserver

networks:
  net-spring-db:
    driver: bridge

version:指定版本号;

services:就是要构建的镜像名称,在上面的docker-compose.yml中,就是Mysqldbserver和springappserver

container_name:就是运行的服务名称

build:可以指定基础镜像,也可以指定dockerfile,还可以指定dockerfile所在的目录

上面就指定了两个dockerfile,Mysqldb-dockerfile和springapp-dockerfile,我们来看看他们的内容:

mysqldb-dockerfile:

FROM mysql:5.7.17

MAINTAINER xxx xx@xxxxxx.com

ADD init.sql /docker-entrypoint-initdb.d/

指定了基础镜像,指定了作者,还copy了mysql初始化脚本文件到容器内,

springapp-dockerfile:

FROM java:8-jre

MAINTAINER qiuhao hqiu@thoughtworks.com

VOLUME /vol/development

RUN mkdir -p /vol/development

WORKDIR /vol/development

COPY build/libs/*.jar /vol/development/app.jar

CMD ["java", "-Xmx200m", "-Djava.security.egd=file:/dev/./urandom","-jar","/vol/development/app.jar"]

指定了基础镜像,挂载了目录,指定了工作目录,还有容器启动时要运行的命令;

 

environment:环境变量,上面的Mysql就指定了root密码和初始化数据库;这是一个数组,用 '-'来分割

ports:映射端口;

networks:加入指定的网络模式

links:链接到其他服务中的容器,上面的springboot就要链接到mysql

depends-on:此选项用来解决启动顺序的问题,因为很多服务之间有依赖关系,有启动先后顺序,就上面的文件来,mysql是要先于springboot项目启动的,此标签解决了启动顺序的依赖问题;

command:覆盖容器启动后默认执行的指令;

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐