利用docker搭建一个mysql + java service + nginx,总共4个docker容器,如果采用docker run的方式一个一个容器去创建十分麻烦。为了能更高效的批量创建容器,docker推出了docker-compose工具,只需要定义一个docker-compose.yml文件即可快速搞定一组容器的创建.
docker-compose.yml文件格式如下:
mysql:
 image: daocloud.io/yjmyzz/mysql-osx:latest
 volumes:
   - ./mysql/db:/var/lib/mysql
 ports:
   - 3306:3306
 environment:
   - MYSQL_ROOT_PASSWORD=123456
  
service1:
 image: java:latest
 volumes:
   - ./java:/opt/app
 expose:
   - 8080
 #ports:
 #  - 9081:8080
 links:
   - mysql:default
 command: java -jar /opt/app/spring-boot-rest-framework-1.0.0.jar
  
service2:
 image: java:latest
 volumes:
   - ./java:/opt/app
 expose:
   - 8080
 #ports:
 #  - 9082:8080
 links:
   - mysql:default
 command: java -jar /opt/app/spring-boot-rest-framework-1.0.0.jar
  
nginx1:
  image: nginx:latest
  volumes:
   - ./nginx/html:/usr/share/nginx/html:ro
   - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
   - ./nginx/conf.d:/etc/nginx/conf.d:ro
  #expose:
  #  - 80
  ports:
   - "80:80"
  links:
   - service1:service1
   - service2:service2
每一个定义在docker-compose.yml中的服务必须明确指定一个image或者build选项,这与docker run命令行中输入的是对应相同的,对于docker run,在Dockerfile文件中指定的选项(比如CMD、EXPOSE、VOLUME、ENV)是默认的,因此不必在docker-compose.yml中再指定一次
image 
标明image的ID,这个image ID可以是本地也可以是远程的,如果本地不存在,Compose会尝试去pull下来
image: ubuntu image: orchardup/postgresql image: a4bc65fd
build 
该参数指定Dockerfile文件的路径,该目录也是发送到守护进程的构建环境(这句有点),Compose将会以一个已存在的名称进行构建并标记,并随后使用这个image
build: /path/to/build/dir
command 
重写默认的命令
command: bundle exec thin -p 3000
links 
连接到其他服务中的容器,可以指定服务名称和这个链接的别名,或者只指定服务名称
links: - db - db:database - redis
此时,在容器内部,会在/etc/hosts文件中用别名创建一个条目,就像这样:
172.17.2.186 db 172.17.2.186 database 172.17.2.186 redis
环境变量也会被创建,关于环境变量的参数,会在后面讲到
external_links 
连接到在这个docker-compose.yml文件或者Compose外部启动的容器,特别是对于提供共享和公共服务的容器。在指定容器名称和别名时,external_links遵循着和links相同的语义用法
external_links: - redis_1 - project_db_1:mysql - project_db_1:postgresql
ports 
暴露端口,指定两者的端口(主机:容器),或者只是容器的端口(主机会被随机分配一个端口)
注:当以 主机:容器 的形式来映射端口时,如果使容器的端口小于60,那可能会出现错误,因为YAML会将 xx:yy这样格式的数据解析为六十进制的数据,基于这个原因,时刻记得要将端口映射明确指定为字符串
ports: - "3000" - "8000:8000" - "49100:22" - "127.0.0.1:8001:8001"
expose 
暴露端口而不必向主机发布它们,而只是会向链接的服务(linked service)提供,只有内部端口可以被指定
expose: - "3000" - "8000"
volumes 
挂载路径最为卷,可以选择性的指定一个主机上的路径(主机:容器),或是一种可使用的模式(主机:容器:ro)
volumes_from: - service_name - container_name
environment 
加入环境变量,可以使用数组或者字典,只有一个key的环境变量可以在运行Compose的机器上找到对应的值,这有助于加密的或者特殊主机的值
environment: RACK_ENV: development SESSION_SECRET: environments: - RACK_ENV=development - SESSION_SECRET
env_file 
从一个文件中加入环境变量,该文件可以是一个单独的值或者一张列表,在environment中指定的环境变量将会重写这些值
env_file: - .env RACK_ENV: development
net 
网络模式,可以在docker客户端的--net参数中指定这些值
net: "bridge" net: "none" net: "container:[name or id]" net: "host"
dns 
自定义DNS服务,可以是一个单独的值或者一张列表
dns: 8.8.8.8 dns: - 8.8.8.8 - 9.9.9.9
cap_add,cap_drop 
加入或者去掉容器能力,查看man 7 capabilities 可以有一张完整的列表
cap_add: - ALL cap_drop: - NET_ADMIN - SYS_ADMIN
dns_search 
自定义DNS搜索范围,可以是单独的值或者一张列表
dns_search: example.com dns_search: - dc1.example.com - dc2.example.com
working_dir,entrypoint,user,hostname,domainname,mem_limit,privileged,restart,stdin_open,tty,cpu_shares 
上述的每一个都只是一个单独的值,和docker run中对应的参数是一样的
cpu_shares: 73working_dir: /codeentrypoint: /code/entrypoint.shuser: postgresqlhostname: foodomainname: foo.commem_limit: 1000000000privileged: truerestart: alwaysstdin_open: truetty: true
****************************************************************************************
好,终于把yml文件中的一些参数进行了说明,下面根据个人理解来说一下docker-compose build、docker-compose up、以及gradle构建的项目下 ./gradlew clean build 三者之间的关系。
./gradlew clean build是基于gradle构建项目时的打包指令,会将所有的文件打成一个项目名命名的jar包。
docker-compose build是基于docker compose的指令,在Dockerfile文件基础上会将项目打成一个app.jar并将jar包制作成镜像,并且结合yml文件可以批量build。
docker-compose up 是基于docker和yml文件的一种批量启动方式,与其相对应的单个docker image启动方式是 docker run 方式,这种方式要设定参数配置IP 端口号 image名称,当项目包含多个docker时会十分繁琐。
镜像除了可以build出来也可以从远端pull,使用docker pull image名的方式把镜像pull下来之后可以直接使用docker run 将其运行。

