Docker-Compose

docker-compose是基于docker的编排工具,使容器的操作能够批量的,可视的执行,是一个管理多个容器的工具

为什么使用dockers?

比如部署一套用户微服务user-service,我们需要用到mysql、redis、nginx,注册中心nacos等等,这些相互配合才能保证服务的正常运行

如果我们不使用docker-compose,就需要使用一条条docker 命令去buil,run,那有10个服务,就要重复执行10多次,并且,mysql这些中间件,是需要先启动,才能保证部署的user-service能正常运行

所以,我们可以定义一个docker-compose.yml模板文件,来定义一组相关联的应用为一个项目,然后使用一条指安装这些应用的所有依赖来完成构建。

docker-compose就解决了容器与容器之间如何管理编排的问题

安装Docker-Compose

  • 官网:https://docs.docker.com/compose/compose-file/compose-file-v3/
  • GitHub:https://github.com/docker/compose/releases/
  • 下载最新版docker-compose
[root@cdh5 ~]# curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  • 添加可执行权限
[root@cdh5 ~]# chmod +x /usr/local/bin/docker-compose
  • 测试安装结果
[root@cdh5 ~]# docker-compose --version
docker-compose version 1.29.2, build 5becea4c

Compose 核心概念

Docker-Compose有两个核心概念

  • 服务(service):一个应用容器,即 docker 容器,比如之前所说的mysql 容器、nginx 容器
  • 项目(project):由一组关联的应用容器组成的一个完整业务单元,比如上面所讲的由 mysql、redis、nginx 容器组成的网站,docker-compose 面向项目进行管理。

Compose 和Docker 兼容性

Docker Engine 与docker-compose version 之间的有以下关系

compose文件格式版本

docker版本

3.4

17.09.0+

3.3

17.06.0+

3.2

17.04.0+

3.1

1.13.1+

3

1.13.0+

2.3

17.06.0+

2.2

1.13.0+

2.1

1.12.0+

2

1.10.0+

1

1.9.1.+

Compose基本使用

  1. 编写Dockerfile定义各个微服务应用并构建出对应的镜像文件
  2. 使用docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务。
  3. 执行docker-compose up命令来启动并运行整个应用程序,完成一键部署上线

Compose编排微服务

  • user-service微服务
  • docker 工单 编排 docker自带的编排服务_docker

  • 修改yml
server:
  port: 8801

spring:
  datasource:
    #未使用compose
    #url: jdbc:mysql://192.168.4.15:3306/dwyys?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://mysql:3306/dwyys?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    druid:
      initial-size: 3
      min-idle: 3
      max-active: 10
      max-wait: 60000
      keep-alive: true
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 300000
      validation-query: SELECT 'x' FROM DUAL
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
  redis:
    database: 0
    #未使用compose
    #host: 192.168.4.15
    host: redis
    port: 6379
    timeout: 3s
    password:
  • maven package编译,打包,上传至服务器/opt/docker目录下
  • docker 工单 编排 docker自带的编排服务_微服务_02

  • /opt/docker下编写Dockerfile
#基础镜像使用java
FROM java:8
#作者
MAINTAINER dwyys
#VOLUME 指定临时文件目录为tmp,在主机/varlibldocker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
#将jar包添加到容器中并更名为user-service_docker.jar
ADD user-service-1.0.0.jar user-service_docker.jar
#运行jar包
RUN bash -c 'touch /user-service_docker.jar'
ENTRYPOINT ["java","-jar","/user-service_docker.jar"]
#暴露6001端口作为微服务
EXPOSE 8801
  • 编写docker-compose.yml
version: "3"

services:
  microService:
    image: user-service_docker:1.0
    container_name: user-service
    ports:
      - "8801:8801"
    volumes:
      - /app/microService:/data
    networks:
      - dwyys_net
    depends_on:
      - redis
      - mysql

  redis:
    image: redis:6.0.8
    ports:
      - "16379:6379"
    volumes:
      - /app/redis/redis.conf:/etc/redis/redis.conf
      - /app/redis/data:/data
    networks:
      - dwyys_net
    command: redis-server /etc/redis/redis.conf

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: '123456'
      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
      MYSQL_DATABASE: 'dwyys'
    #  MYSQL_USER: 'root'
    #  MYSQL_PASSWORD: '123456'
    ports:
       - "3306:3306"
    volumes:
       - /app/mysql/db:/var/lib/mysql
       - /app/mysql/conf/my.cnf:/etc/my.cnf
       - /app/mysql/init:/docker-entrypoint-initdb.d
    networks:
      - dwyys_net
    command: --default-authentication-plugin=mysql_native_password #解决外部无法访问

