Docker学习笔记3-基于docker compose做应用编排/构建mysql数据库镜像

Compose 是一个用户定义和运行多个容器的 Docker 应用程序。在 Compose 中你可以使用 YAML 文件来配置你的应用服务。然后,只需要一个简单的命令,就可以创建并启动你配置的所有服务。

使用 Compose 基本会有如下三步流程:

在 Dockfile 中定义你的应用环境,使其可以在任何地方复制。

在 docker-compose.yml 中定义组成应用程序的服务,以便它们可以在隔离的环境中一起运行。

最后,运行,Compose 将启动并运行整个应用程序。

下面来实战一下spring cloud基于docker-compose创建镜像

1、安装docker-compose

通过联网机器下载docker-compose离线安装包(参见Downloads部分) https://github.com/docker/compose/releases

将下载的文件上传到待安装服务器(推荐工具:FileZilla)

重命名 sudo mv docker-compose

更改文件目录 sudo mv docker-compose /usr/local/bin/docker-compose

修改文件用户名用户组 (或修改访问权限)cd /usr/local/bin/ chmod 755 docker-compose

验证是否安装成功 docker-compose --version

安装成功 docker-compose version 1.12.0, build b31ff33

docker compose在线安装参见 https://docs.docker.com/compose/install/

2、卸载docker-compose

如果是二进制包方式安装的,删除二进制文件即可。 rm /usr/local/bin/docker-compose

3、已经有镜像,使用docker-compose进行容器的启动

编写docker-compose.yml配置文件:

version: '3'

services:

athena-eureka:

image: athena/athena-eureka

restart: always

ports:

- 8761:8761

athena-gateway:

image: athena/athena-gateway

restart: always

ports:

- 8765:8765

在docker-compose.yml所在目录下,执行命令:docker-compose up -d 创建并后台执行服务。

这样,eureka服务和gateway服务就启动了,在页面上可以访问注册中心,而且可以看到gateway服务已注册。

4、无镜像,使用docker-compose创建镜像并启动

(1)pom中加入打包插件(跟上一篇文章的一样):

(2)先使用mvn clean package -DskipTests 命令打jar包(忽略测试代码),可以写个sh脚本实现一键打包

(3)将打包好的.jar文件和每个对应模块的Dockerfile整理好,整理好的目录结构如下:

athena_package

├── docker-compose.yml

├── athena-eureka

│ athena-eureka-1.0.jar

| Dockerfile

├── athena-gateway

│ athena-gateway-1.0.jar

| Dockerfile

├── athena-keystone

│ athena-keystone-1.0.jar

| Dockerfile

├── athena-webapp

│ athena-webapp-1.0.jar

| Dockerfile

|----- athena-mysql-server

| | Dockerfile

| |----mysql

init_table.sql

init_data.sql

install_db.sh

(4)编写用于构建docker image的docker-compose.yml配置文件:

version: '3'

services:

athena-eureka:

build: athena-eureka

ports:

- 8761:8761

athena-gateway:

build: athena-gateway

ports:

- 8765:8765

athena-mysql-server:

build: athena-mysql-server

ports:

- 3308:3306

athena-keystone:

build: athena-keystone

ports:

- 8881:8881

athena-webapp:

build: athena-webapp

ports:

- 8883:8883

(5)执行命令

docker-compose -f docker-compose.yml up

(6)镜像会自动创建并启动容器,页面可以访问各个应用

5、athena-mysql-server镜像的构建:

(1)下载mysql官方数据库镜像。

我们需要使用官方镜像融合数据库初始化脚本来制作新的数据库镜像,本文使用mysql:5.7版本的镜像。

(2)编写Dockerfile

mysql官方镜像可以支持在容器启动时自动遍历docker-entrypoint-initdb.d目录下所有的.sh和.sql后缀的文件并执行。但是执行是没有顺序的,不太符合我们的要求。解决方法就是编写一个shell脚本,脚本中定义sql文件执行的顺序。

#依赖的基础镜像

FROM mysql:5.7

#定义工作目录

ENV WORK_PATH /usr/local/work

#定义会被容器自动执行的目录

ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d

#定义sql文件名

ENV FILE_1 init_table.sql

ENV FILE_2 init_data.sql

#定义shell文件名

ENV INSTALL_DB_SHELL install_db.sh

#创建文件夹

RUN mkdir -p $WORK_PATH

#把数据库初始化数据的文件复制到工作目录下

COPY .mysql/$FILE_1 $WORK_PATH/

COPY .mysql/$FILE_2 $WORK_PATH/

#把要执行的shell文件放到/docker-entrypoint-initdb.d/目录下,容器会自动执行这个shell

COPY ./$INSTALL_DB_SHELL $AUTO_RUN_DIR/

#给执行文件增加可执行权限

RUN chmod a+x $AUTO_RUN_DIR/$INSTALL_DB_SHELL

(3)shell脚本如下:

mysql -uroot -p$MYSQL_ROOT_PASSWORD

source $WORK_PATH/$FILE_1;

source $WORK_PATH/$FILE_2;

(4)然后就可以使用上面的docker-compose命令来构建镜像、启动容器了,当然也可以使用docker命令:

构建镜像:

docker build -t athena-mysql-server .

运行容器:

docker run --name mysql -p 3308:3306 -e MYSQL_ROOT_PASSWORD=1q2w3e -d athena-mysql-server

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180412G1D2R300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券