Dockerfile Tomcat和Mysql 单容器

前言

在期末里,学习之余开始想着未来了。。。想着即将大四了,大四上学期就一天的课,不如去实习把,在Boss直聘看了半天,好的去不了,小公司又不想去(矫情说的就是我),看到4399公司招聘PHP工程师,试着问HR要不要实习生,HR小姐姐发了份测试题让我写(本来也想写,但忘了题目),em,过了,让博主8月下旬回校的时候参加面试。
暑假里,舍友也开始找工作了,我向HR推荐了一下我舍友,也发了份测试题。

1.描述你理解的docker是什么,列举且简要说明你所查到的docker运用场景
2.编写构建开发环境的Dockerfile文件,并记录环境构建过程中碰到哪些问题及这些问题是怎么样解决的。
3.在题2所搭建的环境中,实现一个根据ip查询所属地区的服务:
1).用你觉得最合适/熟悉的开发语言,完成功能:输入ip地址,返回该ip所属地区。
2).IP库使用附件提供的IP库文件。
3).可以以网页或者命令行的形式实现,并提供相应的说明文档。

正文

博主想着也尝试做一下Docker好了,上网百度了半天也没一个案例是使用单容器的,基本都是解耦使用多容器进行组合使用,我个人认为解耦使用才是Docker的正确使用方式,但毕竟是测试题,要求用单容器,提供一份dockerfile嘛,那就搞他!

FROM tomcat
# 升级apt-get工具
RUN apt-get update
RUN sh -c '/bin/echo -e "Y" | apt-get upgrade'
# 安装mysql
RUN sh -c '/bin/echo -e "Y" | apt-get install mysql-server'
# 复制sql、程序至相应位置
COPY ip_service.sql /usr/ip_service.sql
COPY privileges.sql /usr/privileges.sql
COPY setup.sh /usr/setup.sh
COPY service.war /usr/local/tomcat/webapps/service.war
# 自启动服务并导入sql
CMD [ "sh","/usr/setup.sh" ]
EXPOSE 8080

1.这次采用的基础镜像是官方的Tomcat,基于Debian系统,Tomcat版本是8.5.43

FROM Tomcat

2.升级源文件(不然没法安装mysql),sh -c 是用于自动交互

RUN apt-get update
RUN sh -c '/bin/echo -e "Y" | apt-get upgrade'

3.安装mysql(apt-get安装的其实是Mariadb)

RUN sh -c '/bin/echo -e "Y" | apt-get install mysql-server'

4.导入数据源sql、密码更新sql、脚本以及javaweb程序

COPY ip_service.sql /usr/ip_service.sql
COPY privileges.sql /usr/privileges.sql
COPY setup.sh /usr/setup.sh
COPY service.war /usr/local/tomcat/webapps/service.war

5.启动服务并导入数据

CMD [ "sh","/usr/setup.sh" ]

6.对外公布8080端口

EXPOSE 8080

Docker常用命令:

  1. Docker ps 查看正在运行的容器
  2. Docker stop $(docker ps -a -q) 暂停所有容器
  3. Docker rm $(docker ps -a -q) 删除所有容器
  4. docker build -t tomcat-mysql . 构建镜像
  5. docker run --name test -p 8080:8080 -d tomcat-mysql 创建容器并启动

setup.sh

#!/bin/bash

# 启动mysql
echo '1.启动mysql....'
service mysql start
sleep 3
# 导入数据
echo '2.开始导入数据....'
mysql < /usr/ip_service.sql
echo '3.导入数据完毕....'
sleep 3
# 修改密码、防止二次启动
echo '4.开始密码修改....'
mysql < /usr/privileges.sql
echo '5.修改密码完毕....'
sleep 3
# mysql启动
echo '6.mysql应用启动完毕,数据导入完成'

# Tomcat服务器启动
/usr/local/tomcat/bin/startup.sh
echo '7.Tomcat应用启动完毕,地址:http://127.0.0.1:8080/service/get?ip=1.1.0.0'

echo '*容器启动完毕*'
tail -f /dev/null

ip_service.sql

CREATE DATABASE ip DEFAULT CHARSET=utf8;

USE ip;

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `ip_service`
-- ----------------------------
DROP TABLE IF EXISTS `ip_service`;
CREATE TABLE `ip_service` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `start_ip` varchar(255) DEFAULT NULL,
  `end_ip` varchar(255) DEFAULT NULL,
  `from_service` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=446302 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of ip_service
-- ----------------------------
INSERT INTO `ip_service` VALUES ('1', '0.0.0.0         ', '0.255.255.255   ', 'IANA 保留地址重庆');
......................

privileges.sql

use mysql;
UPDATE mysql.user SET authentication_string = PASSWORD('abc123'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
flush privileges;

引用/参考资料

: )