博文大纲:
一、构建Nginx容器
二、构建Tomcat容器
三、构建MySQL容器
注意:一定要配置宿主机可以连接Internet,因为在构建容器的过程中,很多资源需要去互联网找。

一、构建Nginx容器
Nginx是一款轻量级的web服务器,也是一个优秀的反向代理服务器。Nginx服务占用内存少,并发能力强,下面是构建Nginx容器的具体操作:

[root@localhost ~]# docker pull centos #下载centos 7的基础镜像,该镜像也将会被后面构建的Tomcat和MySQL容器所使用。
 [root@localhost ~]# mkdir nginx #创建工作目录
 [root@localhost ~]# cd nginx/
 [root@localhost nginx]# vim Dockerfile #编写dockerfile文件,用来实现Nginx安装过程
 #写入以下内容
 FROM centos #设置基础镜像
 MAINTAINER the centos project #维护该镜像的用户信息
 RUN yum -y install wget proc-devel net-tools gcc zlib zlib-devel make openssl-devel #安装相关依赖包
 RUN wget http://nginx.org/download/nginx-1.9.7.tar.gz #下载Nginx源码包
 RUN tar zxf nginx-1.9.7.tar.gz #解压下载的源码包
 WORKDIR nginx-1.9.7 #指定容器中的工作路径
 RUN ./configure --prefix=/usr/local/nginx && make && make install #配置及编译安装
 #开启容器的80/443端口
 EXPOSE 80
 EXPOSE 443
 RUN echo “daemon off;”>>/usr/local/nginx/conf/nginx.conf #修改配置文件,以非daemon方式启动
 ADD run.sh /run.sh #上传运行脚本
 RUN chmod 775 /run.sh #赋予脚本权限
 CMD ["/run.sh"] #启动容器时执行脚本,编辑完成后,保存退出即可
 [root@localhost nginx]# vim run.sh #编辑运行脚本,写入以下内容#!/bin/bash
 /usr/local/nginx/sbin/nginx
 [root@localhost nginx]# ls #确定当前目录下有以下文件
 Dockerfile run.sh
 [root@localhost nginx]# docker build -t nginx:zjz . #生成镜像,千万不要忽略命令末尾的点“.”号,否则会报错
 …#省略部分内容
 Successfully built cd6ac93f3680 #出现这行提示信息,则表示创建成功
 [root@localhost nginx]# docker run -d -P nginx:zjz #启动该容器,“-d”表示持久化运行,“-P”表示将容器的端口映射到宿主机
 895c19da98f3256acb20939dcc7abb4d26273287ddfc0810efc0940a55d04c10
 [root@localhost nginx]# docker ps -a #查看容器,其中32769、32768就是容器映射到宿主机的端口
 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
 895c19da98f3 nginx:ljz “/run.sh” 6 seconds ago Up 5 seconds 0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp nervous_brahmagupta

访问容器进行测试,Nginx是否运行成功!如下(访问宿主机的32769端口,就相当于访问了容器的80端口):

群晖自带nginx 和 npm冲突 群晖搭建nginx_nginx


二、构建Tomcat容器

Tomcat是一个免费开源的轻量级web服务器,在中小型企业和并发量不高的场合普遍使用,是开发和调试JSP程序的首选。下面使用Dockerfile文件的方式来创建带有Tomcat服务的docker镜像。

准备工作:点击下载JDK源码包,并放置Linux宿主机的Tomcat工作目录。

