Docker篇(Docker Compose)

目录

一、简介

二、初识DockerCompose

三、CentOS7安装DockerCompose

[1. 下载](#1. 下载)

[2. 修改文件权限](#2. 修改文件权限)

[3. Base自动补全命令:](#3. Base自动补全命令:)

四、部署微服务集群

[1. compose文件](#1. compose文件)

[2. 修改微服务配置](#2. 修改微服务配置)

[3. 打包](#3. 打包)

[4. 拷贝jar包到部署目录](#4. 拷贝jar包到部署目录)

[5. 部署](#5. 部署)


一、简介

Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!

二、初识DockerCompose

Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。

格式如下:

复制代码
version: "3.8"
 services:
  mysql:
    image: mysql:5.7.25
    environment:
     MYSQL_ROOT_PASSWORD: 123 
    volumes:
     - "/tmp/mysql/data:/var/lib/mysql"
     - "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
  web:
    build: .
    ports:
     - "8090:8090"

上面的 Compose 文件就描述一个项目,其中包含两个容器:

  • mysql:一个基于mysql:5.7.25镜像构建的容器,并且挂载了两个目录
  • web:一个基于docker build临时构建的镜像容器,映射端口时8090

DockerCompose的详细语法参考官网:Compose file reference | Docker Docs

其实DockerCompose文件可以看做是将多个docker run命令写到一个文件,只是语法稍有差异。

三、CentOS7安装DockerCompose

1. 下载

Linux下需要通过命令下载:

复制代码
# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

如果下载速度较慢,或者下载失败,可以使用资料提供的docker-compose文件:

上传到 /usr/local/bin/ 目录也可以。

2. 修改文件权限

修改文件权限:

复制代码
# 修改权限
chmod +x /usr/local/bin/docker-compose

3. Base自动补全命令:

复制代码
# 补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

如果这里出现错误,需要修改自己的hosts文件:

复制代码
echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts

四、部署微服务集群

需求:将之前学习的cloud-demo微服务集群利用DockerCompose部署

实现思路:

1、查看资料提供的cloud-demo文件夹,里面已经编写好了docker-compose

2、修改自己的cloud-demo项目,将数据库、nacos地址都命名为docker-compose中的服务名

3、使用maven打包工具,将项目中的每个微服务都打包为app.jar

4、将打包好的app.jar拷贝到cloud-demo中的每一个对应的子目录中

5、将cloud-demo上传至虚拟机,利用 docker-compose up -d 来部署

1. compose文件

查看课前资料提供的cloud-demo文件夹,里面已经编写好了docker-compose文件,而且每个微服务都准备了一

个独立的目录:

内容如下:

复制代码
version: "3.2"

services:
  nacos:
    image: nacos/nacos-server
    environment:
      MODE: standalone
    ports:
      - "8848:8848"
  mysql:
    image: mysql:5.7.25
    environment:
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "$PWD/mysql/data:/var/lib/mysql"
      - "$PWD/mysql/conf:/etc/mysql/conf.d/"
  userservice:
    build: ./user-service
  orderservice:
    build: ./order-service
  gateway:
    build: ./gateway
    ports:
      - "10010:10010"

可以看到,其中包含5个service服务:

  • nacos:作为注册中心和配置中心
    • image: nacos/nacos-server: 基于nacos/nacos-server镜像构建
    • environment:环境变量
      • MODE: standalone:单点模式启动
    • ports:端口映射,这里暴露了8848端口
  • mysql:数据库
    • image: mysql:5.7.25:镜像版本是mysql:5.7.25
    • environment:环境变量
      • MYSQL_ROOT_PASSWORD: 123:设置数据库root账户的密码为123
    • volumes:数据卷挂载,这里挂载了mysql的data、conf目录,其中有我提前准备好的数据
  • userservice、orderservice、gateway:都是基于Dockerfile临时构建的

查看mysql目录,可以看到其中已经准备好了cloud_order、cloud_user表:

查看微服务目录,可以看到都包含Dockerfile文件:

内容如下:

复制代码
FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
ENTRYPOINT java -jar /tmp/app.jar

2. 修改微服务配置

因为微服务将来要部署为docker容器,而容器之间互联不是通过IP地址,而是通过容器名。

这里我们将order-service、user-service、gateway服务的mysql、nacos地址都修改为基于容器名的访问。

如下所示:

复制代码
spring:
  datasource:
    url: jdbc:mysql://mysql:3306/cloud_order?useSSL=false
    username: root
    password: 123
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: orderservice
  cloud:
    nacos:
      server-addr: nacos:8848 # nacos服务地址

3. 打包

接下来需要将我们的每个微服务都打包。

因为之前查看到Dockerfile中的jar包名称都是app.jar,因此我们的每个微服务都需要用这个名称。

可以通过修改pom.xml中的打包名称来实现,每个微服务都需要修改:

复制代码
<build>
  <!-- 服务打包的最终名称 -->
  <finalName>app</finalName>

  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-maven-plugin</artifactId>

    </plugin>

  </plugins>

</build>

打包后:

4. 拷贝jar包到部署目录

编译打包好的app.jar文件,需要放到Dockerfile的同级目录中。

注意:每个微服务的app.jar放到与服务名称对应的目录,别搞错了。

user-service:

order-service:

gateway:

5. 部署

最后,我们需要将文件整个cloud-demo文件夹上传到虚拟机中,理由DockerCompose部署。

上传到任意目录:

部署:

进入cloud-demo目录,然后运行下面的命令:

复制代码
docker-compose up -d
相关推荐
云飞云共享云桌面1 小时前
昆山精密机械公司8个Solidworks共用一台服务器
运维·服务器·网络·3d·自动化·制造
恒创科技HK1 小时前
中国香港服务器中常提到的双向/全程CN2是什么意思?
运维·服务器
MyCollege19991 小时前
win10使用ssh访问vmware虚拟机
linux·运维·centos
a栋栋栋5 小时前
wsl 环境下用Docker 安装多版本MySQL
mysql·docker·容器
潮落拾贝5 小时前
k8s部署kafka三节点集群
容器·kafka·kubernetes
大霞上仙5 小时前
jmeter实现两个接口的同时并发
运维·服务器·jmeter
饱饱要坚持可持续发展观6 小时前
docker 拉取本地镜像
docker
我就要用Cx3306 小时前
配置docker常见问题
运维·docker·容器
nmxiaocui6 小时前
openssl升级
linux·运维·服务器
最小的帆也能远航8 小时前
2018年下半年 系统架构设计师 综合知识
linux·运维·服务器