tomcat
上一节讲到了dockerfile的基础,这一次咱们来作一个小的练习
首先要了解tomcat安装的整个过程
首先搭建 jdk环境:
下载jdk包,解压以后添加环境变量
而后搭建tomcat:
下载tomcat包,解压,修改配置文件到一个工做目录
而后给工做目录加入一些东西,访问。java
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源码安装
mysql源码安装的大体过程
1.下载源码包,下载一些依赖包例如gcc等
2.编译安装
3.建立用户和组并赋予权限,而后数据库初始化
4.设置数据库root密码linux
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了
这里数据库的编译是最基础的,没有不少参数,有需求本身加,而后这里的编译须要的时间可能会有点久。c++