欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-12 16:55:08
...

为女朋友写一个小程序(一)— —目的与需求
为女朋友写一个小程序(二)— —数据库设计
为女朋友写一个小程序(三)— —基于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环境,使用脚本自己去镜像内部启动服务器端程序),镜像的使用方法也有指南,用起来非常的方便,本小程序使用如下镜像

[aaa@qq.com_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、编写启动脚本

[aaa@qq.com_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镜像

今天情人节哦,没有人发红包的话不介意发到这儿来~
如果对您有帮助,希望给我一分鼓励~愿你我皆不忘初心!
为女朋友写一个小程序(五)— —如何用docker简化部署