Docker之Dockerfile案例演示

  上篇文章我們給大家介紹了Dockerfile中的常用指令,本文我們通過具體的案例來說明這些指令。

1.Base鏡像

  Docker Hub中99%的鏡像都是通過在base鏡像中安裝和配置需要的軟件構建出來的,如下

在這裏插入圖片描述

scratch相對於java中的Object

2.自定義鏡像mycentos

  我們從官方pull下來的centos鏡像是mini版的,所以不帶有vim這些基礎命令,那我們就來自定義一個鏡像,功能比官方下載的強大點,同時運用下各個指令。

2.1 編寫

  首先我們來編寫對應的Dockerfile文件。內容如下

FROM centos
MAINTAINER bobo<[email protected]>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim

EXPOSE 80

CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

2.2 構建

  然後將腳本構建成對應的鏡像文件。

docker build -f dockerfile名稱 -t 新建的鏡像名:TAG .

在這裏插入圖片描述

查看鏡像
在這裏插入圖片描述

2.3 運行

  運行鏡像文件。

docker run -it 新鏡像名稱:TAG

在這裏插入圖片描述

運行容器後,落腳點是 /usr/local 因爲我們配置了WORKDIR

2.4 鏡像歷史

  查看一個鏡像文件的變更歷史可以使用如下命令:

docker history 鏡像名

在這裏插入圖片描述

在本例中我們用到了 FROM MAINTAINER RUN EXPOSE ENV WORKDIR 命令

3.CMD/ENTRYPOINT案例

  接下來我們通過案例來看看CMDENTRYPOINT兩個命令的區別,這兩個命令的作用都是指定一個容器啓動時要運行的命令

3.1 CMD

  Dockerfile中可以有多個CMD指令,但只有最後一個生效,CMD會被docker run之後的參數替換掉,我們通過tomcat的案例來介紹。
正常情況如下

docker run -it -p 8888:8080 tomcat

在這裏插入圖片描述

但是當我們在 執行命令後添加參數的話,如下

在這裏插入圖片描述

原因是我們先看Tomact對應的 Dockerfile文件

在這裏插入圖片描述

然而我們的run命令 把Dockerfile中的最後的CMD命令覆蓋了~~

3.2 ENTRYPOINT

  有別於CMD命令,ENTRYPOINT命令是在 docker run 之後的參數會被當做參數傳遞給 ENTRYPOINT,之後形成新的組合命令。我們通過curl指令來介紹這個案例。
Dockerfile文件如下:

FROM centos

RUN yum install -y curl

ENTRYPOINT [ "curl", "-s", "http://www.baidu.com" ]

構建

在這裏插入圖片描述

正常run

在這裏插入圖片描述

-i參數 查看響應報文頭

在這裏插入圖片描述

通過這個例子 可以看到ENTRYPOINT不會覆蓋,而是組合成了一個新的命令。

4.自定義Tomcat9

  最後我們通過自定義一個tomcat鏡像來介紹下ADDCOPY這兩個命令的區別。

4.1 創建個tomcat目錄

在這裏插入圖片描述

4.2 添加一個文件

  在當前目錄下創建一個 hello.txt文件,作用是COPY到容器中

在這裏插入圖片描述

4.3 拷貝相關軟件

  準備對應的jdktomcat的壓縮文件。
在這裏插入圖片描述

4.4 創建Dockerfile文件

  創建對應的Dockerfile文件,如下:

FROM         centos
MAINTAINER    bobo<[email protected]>
#把宿主機當前上下文的hello.txt拷貝到容器/usr/local/路徑下
COPY hello.txt /usr/local/helloincontainer.txt
#把java與tomcat添加到容器中
ADD jdk-8u201-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.0.47.tar.gz /usr/local/
#安裝vim編輯器
RUN yum -y install vim
#設置工作訪問時候的WORKDIR路徑,登錄落腳點
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java與tomcat環境變量
ENV JAVA_HOME /usr/local/jdk1.8.0_201
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.0.47
ENV CATALINA_BASE /usr/local/apache-tomcat-8.0.47
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器運行時監聽的端口
EXPOSE  8080
#啓動時運行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-8.0.47/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-8.0.47/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-8.0.47/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.0.47/bin/logs/catalina.out

4.5 構建

docker build -f dockerfile -t bobotomcat .

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

構建成功。

4.6 run

  構建成功後,我們就可以運行了,命令如下:

docker run -d -p 9080:8080 --name mytomcat -v /mydocker/tomcat/test:/usr/local/apache-tomcat-8.0.47/webapps/test -v /mydocker/tomcat/tomcatlogs/:/usr/local/apache-tomcat-8.0.47/logs --privileged=true bobotomcat

注意:我們在啓動的時候指定了相關的 數據卷
在這裏插入圖片描述

4.7 驗證

在這裏插入圖片描述

4.8 部署web項目

  既然我們已經部署好了我們自己的tomcat容器,而且也設置了對應的數據卷,那麼我們來實際部署一個web案例來看看

4.8.1 web.xml文件

  我們在test目錄下創建WEB-INF目錄,然後創建web.xml文件,

在這裏插入圖片描述

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xmlns="http://java.sun.com/xml/ns/javaee"

  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

  id="WebApp_ID" version="2.5">

  

  <display-name>test</display-name>

 

</web-app>

4.8.2 index.jsp文件

  然後創建一個簡單的jsp文件即可

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

  <head>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>Insert title here</title>

  </head>

  <body>

    -----------welcome------------

    <%="i am in docker tomcat self "%>

    <br>

    <br>

    <% System.out.println("=============docker tomcat self");%>

  </body>

</html>

4.8.3 重啓容器訪問即可

在這裏插入圖片描述

訪問成功~說明搭建OK!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章