15.docker compose

/ 默认分类 / 没有评论 / 1400浏览

docker compose

简介

Docker-Compose 是docker官方的开源项目,负责实现对Docker容器集群的快速编排。

功能

可以管理多个Docker容器组成一个应用。你需要定义一个YAML格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后只需要一个命令就能同事启动/关闭这些容器。

docker建议我们每个容器中只运行一个服务,因为docker本身占用资源较少,所以每个服务单独分割开来最好。

如果我们需要同时部署多个服务,单独使用Dockerfile构建起来非常麻烦。所以需要借助docker-compose来进行多服务部署。

compose允许用户通过一个单独的docekr-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。

可以很容器地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖。完成构建。所以docker-compose解决了容器与容器之间的编排问题。

安装

针对macos客户端,安装了docker desktop 就自带docker compose

核心概念

一个文件,两个要素。

使用步骤

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

常用命令

命令解释
docker-compose -h查看帮助
docker-compose up启动所有docker-compose服务
docker-compose up -d启动所有docker-compose服务并且后台运行
docker-compose down停止并删除容器、网络、卷、镜像
docker-compose exec yml服务ID进入容器实例内部
docker-compose exec docker-compose.yml文件中写的服务ID /bin/bash
docker-compose ps展示当前docker-compose编排过的运行的所有容器
docker-compose top展示当前docker-compose编排过的容器进程
docker-compose log yml服务ID查看容器输出日志
docker-compose config检查配置
docker-compose config -q检查配置,有问题才输出
docker-compose restart重启服务
docker-compose start启动服务
docker-compose stop停止服务

实战案例

编写docker-compose.yml

version: '3'

services: 
 microService: 
  image: mservice:1.5.0
  container_name: ms01
  ports: 
   - "8888:8888"
  volumes:
   - /Users/huzd/docker/microService:/data
  networks:
   - docker_net
  depends_on: 
   - redis
   - mysql

 redis:
  image: redis:6.0.8
  ports:
   - "6379:6379"
  volumes:
   - /Users/huzd/docker/redis/redis.conf:/etc/redis/redis.conf
   - /Users/huzd/docker/redis/data:/data
  networks:
   - docker_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: 'cloud'
   MYSQL_USER: 'huzd'
   MYSQL_PASSWORD: '123456'
  ports: 
   - "3306:3306"
  volumes:
   - /Users/huzd/docker/mysql/db:/var/lib/mysql
   - /Users/huzd/docker/mysql/conf/my.cnf:/etc/my.cnf
   - /Users/huzd/docker/mysql/init:/docker-entrypoint-initdb.d
  networks:
   - docker_net
  command: --default-authentication-plugin=mysql_native_password

networks:
  docker_net:              
          

前置条件-建库

create table t_user
(
    id          int(10) auto_increment
        primary key,
    username    varchar(50)                         not null comment '用户名',
    password    varchar(50)                         not null comment '密码',
    sex         tinyint   default 0                 not null comment '性别 0=女 1=男',
    deleted     tinyint   default 0                 not null comment '删除标注,默认0删除 1不删除',
    update_time timestamp default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间',
    create_time timestamp default CURRENT_TIMESTAMP null comment '创建时间'
)
    charset = utf8;

前置条件-改造web应用


使用dockerfile制作镜像

➜  javaweb docker build -t mservice:1.5.0 .
[+] Building 49.8s (8/8) FINISHED                                                                                                                     
 => [internal] load build definition from Dockerfile                                                                                             0.1s
 => => transferring dockerfile: 84B                                                                                                              0.0s
 => [internal] load .dockerignore                                                                                                                0.0s
 => => transferring context: 2B                                                                                                                  0.0s
 => [internal] load metadata for docker.io/library/java:8                                                                                       15.4s
 => [internal] load build context                                                                                                               21.0s
 => => transferring context: 49.64MB                                                                                                            21.0s
 => CACHED [1/3] FROM docker.io/library/java:8@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d                           0.0s
 => [2/3] ADD docker-root-0.0.1-SNAPSHOT.jar a.jar                                                                                               1.9s
 => [3/3] RUN bash -c 'touch /a.jar'                                                                                                             5.3s
 => exporting to image                                                                                                                           4.9s
 => => exporting layers                                                                                                                          4.9s
 => => writing image sha256:59da26ab13835656560e520078c51fc3fec5c1dd9cc2e8f95d8e1e67127ea915                                                     0.0s
 => => naming to docker.io/library/mservice:1.5.0                  

运行

➜  docker-compose docker-compose up -d
Creating docker-compose_mysql_1 ... done
Creating docker-compose_redis_1 ... done
Creating ms01                   ... done
➜  docker-compose docker ps                       
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS                               NAMES
f3bada71b109   mservice:1.5.0   "java -jar /a.jar"       10 seconds ago   Up 5 seconds    0.0.0.0:8888->8888/tcp              ms01
a41466df6dc7   redis:6.0.8      "docker-entrypoint.s…"   16 seconds ago   Up 10 seconds   0.0.0.0:6379->6379/tcp              docker-compose_redis_1
50a26a89d928   mysql:5.7        "docker-entrypoint.s…"   16 seconds ago   Up 10 seconds   0.0.0.0:3306->3306/tcp, 33060/tcp   docker-compose_mysql_1