Docker-compose的理解
Docker-compose是docker的服务编排工具,主要是用来构建多个服务,一般是构建构建多个有关联的服务,比如要部署一个Spingboot项目,那么一般都需要关系型数据库,有可能还需要NOSQL,比如redis;如果利用dockerfile来构建,就需要编写三个dockerfile,构建镜像,运行容器;但是使用docker-compose,就可以将这三个服务都包含在一个docker-com
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:覆盖容器启动后默认执行的指令;
更多推荐
所有评论(0)