前言
在期末里,学习之余开始想着未来了。。。想着即将大四了,大四上学期就一天的课,不如去实习把,在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常用命令:
- Docker ps 查看正在运行的容器
- Docker stop $(docker ps -a -q) 暂停所有容器
- Docker rm $(docker ps -a -q) 删除所有容器
- docker build -t tomcat-mysql . 构建镜像
- 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;