Docker——Dockerfile(构建自己的CentOS镜像和Tomcat镜像)并打包镜像发布上线

Dockerfile概述

  • Dockerfile是用来构建Dokcer镜像的文件!命令参数脚本
  • 构建步骤
    • 编写一个Dockerfile文件
    • Docker build构建成为一个镜像
    • Docker run 运行镜像
    • Docker push发布镜像(DockerHub、阿里云镜像仓库
  • 很多官方镜像都是基础包,我们通常会自己搭建自己的镜像

Dockerfile构建过程

  • 构建过程会有很多的指令
    在这里插入图片描述
  • Dockerfile基础知识
    • 每个保留关键字(指令)都必须是大写字母
    • 指令是从上到下依次执行的
    • #表示注释
    • 每一个指令都会创建提交一个新的镜像层,并提交!
  • Dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写Dockerfile文件,这个文件十分简单!
  • Docker镜像逐渐成为企业交付的标准,必须要掌握!
  • 构建步骤,三步(开发部署运维):
    • Dockerfile构建文件,定义了一切的步骤,源代码
    • Dockerimages:通过Dockerfile构建生成的镜像,就是最终发布和运行的产品
    • Docker容器:容器就是镜像运行起来提供服务的

Dockerfile指令说明

在这里插入图片描述

指令说明
FROM基础镜像,一切从这里开始构建
MAINTAINER镜像是谁写的,姓名+邮箱
RUN镜像构建的时候需要运行的命令
ADD步骤:如大家tomcat镜像,这个tomcat压缩包!(添加内容)
WORKDIR指定镜像的工作目录
VOLUME挂载的目录位置
EXPOSE指定暴露端口
CMD指定这个容器启动要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT指定这个容器启动要运行的命令,可以追加命令
ONBUILD当构建一个被继承Dockerfile 这个时候就会运行ONBUILD的指令,触发指令
COPY类似ADD,将我们文件拷贝到镜像中
ENV构建的时候设置环境变量

实战:构建自己的CentOS

  • Docker Hub99%镜像都是从这个基础镜像过来的FROM scratch,然后配置需要的软件和配置来进行构建的
    在这里插入图片描述
mkdir dockerfire

#默认的官方CentOS没有一些命令,自己构建一个具有基础命令的CentOS

#编写Dockerfile的文件
[root@docker dockerfire]# vim mydockerfile       
FROM centos                                
MAINTAINER pakho<1064981253@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash

#通过这个文件构建镜像
[root@docker dockerfire]# docker build -f mydockerfile -t mycentos:0.1 .
#-f:dockerfile文件路径 -t:镜像名:[tag]

Successfully built 391ea92c0b6c
Successfully tagged mycentos:0.1

#测试运行
docker run -it mycentos:0.1
#ifconfig已经能够使用
[root@1af3e35224a6 local]# ifconfig 
  • 通过Docker history可以查看镜像构建历史
    • 我们平时拿到一个镜像后,可以研究它是怎么做的
docker images

[root@docker dockerfire]# docker history 391ea92c0b6c
IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
391ea92c0b6c   8 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B        
a56b4745d241   8 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
cd5c8b221c1d   8 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
d96bd4a3dd37   8 minutes ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
6ca540fbb09a   8 minutes ago   /bin/sh -c yum -y install net-tools             24.9MB    
032bc69f6df0   8 minutes ago   /bin/sh -c yum -y install vim                   60.7MB    
b6da798d1552   9 minutes ago   /bin/sh -c #(nop) WORKDIR /usr/local            0B        
c13af64a7d3e   9 minutes ago   /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0B        
fff65a8bbee7   9 minutes ago   /bin/sh -c #(nop)  MAINTAINER pakho<10649812…   0B        
300e315adb2f   6 months ago    /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      6 months ago    /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      6 months ago    /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7…   209MB

CMD和ENTRYPOINT的区别

  • 测试CMD命令
[root@docker dockerfire]# vim dockerfile-cmd-test
#启动CentOS执行ls -a
FROM centos
CMD ["ls","-a"]

#执行构建命令
[root@docker dockerfire]# docker build -f dockerfile-cmd-test -t cmdtest .

#构建完成后通过run运行,发现ls -a命令生效
[root@docker dockerfire]# docker run 3a20dce5f782

#追加一个命令,发现报错
[root@docker dockerfire]# docker run 3a20dce5f782 -l
#cmd的清理下-l 替换了CMD ["1s","-a"]命令,-l不是命令所以报错!
  • 测试ENTRYPOINT命令
    • 追加!
[root@docker dockerfire]# vim dockerfile-cmd-entrypoint
FROM centos
ENTRYPOINT ["ls","-a"]

#执行构建命令
[root@docker dockerfire]# docker build -f dockerfile-cmd-entrypoint -t entrypoint-test .

#通过run运行,能够正常执行ls -a命令
[root@docker dockerfire]# docker run 23bc748e7f4b

#我们的追加命令是直接拼接在ENTRYPOINT的后面
[root@docker dockerfire]# docker run 23bc748e7f4b -l
  • Dokcerfile中很多命令及其相似,我们需要了解他们的区别

实战:Dockerfile构建Tomcat镜像

  • 准备镜像文件,Tomcat压缩包,jdk压缩包
[root@docker tomcat]# ls
apache-tomcat-9.0.48.tar.gz  jdk-8u291-linux-x64.tar.gz
  • 编写Dockerfile文件
    • 官方推荐命名Dockerfilebuild会自动寻找这个文件,就不需要 -f 指定文件了!
[root@docker tomcat]# touch readme.txt
[root@docker tomcat]# vim Dockerfile                               #编写Dockerfile文件
FROM centos                                  
MAINTAINER pakho<1064981253@qq.com>                                #作者名+邮箱

COPY readme.txt /usr/local/readme.txt                              #拷贝目录下的自述文件至容器内部/usr/local

#使用ADD命令会自动解压
ADD jdk-8u291-linux-x64.tar.gz /usr/local/                         #添加jdk安装包
ADD apache-tomcat-9.0.48.tar.gz /usr/local/                        #添加tomcat安装包

RUN yum -y install vim                                             #安装vim

ENV MYPATH /usr/local                                              #设置进入容器时的工作目录
WORKDIR $MYPATH                                         

ENV JAVA_HOME /usr/local/jdk1.8.0_291                              #设置jdk变量
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar     
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.48                  #设置tomcat变量
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.48
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080                                                        #暴露端口8080

#启动tomcat 还希望展示日志
CMD /usr/local/apache-tomcat-9.0.48/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.48/bin/logs/catalina.out

#构建镜像
[root@docker tomcat]# docker build -t diytomcat .

#启动镜像
[root@docker tomcat]# docker run -d -p 9090:8080 --name pakhotomcat2 -v /home/heyihao/tomcat/test:/usr/local/apache-tomcat-9.0.48/webapps/test -v /home/heyihao/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.48/logs diytomcat

#进入容器
[root@docker tomcat]# docker exec -it 863d7fa2cdeb /bin/bash

#宿主机测试
[root@docker ~]# curl localhost:9090

在这里插入图片描述

//发布项目,由于做了卷挂载,直接在本地编写项目即可

[root@docker test]# mkdir WEB-INF
//编辑xml文件
[root@docker test]# vim WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
  <web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                               http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
           version="2.5">

  </web-app>

//编写一个jsp文件
[root@docker test]# vim index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hello,pakho</title>
</head>
<body>
Hello World!<br/>
<%
System.out.println("----my test web logs----");
%>
</body>
</html>

//追踪日志
[root@docker tomcatlogs]# tailf catalina.out
  • 测试完成,能够正常访问
    在这里插入图片描述

发布镜像至DockerHub

  • https://hub.docker.com/
  • 确定账户登录
  • 在服务器上提交镜像
  • docker login
  • 登录完成后就可以提交镜像了,就是一步docker push
    • 提交的时候也是按照层级进行提交的!
#登录
[root@docker ~]# docker login -u pakho611
Password:                                   #输入dockerhub密码

Login Succeeded                             #登录成功

#为镜像修改为规范的镜像
[root@docker ~]# docker tag diytomcat pakho611/diytomcat:1.0
[root@docker ~]# docker images
REPOSITORY           TAG       IMAGE ID       CREATED        SIZE
pakho611/diytomcat   1.0       30a5aabdb38b   9 hours ago    646MB

#提交镜像
docker push 注册用户名/镜像名/版本号
[root@docker ~]# docker push pakho611/diytomcat:1.0
1.0: digest: sha256:a6a41622f98e52eab9b56dd9bda8a62c4ebe49ddeeeb32b8dad17ec5839e19ef size: 1373

在这里插入图片描述

发布镜像至阿里云容器服务

  • 登录阿里云
  • 找到容器镜像服务
  • 第一次登录需要创建仓库
  • 根据官方提示进行登陆
    • 参考官方文档即可
[root@docker ~]# docker login --username=作恶多端evil registry.cn-hangzhou.aliyuncs.com

Login Succeeded

[root@docker ~]# docker tag diytomcat registry.cn-hangzhou.aliyuncs.com/pakho/diytomcat:1.0

[root@docker ~]# docker push registry.cn-hangzhou.aliyuncs.com/pakho/diytomcat:1.0
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/pakho/diytomcat]
bc32333b4176: Pushed 
ecf186c3bcaa: Pushed 
f4783a52c44c: Pushed 
a089274b1442: Pushed 
2653d992f4ef: Pushed 
1.0: digest: sha256:a6a41622f98e52eab9b56dd9bda8a62c4ebe49ddeeeb32b8dad17ec5839e19ef size: 1373

