docker-compose容器编排部署(docker-compose容器映射)
 南窗  分类:IT技术  人气:159  回帖:0  发布于1年前 收藏

docker-compose部署微服务

  • 1、Docker-Compose是什么?
  • 2、应用场景
  • 3、docker-compose部署SpringBoot项目
    • 3.1 编写Dockfile
    • 3.2 编写docker-compose.yaml
    • 3.3 修改工程配置
    • 3.4 将相关文件上传到服务器
    • 3.5 执行docker-compose up

  本文是对Docker+Nginx打包部署前后端分离项目这篇文章的补充,原文是简单的用docker部署的,需要一个一个pull镜像,一个一个启动容器,很麻烦,现在使用docker-compose一行命令解决多个容器的启停。

1、Docker-Compose是什么?

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

2、应用场景

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

3、docker-compose部署SpringBoot项目

3.1 编写Dockfile

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

3.2 编写docker-compose.yaml

  这里主要三个服务,一个是我们的后端服务,一个redis服务,一个mysql服务

  三个容器使用同一个docker network。

version: "3"

services:
  guigu_auth:
    build:
      context: ./sysrole
      dockerfile: Dockerfile
    container_name: guigu_auth
    restart: always
    privileged: true
    ports:
    - "8800:8800"
    volumes:
      - ./:/data
    networks:
      - auth_network
    depends_on:
      - redis
      - mysql

  redis:
    image: redis:6.0.8
    container_name: redis
    restart: always
    privileged: true
    ports:
    - "6379:6379"
    volumes:
    - ./redis/redis.conf:/etc/redis/redis.conf
    - ./redis/data:/data
    networks:
      - auth_network
    command: redis-server /etc/redis/redis.conf

  mysql:
    image: mysql:8.0.31
    restart: always
    container_name: mysql
    privileged: true
    environment:
      MYSQL_ROOT_PASSWORD: 'wsxhz888'
      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
      MYSQL_DATABASE: 'guigu-auth'
      MYSQL_USER: 'xtt'
      MYSQL_PASSWORD: 'wsxhz888'
    ports:
    - "3307:3306"
    volumes:
    - ./mysql/db:/var/lib/mysql
    - ./mysql/conf/my.cnf:/etc/my.cnf
    - ./mysql/init:/docker-entrypoint-initdb.d
    networks:
      - auth_network
    command: --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
networks:
  auth_network:

3.3 修改工程配置

  修改配置文件,由于使用的同一个docker network,所以容器之间可以通过域名访问,与IP无关。修改后的配置文件如下所示。

3.4 将相关文件上传到服务器

  后端项目打成jar包并和Dockerfile、docker-compose.yaml一同上传到服务器指定目录下。

  项目打包:

  将文件上传到服务器,上传之后如下所示:

3.5 执行docker-compose up

  运行如下命令:

docker-compose up -d

  查看正在运行的容器:docker ps

  可以看到,启动了三个容器,分别是我们的后端微服务、redis和mysql。

关闭容器的命令:

docker-compose stop

  再次开启容器:docker-compose up -d

   可以看到,很方便,一个命令实现多个容器的启停,不像原来使用docker那样一个一个关闭和开启容器了。    这里基本上就完了,可以进入到mysql容器内部建库建表就可以了,如果配置了启动的sql脚本那就更方便了。

讨论这个帖子(0)垃圾回帖将一律封号处理……