Docker Compose基础与实战

一、是什么

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

二、能做什么

  • Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
  • 可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建。Docker-Compose 解决了容器与容器之间如何管理编排的问题。

三、安装

  1. 现在Docker Compose。

    curl -SL https://github.com/docker/compose/releases/download/v2.19.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
    
  2. 赋权限。

    chmod +x /usr/local/bin/docker-compose
    
  3. 测试。

    docker-compose --version
    

四、核心概念

服务:一个个应用容器实例,也就是说我们要用到的所有容器

工程:由一组关联的应用容器组成的一个完整的业务单元,在docker-compose.yml文件中定义。

五、常用命令

命令 作用
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 logs yml里面的服务id 查看容器输出日志
docker-compose config 检查配置
docker-compose config -q 检查配置,有问题才有输出
docker-compose restart 重启服务
docker-compose start 启动服务
docker-compose stop 停止服务

六、使用

使用过程主要分为三个步骤

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

下面我将用一个小案列来加深理解

项目下载地址: https://www.aliyundrive.com/s/9djHR3Hj3H1

完成该项目的前提是要拥有Java8,mysql,redis的镜像,mysql的版本是5.7,redis的版本是6.0.8。

项目修改

修改配置,我们自己使用自己创建的docker网络可以实现配置文件不需要写IP就可以直接通讯。

Docker Compose基础与实战_第1张图片
重新打包把项目传到自己的服务器上。
Docker Compose基础与实战_第2张图片

编写Dockerfile

# 基础镜像使用java

FROM java:8

# 作者

MAINTAINER sveinn

# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp

VOLUME /tmp

# 将jar包添加到容器中并更名为zzyy_docker.jar

ADD docker_boot-0.0.1-SNAPSHOT.jar sveinn_docker.jar

# 运行jar包

RUN bash -c 'touch /svienn_docker.jar'

ENTRYPOINT ["java","-jar","/sveinn_docker.jar"]

#暴露6001端口作为微服务

EXPOSE 6001

编写docker-compose.yml文件

version: "3"

 

services:

  microService:

    image: sveinn_docker:1.6

    container_name: ms01

    ports:

      - "6001:6001"

    volumes:

      - /app/microService:/data

    networks: 

      - my_net 

    depends_on: 

      - redis

      - mysql

 

  redis:

    image: redis:6.0.8

    container_name: redis68

    ports:

      - "6379:6379"

    volumes:

      - /app/redis/redis.conf:/etc/redis/redis.conf

      - /app/redis/data:/data

    networks: 

      - my_net

    command: redis-server /etc/redis/redis.conf

 

  mysql:

    image: mysql:5.7

    container_name: mybatis57

    environment:

      MYSQL_ROOT_PASSWORD: 'root'

      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'

      MYSQL_DATABASE: 'docker_boot'

      MYSQL_USER: 'sveinn'

       

       - "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:

      - my_net

    command: --default-authentication-plugin=mysql_native_password #解决外部无法访问

 

networks: 

   my_net: 

部署服务

构建镜像

docker build -t svein_docker:1.6 .

执行命令一键部署

docker-compose up -d

数据处理

进入mysql容器构建数据

docker exec -it mysql57 /bin/bash

创建数据库和表,我是直接在mysql直接执行sql语句也可以执行直接执行sql脚本。

 mysql -uroot -p
 create database boot_docker;
 use boot_docker;
CREATE TABLE `t_user` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '用户名',
  `password` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '密码',
  `sex` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '性别 0=女 1=男 ',
  `deleted` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0' COMMENT '删除标志,默认0不删除,1删除',
  `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

测试

访问swagger地址http://服务器地址:服务端口号/swagger-ui.html#/,注意把swagger地址换成自己服务器的地址,端口号改成自己服务器的端口号。
Docker Compose基础与实战_第3张图片
能成功进到swagger而且能添加数据和查询数据就说明该项目成功部署。

七、总结

本文介绍了用docker-compose解决了用docker部署的要多次构建容器的痛点,解决方式就是在docker-compose文件定义好项目所需要的容器和一些配置。直接用一个命令就可以构建多个容器,实现对Docker 容器集群的快速编排。介绍了一些简单的命令以及如何安装docker-compose,同时还用一个简单的部署实例来加深对docker-compose的使用。

你可能感兴趣的:(docker,eureka,容器)