1. 构建带基本环境的centos镜像

这里我们基于centos构建基本的操作系统镜像。

1.1 编辑dockerfile

创建文件centos.dockerfile用于构建镜像

############################################
# version : kami/centos
# desc : 构建包含supervisor、ssh环境的centos
############################################

# 设置继承centos官方镜像
FROM centos

# 下面是一些创建者的基本信息
MAINTAINER Kaiming Wan (344277934@qq.com)



# 修改centos mirror(自己提前下载好相应的repo文件用于替换,我这里用的阿里云的镜像仓库)
COPY Centos-7.repo /etc/yum.repos.d
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup \
&& yum clean all \
&& yum makecache

# 安装相关环境
RUN yum -y install wget openssh-server 


# 复制pip和easy_install的镜像配置文件,使用阿里云镜像(这里用户为root)
COPY pip.conf /pip_conf/pip.conf
COPY pydistutils.cfg /pip_conf/.pydistutils.cfg
RUN mkdir ~/.pip \
&& mv /pip_conf/pip.conf ~/.pip \
&& mv /pip_conf/.pydistutils.cfg ~ 

# 安装pip
RUN yum -y install python-setuptools python-setuptools-devel 
RUN easy_install pip 

# 安装supervisor
RUN pip install supervisor


# 添加 supervisord 的配置文件,并复制配置文件到对应目录下面。(supervisord.conf文件和Dockerfile文件在同一路径)
COPY supervisord.conf /etc/supervisor/supervisord.conf

#仅暴露22和80端口(这里注释掉了,暴露所有端口)
# EXPOSE 22 80

# 执行supervisord来同时执行多个命令,使用 supervisord 的可执行路径启动服务。
CMD ["/usr/bin/supervisord"]

1.2 编写supervisord.conf

[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D

1.3 构建centos镜像

docker build -f centos7.dockerfile -t kami/centos .

2. 构建带JDK1.7环境的镜像

2.1 编辑dockerfile

############################################
# version : kami/jdk7
# desc : 当前版本安装的jdk7
############################################

# 设置继承centos官方镜像
FROM kami/centos

# 下面是一些创建者的基本信息
MAINTAINER Kaiming Wan (344277934@qq.com)

# 设置环境变量,所有操作都是非交互式的
ENV DEBIAN_FRONTEND noninteractive

# 添加 supervisord 的配置文件,并复制配置文件到对应目录下面。(supervisord.conf文件和Dockerfile文件在同一路径)
COPY supervisord.conf /etc/supervisor/supervisord.conf

# 设置 jdk 的环境变量,若读者有其他的环境变量需要设置,也可以在这里添加。
ENV JAVA_HOME /srv/jdk7

# 复制 jdk1.7.0_80 文件到镜像中(jdk1.7.0_80 文件夹要和Dockerfile文件在同一路径)
ADD jdk1.7.0_80 /srv/jdk7

# 执行supervisord来同时执行多个命令,使用 supervisord 的可执行路径启动服务。
CMD ["/usr/bin/supervisord"]

2.2 编写supervisord.conf

[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D

2.3 在centos镜像基础上构建docker镜像

docker build -f jdk7.dockerfile -t kami/jdk7 .

3. 基于JDK7镜像构建tomcat环境

3.1 编写dockerfile

############################################
# version : centos/Tomcat/7.0.75
# desc : 基于jdk7的tomcat7.0.75镜像
############################################
# 设置继承自我们创建的 jdk7 镜像
FROM kami/jdk7

# 下面是一些创建者的基本信息
MAINTAINER Kaiming Wan (344277934@qq.com)

# 设置环境变量,所有操作都是非交互式的
ENV DEBIAN_FRONTEND noninteractive

# 添加 supervisord 的配置文件,并复制配置文件到对应目录下面。(supervisord.conf文件和Dockerfile文件在同一路径)
COPY supervisord.conf /etc/supervisor/supervisord.conf

# 设置 tomcat 的环境变量,若读者有其他的环境变量需要设置,也可以在这里添加。
ENV CATALINA_HOME /srv/tomcat/tomcat

# 复制 apache-tomcat-7.0.75文件到镜像中(apache-tomcat-7.0.75 文件夹要和Dockerfile文件在同一路径)
COPY apache-tomcat-7.0.75 /srv/tomcat/tomcat

# 容器需要开放Tomcat 8080端口
EXPOSE 8080

# 容器需要开放SSH 22端口
EXPOSE 22

# 执行supervisord来同时执行多个命令,使用 supervisord 的可执行路径启动服务。
CMD ["/usr/bin/supervisord"]

3.2 编写supervisord.conf

[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D

[program:tomcat]
command=/bin/bash -c "exec ${CATALINA_HOME}/bin/catalina.sh run"

3.3 在jdk镜像基础上构建tomcat镜像

docker build -f tomcat.dockerfile -t kami/tomcat7 .

3.4 尝试运行tomcat容器

docker run -p 10022:22 -p18080:8080 kami/tomcat7

用tomcat7镜像成功启动的效果如下图。

4. 构建mysql镜像

docker pull mysql:latest