在这里插入图片描述

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
您可以按照以下步骤制作Tomcat镜像: 1. 创建一个新的目录,例如 "tomcat-docker"。 2. 在该目录中创建一个名为 "Dockerfile" 的文件,并输入以下内容: ``` # 基于centos7镜像创建 FROM centos:7 # 设置环境变量 ENV TOMCAT_VERSION 9.0.41 ENV CATALINA_HOME /opt/tomcat # 安装必要的软件包 RUN yum update -y && \ yum install -y java-1.8.0-openjdk-devel wget && \ yum clean all # 下载Tomcat安装包 RUN wget https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-9/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz && \ tar -zxvf apache-tomcat-${TOMCAT_VERSION}.tar.gz && \ rm -f apache-tomcat-${TOMCAT_VERSION}.tar.gz && \ mv apache-tomcat-${TOMCAT_VERSION} ${CATALINA_HOME} # 删除Tomcat中自带的webapps RUN rm -rf ${CATALINA_HOME}/webapps/* # 暴露Tomcat端口 EXPOSE 8080 # 启动Tomcat CMD ["/opt/tomcat/bin/catalina.sh", "run"] ``` 该Dockerfile做了以下事情: - 基于CentOS 7镜像创建一个新的镜像。 - 设置了环境变量,包括Tomcat版本和安装路径。 - 安装了Java和wget软件包。 - 下载并解压了Tomcat安装包。 - 删除了Tomcat中自带的webapps目录(可以根据需要更改)。 - 暴露了Tomcat的8080端口。 - 启动Tomcat。 3. 在该目录中运行以下命令构建Tomcat镜像: ``` docker build -t my-tomcat . ``` 其中,"my-tomcat"是您的镜像名称,可以根据需要更改。 4. 运行以下命令启动Tomcat容器: ``` docker run -d -p 8080:8080 my-tomcat ``` 其中,"-d"选项表示容器将在后台运行,"-p"选项将主机的8080端口映射到容器的8080端口,"my-tomcat"是您之前构建Tomcat镜像名称。 5. 访问 http://localhost:8080 即可查看Tomcat主页。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

611#

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值