[root@localhost ~]# mkdir tomcat #创建Tomcat的工作目录
 [root@localhost ~]# cd tomcat/ #切换至Tomcat目录
 [root@localhost tomcat]# rz #我这里将本地的JDK源码包上传了上来(我这里使用的是xshell连接的)
 [root@localhost tomcat]# ls #查看
 jdk-8u91-linux-x64.tar.gz
 [root@localhost tomcat]# tar zxf jdk-8u91-linux-x64.tar.gz #解包
 [root@localhost tomcat]# vim Dockerfile #编写dockerfile文件FROM centos #基础镜像centos
 MAINTAINER The centos project zjz916551516@163.com #维护该镜像的用户信息
 ADD jdk1.8.0_91 /usr/local/jdk-8u91 #将本地的JDK文件上传至容器
 #以下是设置JDK环境变量
 ENV JAVA_HOME /usr/local/jdk-8u91
 ENV JAVA_BIN /usr/local/jdk-8u91/bin
 ENV JRE_HOME /usr/local/jdk-8u91/jre
 ENV PATH $PATH:/usr/local/jdk-8u91/bin:/usr/local/jdk-8u91/jre/bin
 ENV CLASSPATH /usr/local/jdk-8u91/jre/bin:/usr/local/jdk-8u91/lib:/usr/local/jdk-8u91/jre/lib/charsets.jar
 RUN yum -y install wget #安装wget工具
 RUN wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-8.5.38.tar.gz
 #下载Tomcat源码包
 RUN tar zxf apache-tomcat-8.5.38.tar.gz #解压Tomcat源码包
 RUN mv apache-tomcat-8.5.38 /usr/local/tomcat #移至安装目录
 EXPOSE 8080 #开启8080端口
 ADD run.sh /run.sh #添加运行脚本
 RUN chmod 775 /run.sh #赋予脚本执行权限
 CMD ["/run.sh"] #运行脚本,编写完毕后,保存退出即可。
 [root@localhost tomcat]# vim run.sh #编写执行脚本内容#!/bin/bash
 /usr/local/tomcat/bin/startup.sh
 tailf /run
 [root@localhost tomcat]# ls #确保当前目录下有以下文件
 Dockerfile jdk1.8.0_91 jdk-8u91-linux-x64.tar.gz run.sh
 [root@localhost tomcat]# docker build -t tomcat:zjz . #生成镜像,千万不要忽略命令末尾的点“.”号,否则会报错
 …#省略部分内容
 Successfully built 94c59c9239ec #出现这行提示信息,则表示创建成功
 [root@localhost tomcat]# docker run -d --name tomcat -p 8080:8080 tomcat:ljz
 #运行刚刚创建的Tomcat容器,并指定容器的名字为Tomcat,映射到宿主机的8080端口。
 5d8a5714166ef63208511bb1123c5568d0562b1b3734db4eec2aed733d8a733d
 [root@localhost tomcat]# docker ps -a | grep tomcat #查看Tomcat容器的状态是否正常
 5d8a5714166e tomcat:zjz “/run.sh” 20 seconds ago Up 19 seconds 0.0.0.0:8080->8080/tcp tomcat

客户端访问Linux宿主机的8080端口,测试是否能够访问到Tomcat容器提供的web服务,如下:

群晖自带nginx 和 npm冲突 群晖搭建nginx_mysql_02


看到以上页面,则表示Tomcat容器构建成功。

这里简单说一下Tomcat和apache的区别:它们都是Aache开源组织开发的用于处理HTTP服务的项目。两者都免费,也都可以作为独立的web服务器运行。Apache是C语言实现的,主要解析静态文本,并发性高,侧重于HTTP服务,Tomcat是java开发的一个符合JavaEES的JSP服务器,属于Apache的扩展,主要用于解析JSP/Servlet,侧重于Servlet引擎。

三、构建MySQL容器
MySQL是当下最流行的关系型数据库,所使用的SQL语言是用于访问数据库的最常用标准化语言,MySQL具有体积小、速度快、成本低的优势,是中小型企业首选的数据库。

开始构建MySQL容器:

[root@localhost ~]# docker pull docker.io/guyton/centos6 #下载centos 6作为基础镜像
 [root@localhost ~]# mkdir mysql #创建工作目录
 [root@localhost ~]# cd mysql/ #切入工作目录
 [root@localhost mysql]# vim Dockerfile #编辑dockerfile文件FROM guyton/centos6
 MAINTAINER the centos project-mysql
 RUN yum -y install mysql mysql-server
 RUN /etc/init.d/mysqld start && 
 mysql -e “grant all privileges on . to ‘root’@’%’ identified by ‘123456’;”&&
 mysql -e “grant all privileges on . to ‘root’@‘localhost’ identified by ‘123456’;”
 EXPOSE 3306
 CMD [“mysqld_safe”]
 [root@localhost mysql]# docker build -t mysql:zjz . #生成镜像,千万不要忽略命令末尾的点“.”号,否则会报错
 …#省略部分内容
 Successfully built 30414dc7bc02 #出现这行提示信息,则表示创建成功
 [root@localhost ~]# docker run -d --name mysql -P mysql:zjz #运行容器,并定义容器名称为mysql
 ea1a8aa2d1f18e0d06c4bdf47a6b743f3763247f13c6335b3fc7b785baf7332f
 [root@localhost ~]# docker ps -a | grep mysql #确认容器处于运行状态
 ea1a8aa2d1f1 mysql:zjz “mysqld_safe” 41 seconds ago Up 40 seconds 0.0.0.0:32770->3306/tcp mysql
 [root@localhost ~]# mysql -h 192.168.1.1 -u root -P 32770 -p123456
 #对容器中的数据库进行访问测试,若无法使用mysql命令,请自行执行“yum -y install mysql”进行安装
 Welcome to the MariaDB monitor. Commands end with ; or \g.
 …#省略部分内容MySQL [(none)]> #命令提示符发生变化,登录到了容器中的数据库
 MySQL [(none)]> show databases; #查看数据库的数据
 ±-------------------+
 | Database |
 ±-------------------+
 | information_schema |
 | mysql |
 | test |
 ±-------------------+
 3 rows in set (0.00 sec)MySQL [(none)]> exit #退出
 Bye