Docker Compose是一个用于定义和运行多个docker容器应用的工具。使用Compose你可以用YAML文件来配置你的应用服务,然后使用一个命令,你就可以部署你配置的所有服务了。

安装

下载Docker Compose

  1. curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

修改该文件的权限为可执行

  1. chmod +x /usr/local/bin/docker-compose

查看是否已经安装成功

  1. docker-compose --version

Docker Compose 部署SpringBoot应用 - 图1

使用Docker Compose的步骤

  • 使用Dockerfile定义应用程序环境,一般需要修改初始镜像行为时才需要使用;
  • 使用docker-compose.yml定义需要部署的应用程序服务,以便执行脚本一次性部署;
  • 使用docker-compose up命令将所有应用服务一次性部署起来。

    docker-compose.yml常用命令

    image

    指定运行的镜像名称
    1. # 运行的是mysql5.7的镜像
    2. image: mysql:5.7

    container_name

    配置容器名称
    1. # 容器名称为mysql
    2. container_name: mysql

    ports

    指定宿主机和容器的端口映射(HOST:CONTAINER)
    1. # 将宿主机的3306端口映射到容器的3306端口
    2. ports:
    3. - 3306:3306

    volumes

    将宿主机的文件或目录挂载到容器中(HOST:CONTAINER)
    1. # 将外部文件挂载到myql容器中
    2. volumes:
    3. - /mydata/mysql/log:/var/log/mysql
    4. - /mydata/mysql/data:/var/lib/mysql
    5. - /mydata/mysql/conf:/etc/mysql

    environment

    配置环境变量
    1. # 设置mysqlroot帐号密码的环境变量
    2. environment:
    3. - MYSQL_ROOT_PASSWORD=root

    links

    连接其他容器的服务(SERVICE:ALIAS)
    1. # 可以以database为域名访问服务名称为db的容器
    2. links:
    3. - db:database

    Docker Compose常用命令

    构建、创建、启动相关容器

    1. # -d表示在后台运行
    2. docker-compose up -d

    指定文件启动

    1. docker-compose -f docker-compose.yml up -d
    2. # 只使用一次,创建容器

    停止所有相关容器

    1. docker-compose stop
    2. # 如果上面指定了不一样的yml文件,那这里的要yml目录下执行 docker-compose -f docker-compose-env.yml stop

    列出所有容器信息

    1. docker-compose ps
    2. # 同样的指定文件行 docker-compose -f docker-compose-env.yml ps

运行已有的compose的容器

  1. docker-compose start
  2. # 同样的指定文件 docker-compose -f docker-compose-env.yml start

删除所有的compose容器

  1. docker-compose down
  2. # 会直接删除配置文件中的所有容器, 同样的指定文件 docker-compose -f docker-compose-env.yml down

删除容器后创建不存在的容器

  1. docker-compose -f docker-compose-env.yml up --no-recreate -d

使用Docker Compose 部署应用

编写docker-compose.yml文件

Docker Compose将所管理的容器分为三层,工程、服务及容器。docker-compose.yml中定义所有服务组成了一个工程,services节点下即为服务,服务之下为容器。容器与容器直之间可以以服务名称为域名进行访问,比如在mall-tiny-docker-compose服务中可以通过 jdbc:mysql://db:3306这个地址来访问db这个mysql服务。

  1. version: '3'
  2. services:
  3. # 指定服务名称
  4. db:
  5. # 指定服务使用的镜像
  6. image: mysql:5.7
  7. # 指定容器名称
  8. container_name: mysql
  9. # 指定服务运行的端口
  10. ports:
  11. - 3306:3306
  12. # 指定容器中需要挂载的文件
  13. volumes:
  14. - /mydata/mysql/log:/var/log/mysql
  15. - /mydata/mysql/data:/var/lib/mysql
  16. - /mydata/mysql/conf:/etc/mysql
  17. # 指定容器的环境变量
  18. environment:
  19. - MYSQL_ROOT_PASSWORD=root
  20. # 指定服务名称
  21. mall-tiny-docker-compose:
  22. # 指定服务使用的镜像
  23. image: mall-tiny/mall-tiny-docker-compose:0.0.1-SNAPSHOT
  24. # 指定容器名称
  25. container_name: mall-tiny-docker-compose
  26. # 指定服务运行的端口
  27. ports:
  28. - 8080:8080
  29. # 指定容器中需要挂载的文件
  30. volumes:
  31. - /etc/localtime:/etc/localtime
  32. - /mydata/app/mall-tiny-docker-compose/logs:/var/logs

注意:如果遇到mall-tiny-docker-compose服务无法连接到mysql,需要在mysql中建立mall数据库,同时导入mall.sql脚本。具体参考使用Dockerfile为SpringBoot应用构建Docker镜像中的运行mysql服务并设置部分。
Dockerfile 部署SpringBoot应用

使用maven插件构建mall-tiny-docker-compose镜像

Docker Compose 部署SpringBoot应用 - 图2
注意:构建有问题的可以参考
SpringBoot Maven 构建Docker镜像

运行Docker Compose命令启动所有服务

先将docker-compose.yml上传至Linux服务器,再在当前目录下运行如下命令:

  1. docker-compose up -d

Docker Compose 部署SpringBoot应用 - 图3
访问接口文档地址http://192.168.1.188:8080/swagger-ui.html:
Docker Compose 部署SpringBoot应用 - 图4

项目源码地址

https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-docker-compose