基于Dockerfile构建Nginx、Tomcat、MySQL镜像(含包源)
前言
上篇文章讲述了有关Dockerfile的理论,以及演示了通过其构建的三个镜像服务httpd、sshd以及systemd。本文将结合先前的shell编程与当下的Dockerfile来给出基于Dockerfile构建Nginx、Tomcat以及MySQL模板。
由于时间和篇幅问题,本文将省略build的过程。其中Nginx的构建将基于wget命令从网上下载,后两者将使用本地已有的软件包。
这样的目的一方面是演示多种方式,以及对两种方式的区别,另一方面则是效率问题,从网上获取一般收到影响较大(这个体会将在您build的时候感受出来)。
好了,下面直接给出对应的Dockerfile和相关文件吧。
先给出软件包链接:
基于Dockerfile的Nginx镜像构建
目录结构
[root@localhost nginx]# tree ./
./
├── Dockerfile
└── nginx.sh
0 directories, 2 files
Dockerfile以及其他文件
#基于dockerfile构建nginx镜像
#设置基础镜像
FROM centos:7
#维护该镜像的用户信息
MAINTAINER lokott@123.com
#指令集
#更新及安装相关工具
RUN yum update -y
RUN yum install -y wget lsof telnet net-tools gcc gcc-c++ make pcre pcre-devel zlib zlib-devel
#从官网上下载nginx软件包源并解压
RUN wget http://nginx.org/download/nginx-1.16.1.tar.gz
RUN tar zxf nginx-1.16.1.tar.gz
#创建nginx用户
RUN useradd -M -s /sbin/nologin nginx
#指定后续RUN指令的工作目录
WORKDIR nginx-1.16.1
#配置参数以及编译nginx
RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
RUN make && make install
#ENV PATH /usr/local/nginx/sbin:$PATH
#端口设置
EXPOSE 80
EXPOSE 443
#以非daemon方式运行
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
#切换工作目录
WORKDIR /root/nginx
ADD nginx.sh /nginx.sh
RUN chmod 755 /nginx.sh
#启动容器执行指令
CMD ["/nginx.sh"]
shell脚本文件
[root@localhost nginx]# cat nginx.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
对比手工编译的shell脚本是不是非常类似呢?其中需要注意的有两点:
1、从网上下载需要安装wget工具进行软件包下载并且需要执行tar命令解压,而本地有软件包则会自动解压(看下面两个服务构建镜像过程就可以理解了)
2、nginx通过服务是需要关闭后台运行,否则一直会无法正常运行容器
构建及运行
[root@localhost nginx]# docker build -t nginx:centos .
[root@localhost nginx]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS