docker-compose(部署微服务+MySQL)

文章目录

  • 一、Docker-compose概述
  • 二、官方下载安装
    • 1、安装
    • 2、修改权限
    • 3、创建指向/usr/bin或路径中任何其他目录的符号链接
  • 三、国内下载安装
    • 1、安装
    • 2、授予执行权限
    • 3、指向环境变量的软链在这里插入代码片
    • 4、查看版本
  • 四、卸载
  • 五、应用案例
    • 1、定义微服务应用并构建镜像(准备springboot.jar 镜像)
      • 3)pom文件
      • 2)配置文件
      • 2)编写Dockerfile
      • 3、构建镜像
    • 2、编写docker-compose.yml 定义业务单元
    • 3、启动并运行整个应用程序(一键部署)
    • 4、进入MySQL容器,创建库,创建表
    • 5、测试接口
    • 6、停止服务


一、Docker-compose概述

官方说明文档
下载地址

docker建议我们每一个容器中只运行一个服务,因为docker容器本身占用资源极少,所以最好是将每个服务单独的分割开来但是这样我们又面临了一个问题?

如果我需要同时部署好多个服务,难道要每个服务单独写Dockerfile然后在构建镜像,构建容器,这样累都累死了,所以docker官方给我们提供了docker-compose多服务部署的工具

例如要实现一个Web微服务项目,除了Web服务容器本身,往往还需要再加上后端的数据库mysql服务容器,redis服务器,注册中心eureka,甚至还包括负载均衡容器等等。。。。。。

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

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

二、官方下载安装

1、安装

sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

2、修改权限

sudo chmod +x /usr/local/bin/docker-compose

3、创建指向/usr/bin或路径中任何其他目录的符号链接

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

三、国内下载安装

1、安装

curl -L https://get.daocloud.io/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

2、授予执行权限

sudo chmod +x /usr/local/bin/docker-compose

3、指向环境变量的软链在这里插入代码片

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

4、查看版本

docker-compose version

四、卸载

sudo rm /usr/local/bin/docker-compose

五、应用案例

1、定义微服务应用并构建镜像(准备springboot.jar 镜像)

3)pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>sk-springcloudalibaba</artifactId>
        <groupId>com.buba</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>test-server</artifactId>
    <packaging>jar</packaging>
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.13-SNSAPSHOT</version>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!-- 指定该Main Class为全局的唯一入口 -->
                    <mainClass>com.buba.TestServer</mainClass>
                    <layout>ZIP</layout>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <!--可以把依赖的包都打包到生成的Jar包中-->
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

2)配置文件

server:
  port: 7001
spring:
  application:
    name: test-server
  datasource:
    druid:
      url: jdbc:mysql://mysql:3306/testdb?serverTimezone=Asia/Shanghai
      username: root
      password: 123456
      driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
  mapper-locations: classpath:/mappers/*.xml

2)编写Dockerfile

# 基础镜像使用java
FROM openjdk:11
# 作者
MAINTAINER qlx
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为test-server.jar
ADD test-server-1.0-SNAPSHOT.jar test-server.jar
# 运行jar包
RUN bash -c 'touch /test-server.jar'
ENTRYPOINT ["java","-jar","/test-server.jar"]
#暴露7001端口作为微服务
EXPOSE 7001

3、构建镜像

docker build -t test-server:1.0 .
[root@localhost dockercompose]# docker build -t test-server:1.0 .
Sending build context to Docker daemon  25.67MB
Step 1/7 : FROM openjdk:11
11: Pulling from library/openjdk
0e29546d541c: Pull complete
9b829c73b52b: Pull complete
cb5b7ae36172: Pull complete
6494e4811622: Pull complete
668f6fcc5fa5: Pull complete
dc120c3e0290: Pull complete
8f7c0eebb7b1: Pull complete
Digest: sha256:33c346c637ebb17823cbeda4d4e5601c66262752dadcae559a03b090f6505a47
Status: Downloaded newer image for openjdk:11
 ---> 5505a9a39df1
Step 2/7 : MAINTAINER qlx
 ---> Running in 5500ead17dd3
Removing intermediate container 5500ead17dd3
 ---> 61e15bb4e752
Step 3/7 : VOLUME /tmp
 ---> Running in 3abe80b3b46f
Removing intermediate container 3abe80b3b46f
 ---> e957f7f2e152
Step 4/7 : ADD test-server-1.0-SNAPSHOT.jar test-server.jar
 ---> 06b730a5c91e
Step 5/7 : RUN bash -c 'touch /test-server.jar'
 ---> Running in f6b816308280
Removing intermediate container f6b816308280
 ---> 4600c698861a
Step 6/7 : ENTRYPOINT ["java","-jar","/test-server.jar"]
 ---> Running in 485b7bb9f08c
Removing intermediate container 485b7bb9f08c
 ---> faf79c8b5403
Step 7/7 : EXPOSE 7001
 ---> Running in 80bf15f9f1e4
Removing intermediate container 80bf15f9f1e4
 ---> 0ec87b007192
Successfully built 0ec87b007192
Successfully tagged test-server:1.0
[root@localhost dockercompose]#
[root@localhost ~]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
test-server     1.0       0ec87b007192   29 minutes ago   711MB
centos_java19   1.0       9a2a437cb5d1   3 days ago       969MB
openjdk         11        5505a9a39df1   10 months ago    659MB
registry        latest    b8604a3fe854   12 months ago    26.2MB
centos          6.10      f1af727749c4   14 months ago    194MB
centos          7         eeb6ee3f44bd   14 months ago    204MB
centos          latest    5d0da3dc9764   14 months ago    231MB

2、编写docker-compose.yml 定义业务单元

官方文档

version: "3"
services:
  microService:
    image: test-server:1.0
    container_name: test-server
    ports:
      - "7001:7001"
    volumes:
      - /app/test-server:/data
    networks:
      - buba_net
    depends_on:
      - mysql
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_DATABASE: testdb
      MYSQL_ROOT_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:
      - buba_net
    command: --default-authentication-plugin=mysql_native_password #解决外部无法访问
networks:
   buba_net:

3、启动并运行整个应用程序(一键部署)

 # 启动所有docker-compose服务
docker-compose up
# 启动所有docker-compose服务并后台运行
docker-compose up -d

4、进入MySQL容器,创建库,创建表

5、测试接口

docker-compose(部署微服务+MySQL)_第1张图片

6、停止服务

docker-compose stop      # 停止服务

你可能感兴趣的:(docker,微服务,mysql)