docker容器详解五: dockerfile实现tomcat环境以及源码安装mysql

tomcat

上一节讲到了dockerfile的基础,这一次我们来做一个小的练习
首先要了解tomcat安装的整个过程
首先搭建 jdk环境:
下载jdk包,解压之后添加环境变量
然后搭建tomcat:
下载tomcat包,解压,修改配置文件到一个工作目录
然后给工作目录加入一些东西,访问。

From centos
add ./jdk-8u191-linux-x64.tar.gz /usr/local
add ./apache-tomcat-8.5.35.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk  
ENV CLASSPATH $JAVA_HOME/lib/ 
ENV PATH $PATH:$JAVA_HOME/bin
RUN mkdir -p /var/www/www.fz.com
VOLUME /var/www/www.fz.com
RUN cd /usr/local/ && mv apache-tomcat-8.5.35 tomcat && mv jdk1.8.0_191 jdk
copy ./server.xml /usr/local/tomcat/conf/
copy ./mysql-connector-java-5.1.7-bin.jar /usr/local/tomcat/lib/
workdir /usr/local/tomcat
CMD bash bin/startup.sh && tail -f logs/catalina.out

这是整个dockerfile的文件。我来一次解释一下
From centos:
这个没什么好说的就是一个基础的centos的源镜像
add:
两个源码包 一个是jdk的一个是tomcat的包
ENV:这里会设置环境变量,就是三个jdk的环境变量
RUN:执行命令,创建一个tomcat的工作目录,
VOLUME:和上面一起,创建目录之后把他映射到宿主机,以便可以在外部把具体的页面代码放入。
RUN: 运行命令把tomcat放到制定目录并解压
copy:第一个是把tomcat的配置文件的副本拷贝进去,第二个是拷贝jdbc的包,以便以后连接数据库时用。
workdir:后面的命令都是在/usr/local/tomcat下运行
最后一个CMD很关键。
前面讲过,docker的镜像运行之后在执行完命令就会自动关闭,必须要给他一个能够挂在后台运行的命令,比如说你在run后面会加上 /bin/bash等等让他保持活跃的状态。不然它就会自动关闭。

这里如果只有打开tomcat而没有后面的加载日志,那么就会在打开之后容器马上又关闭了。所以docker ps就看不见 需要用 ps -a看所有的容器,会发现容器是关闭的。 就需要用刷新日志的方式让tomcat在后台与进行。保持容器的开启状态。
前面的需要的文件放在和dockerfile一个目录下ok了。
然后编译运行
在这里插入图片描述在这里插入图片描述然后运行
在这里插入图片描述中间一部分省略
在这里插入图片描述就可以看见类似与平时的开启tomcat的日志
在这里插入图片描述如果不想要在前台看日志,可以-d挂入后台。如上图所示

mysql源码安装

mysql源码安装的大致过程
1.下载源码包,下载一些依赖包例如gcc等
2.编译安装
3.创建用户和组并赋予权限,然后数据库初始化
4.设置数据库root密码

from centos
ADD ./mysql-5.6.35.tar.gz /usr/local/
RUN yum install gcc gcc-c++ ncurses-devel perl cmake make autoconf -y
RUN cd /usr/local/mysql-5.6.35 && cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
&& make && make install
RUN groupadd mysql && useradd -r -g mysql mysql && \
chown -R mysql:mysql /usr/local/mysql
ENV PATH /usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
workdir /usr/local/mysql
RUN scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/mysql.pid
RUN support-files/mysql.server start && mysqladmin -u root password 'redhat'
COPY ./test.sql /root/
RUN support-files/mysql.server start && mysql -uroot -predhat < /root/test.sql
CMD  mysqld --user=mysql

这是我的dockerfile文件
依次解释:
from:镜像源
add:把源码包copy进去并解压
run: 第一个是下载一些依赖包,第二个是编译安装。第三个是用户和权限。
env:环境变量
workdir :工作目录设在mysql目录下
run:数据库初始化,
第二个是开启服务并修改root密码
这里我踩了一个坑,修改密码是要在开启服务的状态下的,一开始我没有开服务,会出错。第二次我知道了要开服务,然后我是先在前面开服务,在后面在加一个run修改密码,也会出错,为什么呢?
因为dockerfile每一行命令都是把镜像生成一个容器,然后在容器内执行命令,子啊构建成新的镜像,这样一来,上一个镜像是开启服务,像开启服务把他单独列在一行是没有效果的,因为生成容器开启服务再生成镜像还会一样的镜像,下一个执行修改root密码命令时候已经是一个新的镜像了所以服务是没打开的。
copy:然后就是拷贝我自己写的一个mysql的脚本进入docker
run:这个是开启服务并且执行脚本,然数据库生成表插入数据
cmd:这个是前台开启数据库服务。
像前面一个编译并开启就ok了
这里数据库的编译是最基础的,没有很多参数,有需求自己加,然后这里的编译需要的时间可能会有点久。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值