为女朋友写一个小程序(五)— —如何用docker简化部署

版权声明:本文为博主思考总结而得,只做抛砖引玉,欢迎大家转载指导 https://blog.csdn.net/hayre/article/details/87213508

为女朋友写一个小程序(一)— —目的与需求
为女朋友写一个小程序(二)— —数据库设计
为女朋友写一个小程序(三)— —基于springboot的服务器端接口设计与实现
为女朋友写一个小程序(四)— —前端小程序的设计与实现
为女朋友写一个小程序(五)— —如何用docker简化部署(本文)
为女朋友写一个小程序(六)— —结合docker实现devOps(未写)
为女朋友写一个小程序(七)— —优化引进redis(未编码,未写)
为女朋友写一个小程序(八)— —基于moongodb实现即时通讯(未编码,未写)

以此文致敬情人节哩 嘿嘿

一、为什么要使用docker进行部署

使用docker是因为自己想玩玩docker,之前了解过docker,说白了就是一个虚拟的操作系统,其操作与直接使用虚拟机操作没有什么大的区别。
使用docker进行部署可以简化部署过程,正如这个小程序为例子,正规流程部署的步骤应是如下:

  1. 装JDK8
  2. 装MYSQL
  3. 部署软件包
  4. 导入sql语句
  5. 启动

对于高手来说其在一个机器上部署算是简单,但是如果是重头来开始部署,还是需要花费一定的时间的,具体可以参考很久之前写的文章 装JDK装MYSQL

切换成docker进行部署的时候,步骤就会简化如下:

  1. 装docker
  2. 选适合的JDK镜像、MYSQL镜像
  3. 编写docker启动容器的脚本(导入sql语句,可以利用MYSQL镜像提供的配置自动导入)
  4. 部署软件包
  5. 启动docker容器
    这里主要是省略了装JDK,装MYSQL的步骤,部署速度加快。

另外,用了docker之后也方便对系统进行管理,因为系统上不会存在JAVA,MYSQL进程,直接面向docker进行管理,当然了,也会加大问题的复杂性,排查时,时常要进入docker容器的tty,有些复杂

二、使用docker需要做什么技术储备

使用docker的时候主要还是看了《第一本docker书》,这本书讲的还是比较全面,涉及了docker的入门基本知识,也涵盖了实战的实例,看过一次之后要用起来还是可以的。
其他的知识还是关于linux的知识,docker镜像使用的操作系统主要还是乌班图,CentOS等等,了解了linux知识方便对docker镜像的维护,之前主要过了两本书《Linux Shell脚本攻略》《鸟哥的私房菜》,过了之后对于linux的初、中级使用就没有什么压力了

三、具体是如何实现的

1、下载docker
下载docker,根据《第一本docker书》介绍的yum下载方式下载docker,一条命令解决所有问题
2、选择镜像
登录官方镜像库,进行搜索,建议使用的镜像最好都是由官方提供的,因为这里的程序用的也都是标准的东西,所以不需做什么自定义的镜像操作(服务器端程序使用的wrapper进行打包,JAVA docker镜像主要就是提供一个JDK环境,使用脚本自己去镜像内部启动服务器端程序),镜像的使用方法也有指南,用起来非常的方便,本小程序使用如下镜像

[root@VM_12_99_centos ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/maven     3.5-jdk-8           908bdbacafc2        11 months ago       748 MB
docker.io/mysql     5.7                 5d4d51c57ea8        11 months ago       374 MB
docker.io/mysql     latest              5d4d51c57ea8        11 months ago       374 MB
docker.io/java      8                   d23bdf5b1b1b        2 years ago         643 MB

3、编写启动脚本

[root@VM_12_99_centos platform]# tree -L 3
.
|-- java-for-run
|   `-- docker
|       `-- run.sh #docker JAVA镜像启动脚本
`-- mysql
    |-- data
    |   |-- auto.cnf
    |   |-- ca-key.pem
    |   |-- ca.pem
    |   |-- client-cert.pem
    |   |-- client-key.pem
    |   |-- db_target
    |   |-- ib_buffer_pool
    |   |-- ibdata1
    |   |-- ib_logfile0
    |   |-- ib_logfile1
    |   |-- ibtmp1
    |   |-- mysql
    |   |-- performance_schema
    |   |-- private_key.pem
    |   |-- public_key.pem
    |   |-- server-cert.pem
    |   |-- server-key.pem
    |   `-- sys
    |-- docker
    |   `-- run.sh  #docker MYSQL镜像启动脚本
    |-- etc
    |   `-- my.cnf
    `-- init

3.1、编写MYSQL docker镜像启动脚本

#!/bin/bash
docker run -ti --name target-mysql  -v /etc/localtime:/etc/localtime  -v /apps/platform/mysql/etc:/etc/mysql/conf.d -v /apps/platform/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=--KIKI$2018 -p ****:**** -d  mysql:5.7

因为其中有几个需要自定义的地方,所以使用了启动脚本,自定义的地方:

  • 挂载配置文件盘:配置文件不能定义到MYSQL docker容器中,所以用本机的目录抽离出来
  • 时间:docker镜像的时间是美国时间,所以需要挂载本机(腾讯云)的时间到虚拟机中,否则时区不准,时间不准
  • 数据:同样的,数据文件极为重要,不能随着容器的销毁而销毁,所以挂载数据目录盘
  • 暴露端口给宿主机:暴露端口给宿主机,主要是方便后面自己的维护直接连接到宿主机,而不用到docker镜像中去

PS:sql文件直接通过人工导入
3.2、编写docker JAVA镜像启动脚本
编写脚本如下:

#!/bin/bash
docker run --rm -v /apps/service:/apps/service -v /etc/localtime:/etc/localtime -v /apps/data:/apps/data  -v /apps/crt:/apps/crt  -w /apps/service --name target-java --link target-mysql:mysql -p **:** -p ***:***   -d -t -i   java:8 /bin/bash
docker exec target-java ./kiki-target/bin/kiki-target start

因为其中有几个需要自定义的地方,所以使用了启动脚本,自定义的地方:

  • 磁盘挂载:将本机中的/apps/service挂载至docker镜像的/apps/service目录
  • 时间:docker镜像的时间是美国时间,所以需要挂载本机(腾讯云)的时间到虚拟机中,否则时区不准,时间不准
  • https证书:将本机中的/apps/crt挂载至docker镜像的/apps/crt目录
  • 工作目录:定义为/apps/service
  • 链接mysql镜像:链接mysql镜像,定义域名为mysql
  • 暴露端口给宿主机:暴露端口给宿主机
  • 启动方式:直接利用docker exec 命令启动本机的kiki-target服务器端程序

4、启动
先启动MYSQL镜像,再启动JAVA docker镜像

今天情人节哦,没有人发红包的话不介意发到这儿来~
如果对您有帮助,希望给我一分鼓励~愿你我皆不忘初心!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hayre/article/details/87213508