networks:
   dwyys_net:
  • 构建镜像
[root@cdh5 docker]# docker build -t user-service_docker:1.0.0 .


[+] Building 224.6s (8/8) FINISHED                                                                                         
 => [internal] load build definition from Dockerfile                                                                  0.0s
 => => transferring dockerfile: 566B                                                                                  0.0s
 => [internal] load .dockerignore                                                                                     0.0s
 => => transferring context: 2B                                                                                       0.0s
 => [internal] load metadata for docker.io/library/java:8                                                            16.6s
 => [internal] load build context                                                                                     0.3s
 => => transferring context: 34.79MB                                                                                  0.3s
 => [1/3] FROM docker.io/library/java:8@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d     206.9s
 => => resolve docker.io/library/java:8@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d       0.0s
 => => sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d 2.00kB / 2.00kB                        0.0s
 => => sha256:76610ec20bf5892e24cebd4153c7668284aa1d1151b7c3b0c7d50c579aa5ce75 42.50MB / 42.50MB                     59.0s
 => => sha256:d23bdf5b1b1b1afce5f1d0fd33e7ed8afbc084b594b9ccf742a5b27080d8a4a8 4.73kB / 4.73kB                        0.0s
 => => sha256:5040bd2983909aa8896b9932438c3f1479d25ae837a5f6220242a264d0221f2d 51.36MB / 51.36MB                     68.4s
 => => sha256:fce5728aad85a763fe3c419db16885eb6f7a670a42824ea618414b8fb309ccde 18.54MB / 18.54MB                     23.9s
 => => sha256:60170fec2151d2108ed1420625c51138434ba4e0223d3023353d3f32ffe3cfc2 593.15kB / 593.15kB                   25.9s
 => => sha256:e98f73de8f0d2ef292f58b004d67bc6e9ee779dcfaff7ebb3964649d4787b872 214B / 214B                           26.2s
 => => sha256:11f7af24ed9cf47597dd6cf9963bb3e9109c963f0135e869a9e9b4999fdc12a3 242B / 242B                           26.5s
 => => sha256:49e2d6393f32abb1de7c9395c04c822ceb2287383d5a90998f7bd8dbfd43d48c 130.10MB / 130.10MB                  201.1s
 => => sha256:bb9cdec9c7f337940f7d872274353b66e118412cbfd433c711361bcf7922aea4 289.05kB / 289.05kB                   59.6s
 => => extracting sha256:5040bd2983909aa8896b9932438c3f1479d25ae837a5f6220242a264d0221f2d                             2.4s
 => => extracting sha256:fce5728aad85a763fe3c419db16885eb6f7a670a42824ea618414b8fb309ccde                             0.6s
 => => extracting sha256:76610ec20bf5892e24cebd4153c7668284aa1d1151b7c3b0c7d50c579aa5ce75                             2.2s
 => => extracting sha256:60170fec2151d2108ed1420625c51138434ba4e0223d3023353d3f32ffe3cfc2                             0.1s
 => => extracting sha256:e98f73de8f0d2ef292f58b004d67bc6e9ee779dcfaff7ebb3964649d4787b872                             0.0s
 => => extracting sha256:11f7af24ed9cf47597dd6cf9963bb3e9109c963f0135e869a9e9b4999fdc12a3                             0.0s
 => => extracting sha256:49e2d6393f32abb1de7c9395c04c822ceb2287383d5a90998f7bd8dbfd43d48c                             5.4s
 => => extracting sha256:bb9cdec9c7f337940f7d872274353b66e118412cbfd433c711361bcf7922aea4                             0.1s
 => [2/3] ADD user-service-1.0.0.jar user-service_docker.jar                                                          0.6s
 => [3/3] RUN bash -c 'touch /user-service_docker.jarr'                                                               0.3s
 => exporting to image                                                                                                0.2s
 => => exporting layers                                                                                               0.2s
 => => writing image sha256:3488a8ad429dc47d5a83a7b8bf2f7129ef945ab0c29abb2536dc756dc5a82c6b                          0.0s
 => => naming to docker.io/library/user-service_docker:1.0.0                                                          0.0s
[root@cdh5 docker]# docker images
REPOSITORY              TAG       IMAGE ID       CREATED          SIZE
user-service_docker     1.0.0     3488a8ad429d   30 seconds ago   678MB
  • 执行docker-compose up
[root@cdh5 docker]# docker-compose up -d
Starting docker_redis_1 ... done
Starting docker_mysql_1 ... done
Starting user-service   ... done