docker-compose build、gradlew build、docker-compose up的个人理解相关推荐

  1. 从零开始学习docker(十一)介绍Docker Compose yml文件介绍

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 如果我们有一个App,他由多个container组成,那么这个App的维护会非常繁琐. 包括: 要从Docker ...

  2. Docker小白到实战之Docker Compose在手,一键足矣

    前言 Docker可以将应用程序及环境很方便的以容器的形式启动,但当应用程序依赖的服务比较多,或是遇到一个大系统拆分的服务很多时,如果还一个一个的根据镜像启动容器,那就有点累人了,到这有很多小伙伴会说 ...

  3. Docker容器虚拟化技术---Docker运维管理(Docker Compose)4

    Docker容器虚拟化技术-Docker运维管理(Docker Compose)4 Docker Compose 通过前面的讲解我们知道使用一个Dockerfile模板文件,可以很方便地定义一个单独的 ...

  4. Docker进阶(3)docker容器编排-docker compose、swarm、service

    Docker进阶(3)docker容器编排 Docker进阶(3)docker容器编排 1. 容器编排 2. docker compose 2.1 安装 2.2 官方文档创建一个简单的web应用 2. ...

  5. Docker 学习笔记 - 进阶四 Docker网络和 Docker compose

    Docker 学习笔记 - 进阶四 Docker网络和 Docker compose 4. docker 网络 4.1 docker network是什么 4.1.1 docker不启动,默认网络情况 ...

  6. docker build -t_在Docker环境构建、打包和运行Spring Boot应用

    为何考虑采用Docker? Docker是提供用户构建镜像的一种容器化技术,所构建的镜像包含了主要的应用程序和运行应用所需的所有依赖项.该镜像可在任何虚拟机或物理机器上的Docker容器上运行.它的强 ...

  7. Docker 深入篇之 Build 原理

    使用 Docker 时,最常用的命令无非是 docker container 和 docker image 相关的子命令,当然最初没有管理类命令(或者说分组)的时候,最常使用的命令也无非是 docke ...

  8. 手动build unity3d的docker镜像

    手动build unity3d的docker镜像 参考资料 docker官方文档:Docker Documentation | Docker Documentation unity3d linux版的 ...

  9. Dokcer14_5:Docker Compose volumes解析、Docker Compose volumes目录路径生成规则

    Dokcer14_5:Docker Compose volumes解析.Docker Compose volumes目录路径生成规则 docker-compose volumes语法 语法格式及其三种 ...

  10. jenkins docker 自动部署 构建_jenkins+docker+vue项目的自动部署环境

    亮点 采用shell自定义脚本,控制集成部署环境更加方便灵活 如果服务器更换,重新部署的工作量会比较小 准备工作 首先我们得有一台服务器.我这里用的是阿里云ECS,华东节点.具体的购买操作的话百度会有 ...

最新文章

  1. leetcode算法题--新21点★
  2. 常见的天气现象有哪些
  3. postmessage 游戏窗口内无效_前端的微前端在交通项目内的应用实践
  4. Yann LeCun, Geoffrey E. Hinton, and Yoshua Bengio
  5. 怎么查看linux网关,如何查看linux服务器网关
  6. c语言数组的使用步骤,C语言中为什么要使用数组?详细图解数组的使用
  7. flask 自定义错误页面
  8. dockerfile 创建Jenkins镜像
  9. html鼠标拖尾效果,JS实现鼠标移动拖尾
  10. 每日算法系列【LeetCode 495】提莫攻击
  11. 一次性下载CVPR2016的所有文章
  12. xp 计算机桌面图标不见,萝卜XP系统桌面图标全部消失了如何解决
  13. Adobe产品序列号
  14. 目前流行的前端UI框架
  15. 一个网游盗号木马的汇编源码分析
  16. 网络游戏外挂编写初级教程
  17. 《自顶向下计算机网络》其二 Application Layer
  18. Pytorch官方文档英语翻译
  19. 三网融合触发MeeGo风暴
  20. 商场智慧消防栓远程监测项目

热门文章

  1. SIGAR - System Information Gatherer And Reporter
  2. 最新河南电信、网通(联通)、铁通DNS地址ip
  3. 深圳地铁五号线联网监控!
  4. linux中批量删除用户,Linux shell批量删除用户
  5. 基于脉振高频电压信号注入法的PMSM无位置传感器控制原理和仿真
  6. 小米手机安装欧洲版系统(MIUI12) 详细安装教程
  7. idea remote debug
  8. 全球与中国SS-OCT激光市场深度研究分析报告
  9. 微型计算机主要性能指标是什么,微型计算机的主要性能指标
  10. EXCEL表格-输入身份证号无法正常展示问题详解