一個實戰讓你搞懂Dockerfile

摘要

在認識Dockerfile的基礎功能之後,即一個用基礎鏡像來構建新鏡像的文本文件,就需要在實際工作中使用其靈活便利的操作來提升我們的工作效率了,這裡演示在Tomcat里運行一個程式的過程,以此來感受Docker帶給我們的便利。

通常以往的操作,或者目前大部分的操作依然還是這樣:在一個伺服器上安裝 JDK 和 Tomcat,然後上傳war包到Tomcat指定目錄下,或者一個jar包,直接運行即可。這樣可能一個伺服器就只能安裝一個JDK和一個Tomcat,當然多個也是可以的,只不過非常麻煩,這個Dockerfile就可以完美解決,並且互相毫不影響。當然這裡就只是簡單舉個例子,實時上還有其他很多不同之處,都有非常優秀的一面。

編寫Dockerfile

這裡我們直接編寫Dockerfile文件,首先要準備Jdk和Tomcat安裝包

tomcat://dlcdn.apache.org/tomcat/tomcat-9/v9.0.62/bin/apache-tomcat-9.0.62.tar.gz

jdk://download.oracle.com/otn/java/jdk/8u331-b09/165374ff4ea84ef0bbd821706e29b123/jdk-8u331-linux-x64.tar.gz

記住創建一個空白的目錄,然後這個目錄只存放我們需要的文件

[root@hadoop101 ~]# cd /home/docker_test/docker_files/mytomcat
[root@hadoop101 mytomcat]# ll
total 155832
-r-------- 1 root root  11560971 Apr 21 23:49 apache-tomcat-9.0.62.tar.gz
-rw-r--r-- 1 root root      1099 Apr 22 00:29 Dockerfile
-r-------- 1 root root 148003999 Apr 21 23:47 jdk-8u331-linux-x64.tar.gz
-rw-r--r-- 1 root root         0 Apr 22 00:20 readme.txt
[root@hadoop101 mytomcat]#

這裡我們把jdk和tomcat安裝包放在這個目錄下,然後加一個說明文檔。

下面是Dockerfile文件具體內容:

FROM centos
MAINTAINER zhangbaohpu
COPY readme.txt /usr/local/readme.txt
​
#這裡會自動解壓
ADD jdk-8u331-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.62.tar.gz /usr/local/
​
ENV mypath /usr/local
WORKDIR $mypath
​
#將原有的yum配置備份下
RUN tar cvf /etc/yum.repos.d.tar /etc/yum.repos.d
​
#修改yum源配置,
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo //mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
​
#刪除掉多於的repo文件
RUN rm -rf /etc/yum.repos.d/CentOS-Linux-*
​
#使yum配置更新
RUN yum clean all
RUN yum makecache
​
#下載需要的工具類
RUN yum -y install vim
​
#設置環境變數
ENV JAVA_HOME /usr/local/jdk1.8.0_331
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.62
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.62
​
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
​
#對外暴露埠
EXPOSE 8080
​
#容器啟動之後再啟動tomcat,並打開日誌
CMD /usr/local/apache-tomcat-9.0.62/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.62/logs/catalina.out

註:最新默認的Centos版本是8,自帶的yum源已經失效,所以在這裡我們順便修改下yum源,然後再下載其他工具。

構建鏡像

Dockerfile文件編寫完成之後,就可以構建自己的鏡像了,切記在Dockerfile所在目錄下執行。

[root@hadoop101 mytomcat]# docker build -t mytomcat .
#具體構建過程太長就不再展示了,只要最後有兩個Successfully就表示構建完成。
[root@hadoop101 mytomcat]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
mytomcat              latest    b9cee7d729a7   10 minutes ago   697MB

運行鏡像

有了我們自己自定義的鏡像之後,就可以運行一個鏡像實例,然後部署我們實際的應用程式

[root@hadoop101 mytomcat]# docker run -d -p 9090:8080 --name baotomcat -v /home/zhangbao/build/tomcat/test:/usr/local/apache-tomcat-9.0.62/webapps/test -v /home/zhangbao/build/tomcat/logs:/usr/local/apache-tomcat-9.0.62/logs mytomcat

訪問 //192.168.88.71:9090/ 就可以看到熟悉的頁面了

命令解釋:

-p 9090:8080 將容器內埠映射到宿主機埠

–name baotomcat 容器名稱

-v /home/zhangbao/build/tomcat/test:/usr/local/apache-tomcat-9.0.62/webapps/test 將程式test根目錄掛載到宿主機的指定目錄下,前面為宿主機目錄

-v /home/zhangbao/build/tomcat/logs:/usr/local/apache-tomcat-9.0.62/logs 掛載日誌目錄

最後一個是指定運行的鏡像

部署項目

下面我們可以在宿主機發布程式了,因為部署程式test已經掛載到宿主機上了

[root@hadoop101 mytomcat]# cd /home/zhangbao/build/tomcat/
[root@hadoop101 tomcat]# ll
total 0
drwxr-xr-x 2 root root 197 Apr 22 22:26 logs
drwxr-xr-x 2 root root   6 Apr 22 22:26 test
[root@hadoop101 tomcat]# cd test
[root@hadoop101 test]# ll
總用量 4
-rw-r--r-- 1 root root 266 4月  22 23:46 index.jsp
drwxr-xr-x 2 root root  21 4月  22 23:52 WEB-INF

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
 
</body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
        xmlns="//java.sun.com/xml/ns/javaee"
        xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="//java.sun.com/xml/ns/javaee 
        //java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
</web-app>

然後訪問 //192.168.88.71:9090/test/ 可以看到Hello wold!

更多請在公號平台搜索:選手一號位,本文編號:2005,回復即可獲取。