docker制作自定义的tomcat镜像,并且镜像可以在启动新容器后自动启动(方便后期做k8s端口暴露)
G WH
本为原创,转载请说明出处!
环境准备:
1、centos 7.4并且可以链接阿里的镜像源
2、通过阿里源已经部署docker
3、准备主机:192.168.226.135 master
4、需要链接外网,并配置yum源(下载阿里镜像会用到)
技能要求:
1、了解基本docker命令
软件包准备:
jdk-8u144-linux-x64.tar.gz
下载地址:https://pan.baidu.com/s/1jJyfm-uWQucsswt5WDY0kQ
提取码:pvyj
apache-tomcat-10.0.0-M7.tar.gz
下载地址:https://pan.baidu.com/s/16fg1BIbtY6eiolsjF8NZZA
提取码:0qxh
镜像制做:
1、定义阿里的docker镜像仓库:
[root@vm135 opt]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.226.135:5000"] #这里是做为本地镜像私库时设置,这里可以不添加此行
}
[root@vm135 opt]# systemctl restart docker
2、下载docker基础版centos镜像,我这里下载的是centos8.1
[root@vm135 opt]# docker search centos
[root@vm135 opt]# docker pull docker.io/centos
3、用基础centos基本版镜像创建容器
[root@vm135 opt]# docker run -itd docker.io/centos:latest /sbin/init #这里需要注意用/sbin/init来创建新的容器,不能用/bin/bash,否则后面做tomcat开机自启时systemctl会无效
#如果在docker里不能使用systemctl可以在创建docker时添加--privileged=true来指定初始化程序为/sbin/init
[root@vm135 opt]# docker ps #会显示容器ID号(随机创建,这里是:4b7f13bac473)
[root@vm135 opt]# docker exec -it 4b bash #进入容器:4b代表上面的容器ID号,bash是指/bin/bash
4、在基础容器里安装一些小工具(确保yum可以用)
(1)ifconfig命令
[root@4b7f13bac473 /]# yum -y install net-tools
(2)vim编辑器
[root@4b7f13bac473 /]# yum -y install vim
(3)tab补全键
安装epel 源
[root@4b7f13bac473 /]# yum -y install epel-release
安装bash-completion超强的命令补全工具
[root@4b7f13bac473 /]# yum -y install bash-completion
立即生效
[root@4b7f13bac473 /]# source /etc/profile.d/bash_completion.sh
或者退出终端重新登录
(4)安装sshd(此可以不用安装)
[root@4b7f13bac473 /]# yun -y install openssh-server openssh-client
5、部署JAVA_HOME
下载jdk-8u144-linux-x64.tar.gz并上传到容器里,方法有很多,这里是下载到本地,再传到容器里。
[root@vm135 opt]# docker cp /opt/jdk-8u144-linux-x64.tar.gz 4b7f13bac473:/usr/local/java/
#把本机上opt下的jdk上传到容器里的java目录下(此地址随意,如果容器里没有java目录可以手动创建一个再上传)
在容器里执行:这里是在/root/.bashrc里添加的,如果在/etc/profile里添加,容器新创建时不会立即生效,需要到容器里再执行source /etc/profile才能生效。
[root@4b7f13bac473 /]# tar -xf /usr/local/java/jdk-8u144-linux-x64.tar.gz
[root@4b7f13bac473 /]# vim /root/.bashrc
export JAVA_HOME=/usr/local/java/jdk1.8.0_144
6、部署tomcat
[root@vm135 opt]# docker cp /opt/apache-tomcat-10.0.0-M7.tar.gz 4b7f13bac473:/usr/local/tomcat/
[root@vm135 opt]# docker exec -it 4b bash #进入容器
[root@4b7f13bac473 /]# cd /usr/local/tomcat/
[root@4b7f13bac473 tomcat ]# tar -xf /usr/local/tomcat/apache-tomcat-10.0.0-M7.tar.gz
[root@4b7f13bac473 tomcat ]# mv apache-tomcat-10.0.0-M7 tomcat-10.0.0
[root@4b7f13bac473 tomcat ]# cd tomcat-10.0.0
[root@4b7f13bac473 tomcat-10.0.0]# bin/startup.sh #启动tomcat是否正常
[root@4b7f13bac473 tomcat-10.0.0]# bin/shutdown.sh #关闭tomcat
7、配置tomcat开机自启(也就是创建容器后自动开启tomcat)
[root@4b7f13bac473 tomcat-10.0.0]# cd bin/
[root@4b7f13bac473 bin]# vim catalina.sh
#找到[ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME" 这一行,一般在153行。在这行下方添加:
CATALINA_PID="$CATALINA_BASE/tomcat.pid"
创建tomcat.service文件:
vim /lib/systemd/system/tomcat.service
内容如下:
[Unit]
Description=Tomcat
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/local/java/jdk1.8.0_144" #这里添加jdk的路径
PIDFile=/usr/local/tomcat/tomcat-10.0.0/tomcat.pid #这里是tomcat.pid的位置,就是上步在catalina.sh里添加的
ExecStart=/usr/local/tomcat/tomcat-10.0.0/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@4b7f13bac473 bin]# systemctl daemon-reload
[root@4b7f13bac473 bin]# systemctl start tomcat
验证tomcat是否启动了
[root@4b7f13bac473 bin]# netstat -tunlp
把tomcat加入到开机自启动
[root@4b7f13bac473 bin]# systemctl enable tomcat
8、创建自定义的镜像
[root@vm135 ~]# docker commit -m "admin" -a "docker-tomcat" 4b7f13bac473 tomcat:v1.01
#-m是指定创建的信息,即详细说明,-a是指定制作者,后面以次是容器ID,新创建的镜像信息。
[root@vm135 ~]# docker images
9、验证:
[root@vm135 ~]# docker run -itd tomcat:v1.01 /sbin/init
[root@vm135 ~]# docker ps
[root@vm135 ~]# docker exec -it 容器ID bash
进入容器后可用netstat -tunlp命令查看tomcat已经启动
备注:后续会再优化本文,如有不足请提出,会尽快修改。
更多推荐
所有评论(0)