Docker篇之三dockerfile构建nginx+tomcat镜像

一、dockerfile理论解释

1.1 dockerfile是什么,能干什么?

dockerfile是一个文本文件,里面是大量的指令和说明,方便我们用来构建镜像的。

1.2 dockerfile命令详解

1.dockerfile文件基本组成

点击查看dockerfile代码
FROM centos  #拉取一个基础镜像centos
MAINTAINER nfl324    #创作者,可以把dockerfile文件放在dockerhub
RUN rm -rf /etc/yum.repos.d/*  #删除容器中的yum源
COPY Centos-vault-8.5.2111.repo /etc/yum.repos.d/  #复制repo源到指定目录
RUN yum install wget -y  #在容器中需要下载wget
RUN yum install nginx -y  #容器中安装nginx服务
COPY index.html /usr/share/nginx/html/  #nginx安装后,默认在/usr/share/nginx/html/目录下有index.html文件,在物理机上新创建index.html文件,并替换nginx默认时的index.html文件。
EXPOSE 80    #指定容器的nginx服务端口为80
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]  #容器起来后,指定一下启动容器中的nginx服务
2.**命令解释**

二、dockerfile构建nginx镜像

1、环境描述

宿主机:centos7.9.2009
centos镜像:centos8.4.2105

2、先在宿主机上,pull拉取centos镜像。

[root@docker ~]# docker pull centos:8.4.2105 #dockerhub中目前最新的镜像
image

3、根据这个centos基础镜像,构建nginx镜像

3.1 构建属于nginx的dockerfile文件

[root@docker ~]# mkdir -p /opt/nginx/dockerfiles/ #宿主机上创建/opt/nginx/dockerfiles/ 目录
[root@docker ~]# cd /opt/nginx/dockerfiles/ #进入目录
[root@docker dockerfiles]# vim dockerfile #新建dockerfile文件,把下面代码写入进去

点击查看dockerfile文件的代码
FROM centos
MAINTAINER nfl324
RUN cd /etc/yum.repos.d/ && sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
RUN yum -y install wget
RUN yum -y install nginx
COPY index.html /usr/share/nginx/html/
EXPOSE 80
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]    #以这个dockerfile构建的容器启动时,自动运行容器中的nginx服务

[root@docker dockerfiles]# vim index.html #在当前目录下,新建index.html文件,并填写如下

点击查看index.html文件代码
<html>
<body>my is nginx.base on centos8.4.this is first test</body>
</html>

image

3.2 以centos为基础镜像,以dockerfile文件去 构建名为“nfl/nginx:v1”的镜像

[root@docker dockerfiles]# docker build -t="nfl/nginx:v1" . #最后一个"圆点",在当前目录下,构建镜像
[root@docker dockerfiles]# docker images | grep nginx #查看镜像是否构建成功
image

image

3.3 基于nfl/nginx镜像,启动一个名为“web01”容器

[root@docker dockerfiles]# docker run -d -p 80 --name="web01" nfl/nginx:v1
[root@docker dockerfiles]# docker ps | grep web01 #查看容器是否启动成功
image

3.4 宿主机上去访问上面的端口

浏览器访问:http://宿主机ip:端口 例如我这边的:http://192.168.10.83:49153
image

四、dockerfile构建tomcat(基础版+优化版)

4.1 基础版本(构建镜像+运行容器+手动启动容器tomcat服务)

4.1.1 构建属于tomcat的dockerfile文件

[root@docker /]# mkdir -p /opt/tomcat/dockerfiles/ #创建/opt/tomcat/dockerfiles/目录
[root@docker /]# cd /opt/tomcat/dockerfiles/ #进入目录
[root@docker dockerfiles]# vim dockerfile #创建新的dockerfile文件,内容如下

点击查看dockerfile文件代码
FROM centos   
MAINTAINER nfl324
RUN cd /etc/yum.repos.d/ && sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
RUN yum -y install wget
COPY jdk-8u45-linux-x64.rpm /usr/local/
ADD apache-tomcat-8.0.26.tar.gz /usr/local/
RUN cd /usr/local && rpm -ivh jdk-8u45-linux-x64.rpm
RUN mv /usr/local/apache-tomcat-8.0.26 /usr/local/tomcat8
EXPOSE 8080

把jdk-8u45-linux-x64.rpm、apache-tomcat-8.0.26.tar.gz上传至/opt/tomcat/dockerfiles/ 目录下
image

4.1.2 以centos为基础镜像,以dockerfile文件去 构建名为“nfl/tomcat8:v1”的镜像

[root@docker dockerfiles]# docker build -t="nfl/tomcat8:v1" .
[root@docker dockerfiles]# docker images | grep tomcat #查看是否有这个镜像

4.1.3 以“nfl/tomcat8:v1”镜像,运行一个名为“tomcat8”的容器,进入容器,启动tomcat服务

[root@docker dockerfiles]# docker run --name="tomcat8" -itd -p 8080 nfl/tomcat8:v1
[root@docker dockerfiles]# docker exec -ti tomcat8 /bin/bash #进入容器
[root@5cbb216395ba /]# /usr/local/tomcat8/bin/startup.sh #启动tomcat服务
[root@5cbb216395ba /]# ps -ef | grep tomcat #容器内查看tomcat进程是否启动
image

新开一个终端,查看tomcat容器启动情况,以及在宿主机上随机映射的端口
[root@docker ~]# docker ps
image
浏览器访问:http://宿主机ip:端口 例如:http://192.168.10.83:49154
image

4.2 优化版本(构建镜像+运行容器+自动启动容器中tomcat服务)

4.2.1 构建属于tomcat的dockerfile文件

[root@docker ~]# mkdir -p /opt/tomcatv2/dockerfiles/ #新建/opt/tomcatv2/dockerfiles/目录
[root@docker ~]# cd /opt/tomcatv2/dockerfiles/ #进入该目录
[root@docker dockerfiles]# vim dockerfile #新建dockerfile文件,填写下面内容

点击查看dockerfile文件的代码
MAINTAINER nfl324
RUN cd /etc/yum.repos.d/ && sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
RUN yum -y install wget
ADD jdk-8u45-linux-x64.rpm /usr/local/
ADD apache-tomcat-8.0.26.tar.gz /usr/local/
RUN cd /usr/local && rpm -ivh jdk-8u45-linux-x64.rpm
RUN mv /usr/local/apache-tomcat-8.0.26 /usr/local/tomcat8v2
ENTRYPOINT /usr/local/tomcat8v2/bin/startup.sh && tail -F /usr/local/tomcat8v2/logs/catalina.out
EXPOSE 8080

image

4.2.2 以centos为基础镜像,以dockerfile文件去 构建名为“nfl/tomcat8:v2”的镜像

[root@docker dockerfiles]# docker build -t="nfl/tomcat8:v2" . #需注意在dockerfile所在目录下执行
[root@docker dockerfiles]# docker images | grep tomcat #宿主机外,可以看到刚刚构建的镜像
image

4.2.3 首先停掉之前基础版本的容器(没有启动的可以跳过)

[root@docker dockerfiles]# docker stop 5cbb216395ba

4.2.4 以名为“nfl/tomcat8:v2”的镜像,构建一个名为tomcat8v2的容器

[root@docker dockerfiles]# docker images | grep tomcat #查看有关的镜像
[root@docker dockerfiles]# docker run --name="tomcat8v2" -itd -p 8080 nfl/tomcat8:v2 #创建运行容器

另外开一个终端,查看tomcat8v2容器是否运行成功,以及映射到宿主机的端口
[root@docker ~]# docker ps #映射到宿主机的端口是49151
image

浏览器验证:
http://192.168.10.83:49155/
image

posted @ 2022-06-29 14:26  菜鸟不想早飞  阅读(45)  评论(0)    收藏  举报