Docker compose管理mysql、项目后台系统(实现多容器管理)

前面我们通过单个容器进行管理,可以实现系统的部署,但是如果系统依赖的东西比较多时,在一个新的机器中,我们又需要将这些容器部署起来,你也许会说我们可以通过shell脚本来实现,但docker提供了更快、更简便的方式:docker compose,通俗点说就是组合多个容器并进行管理,类似maven jar管理。

docker compose的核心是docker-compose.yml文件,通过该文件来管理service,为了使用compose

1、我们需要执行

docker swarm init

初始化一个swarm管理器

2、编写docker-compose.yml文件

version: "3"
services:
  mysql:
    image: mysql
    restart: always                       
    volumes:
      - ./mysql/data/:/var/lib/mysql/
      - ./mysql/conf/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=123456
    command: --default-authentication-plugin=mysql_native_password  
  gs_om_ms:
    restart: always
    image: gs-om-ms-compose:1.0
    volumes:
      - ./logs/:/data/log/om/omms/
    ports:
      - 8988:8988
    links:
      - mysql:m1

因为我们已经有了mysql、gs-om-ms-compose:1.0这两个镜像,所以这里通过image的方式进行引入,还可以通过build的方式(构建指定路径下的Dockerfile文件)

下面简单讲解下docker-compose.yml的含义

version: 版本号,固定为3就行,版本3支持docker stack,版本2不支持docker stack,版本2和3的都支持docker compose,这样说明docker stack是后续的主流

services: 服务列表

    mysql: 定义一个服务名称为mysql的服务,具体服务名会加上指定的前缀

       image:  指定服务使用的镜像,如果镜像在本地不存在,Compose 将会尝试拉取这个镜像

       restart: 重启方式

       volumes: 挂载一个目录或者一个已存在的数据卷容器,这很有必要,如果不这样,当容器停止或移除后数据就找不回来了

            - ./mysql/data/:/var/lib/mysql/    // 将当前目录下的mysql/data挂载到/var/lib/mysql
            - ./mysql/conf/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf   // 将当前目录下的mysql/conf/mysqld.cnf挂载到/etc/mysql/mysql.conf.d/mysqld.cnf

        ports:   映射端口的标签。使用HOST:CONTAINER格式或者只是指定容器的端口,宿主机会随机映射端口。  
            - "3306:3306"  宿主3306映射到容器端口3306
        environment:   容器变量 
            - MYSQL_ROOT_PASSWORD=123456    // 设置mysql root用户密码为123456

        command: --default-authentication-plugin=mysql_native_password  // 执行命令,这里使用的mysql版本为8.0.15,所以执行授权的插件

        links: 连接其它服务中的容器
           - mysql:m1  // 连接数据库服务中的容器,因为系统需要连接数据库

 

除了上述使用的一些关键字外:还有一些也比较常用,例如

depends_on 依赖的容器,解决容器启动顺序问题

build:指定路径,使用指定路径下的Dockerfile文件构建服务

3、部署应用

docker stack deploy -c docker-compose.yml 应用名称(也是服务前缀)

注:这里使用docker stack deploy实现了类似docker-compose的功能,但两者还是有所不同的。

Docker stack会忽略了“构建”指令。 您无法使用stack命令构建新镜像。 它是需要镜像是预先已经构建好的。 所以docker-compose更适合于开发场景。

  

查看服务

docker service ls

这里的应用名称为gs-compose,可以看到已经有了两个服务了

同时可以看到有两个容器已经在运行了

访问系统,可以正常访问,说明系统已经部署好了

4、其它命令

(1)删除应用(正在运行的容器也会删除掉)

docker stack rm 应用名称

(2)进入容器内部并执行命令

docker exec -it 容器名称 命令

例docker exec -it gs-compose_mysql.1.c0diy1ycaixyu81x7x6avnc2j bash

进入mysql容器中并执行bash命令

(3)查询指定父镜像ID的子镜像

docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=父镜像ID)

(4)docker-compose运行命令

docker-compose -f docker-compose.yml -p gs-compose up -d

-d 表示在后台运行,其它命令使用docker-compose --help

 

注:连接mysql需要以ip地址的形式进行连接,否则会出现errorCode 0, state 08S01

 

除了依赖已有的镜像,我们还可以通过build选项构建镜像,例jdk的构建,后台管理系统的构建

version: "3"
services:
  jdk:
    build: ./jdk
  mysql:
    image: mysql
    restart: always                       
    volumes:
      - ./mysql/data/:/var/lib/mysql/
      - ./mysql/conf/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=nDLkMs7giw11~
    command: --default-authentication-plugin=mysql_native_password  
  gs_om_ms:
    restart: always
    build: .
    volumes:
      - ./logs/:/data/log/om/omms/
    ports:
      - 8988:8988
    depends_on:
      - jdk
    links:
      - mysql:m1

目录结构:

jdk目录下也有一个Dockerfile文件

gs_om_ms的Dockerfile内容如下:

FROM gs-compose_jdk
MAINTAINER youpanpan "youpp@gswlgf.com"
ADD gs-om-ms.jar gs-om-ms.jar
EXPOSE 8988
ENTRYPOINT java -jar gs-om-ms.jar --spring.profiles.active=test

 

这里依赖的是gs-compose_jdk,即通过docker-compose构建的镜像,不过最好还是先将jdk构建出来,后台系统镜像基于jdk镜像进行构建

构建出了两个镜像:

 

本人开发的一个网站:编程之道,欢迎来踩!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

来了就走下去

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

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

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

打赏作者

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

抵扣说明:

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

余额充值