为女朋友写一个小程序(一)— —目的与需求
为女朋友写一个小程序(二)— —数据库设计
为女朋友写一个小程序(三)— —基于springboot的服务器端接口设计与实现
为女朋友写一个小程序(四)— —前端小程序的设计与实现
为女朋友写一个小程序(五)— —如何用docker简化部署(本文)
为女朋友写一个小程序(六)— —结合docker实现devOps
为女朋友写一个小程序(七)— —优化引进redis(未编码,未写)
为女朋友写一个小程序(八)— —基于moongodb实现即时通讯(未编码,未写)
【个人项目|为女朋友写一个小程序(五)— —如何用docker简化部署】以此文致敬情人节哩 嘿嘿一、为什么要使用docker进行部署 使用docker是因为自己想玩玩docker,之前了解过docker,说白了就是一个虚拟的操作系统,其操作与直接使用虚拟机操作没有什么大的区别。
使用docker进行部署可以简化部署过程,正如这个小程序为例子,正规流程部署的步骤应是如下:
- 装JDK8
- 装MYSQL
- 部署软件包
- 导入sql语句
- 启动
切换成docker进行部署的时候,步骤就会简化如下:
- 装docker
- 选适合的JDK镜像、MYSQL镜像
- 编写docker启动容器的脚本(导入sql语句,可以利用MYSQL镜像提供的配置自动导入)
- 部署软件包
- 启动docker容器
这里主要是省略了装JDK,装MYSQL的步骤,部署速度加快。
二、使用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
REPOSITORYTAGIMAGE IDCREATEDSIZE
docker.io/maven3.5-jdk-8908bdbacafc211 months ago748 MB
docker.io/mysql5.75d4d51c57ea811 months ago374 MB
docker.io/mysqllatest5d4d51c57ea811 months ago374 MB
docker.io/java8d23bdf5b1b1b2 years ago643 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 ****:**** -dmysql:5.7
因为其中有几个需要自定义的地方,所以使用了启动脚本,自定义的地方:
- 挂载配置文件盘:配置文件不能定义到MYSQL docker容器中,所以用本机的目录抽离出来
- 时间:docker镜像的时间是美国时间,所以需要挂载本机(腾讯云)的时间到虚拟机中,否则时区不准,时间不准
- 数据:同样的,数据文件极为重要,不能随着容器的销毁而销毁,所以挂载数据目录盘
- 暴露端口给宿主机:暴露端口给宿主机,主要是方便后面自己的维护直接连接到宿主机,而不用到docker镜像中去
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 -ijava: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服务器端程序
先启动MYSQL镜像,再启动JAVA docker镜像
今天情人节哦,没有人发红包的话不介意发到这儿来~
如果对您有帮助,希望给我一分鼓励~愿你我皆不忘初心!
文章图片