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就可以直接通讯。

在这里插入图片描述
重新打包把项目传到自己的服务器上。
在这里插入图片描述

编写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地址换成自己服务器的地址,端口号改成自己服务器的端口号。
在这里插入图片描述
能成功进到swagger而且能添加数据和查询数据就说明该项目成功部署。

七、总结

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力发光的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值