docker小白入門(二)—— 通過Dockerfile創建docker鏡像並啓動容器

前言

  1. 這是docker小白入門的第二部分,這部分的主要目的是普及Dockerfile的應用;
  2. Dockerfile作爲docker的自動化配置文件,可以根據文件內容自動生成docker鏡像,鏡像生成後只要啓動容器(run)即可使用平臺,比第一階段稍稍高級一點,但其實還是低級階段;
  3. 本文的目的是讓初學者能馬上寫一個能用的Dockerfile,不至於“從入門到放棄”;

一、安裝docker

最基本的,系統裏得有docker,所以,首先要先 安裝docker (這部分在第一階段有比較詳細的介紹);執行命令

yum -y install docker 

可以用docker version檢查docker是否安裝成功,如果出現 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 的報錯提示,可執行 systemctl daemon-reloadsystemctl restart docker.service
在這裏插入圖片描述

二、爲Dockerfile文件創建工作目錄,編寫Dockerfile

docker安裝完成後,創建工作目錄,我直接在根目錄下創建了docker文件夾;然後編寫Dockerfile文件,並將文件放到文件夾docker下;Dockerfile文件沒有後綴;所有命令如下圖
在這裏插入圖片描述
下面是Dockerfile文件的內部代碼,直接複製粘貼即可,也可以下載一份現成的;

FROM tomcat
WORKDIR /usr/local/tomcat/webapps/ROOT/
RUN rm -fr *
RUN echo 'Hello Docker!' > index.html

二*、注意事項

上面就是一個完整的、極其簡單的Dockerfile,需要解釋以下幾點:

  1. FROM命令是指此鏡像是基於什麼基礎鏡像創建的,tomcat基礎鏡像包含jdk等一系列必備的東西;
  2. WROKDIR命令指定工作路徑,或者說切換當前路徑;
  3. RUN命令有兩大用法,一個是執行shell命令,上面兩條RUN都是執行的shell腳本,所以Dockerfile的複雜主要體現在Shell腳本的編寫,用戶可以針對Shell腳本進入深入學習,以此來增強Dockerfile的編寫能力;RUN的另一個用法是執行exec命令,用法格式爲 RUN ["","參數1","參數2"],入門階段不涉及;
  4. 常用命令還有COPY複製命令,COPY命令也有兩種使用方式,和RUN類似,一個類似命令,一個類似函數調用。類似命令的COPY指令的格式是 COPY <上下文路徑> ... <目標路徑>,上下文路徑就不解釋了,目標路徑就是鏡像中的文件夾的路徑,這倆都是相對路徑。
  5. 常用命令還有一個ADD,和COPY類似,但多了一個功能,即源路徑(上下文路徑)可以是一個URL,同時,如果源文件是tar格式的話,ADD命令會自動解壓文件到目標路徑;但是要注意,ADD指令會令鏡像構建緩存失效,從而可能會令鏡像構建變的比較緩慢;
  6. 後面的demo中有個EXPOSE指令,含義爲暴露端口
  7. CMD命令也和RUN類似,好比執行cmd命令,這個需要一個例子纔好介紹,本例還未涉及到,所以,用戶可先自行百度查看;

補充: 上下文路徑是指,liunx中打包並解壓後的文件夾路徑;

三、執行Dockerfile

Dockerfile文件寫完之後要利用這個Dockerfile創建鏡像,下面就是創建鏡像的執行命令。

docker build -t mydocker .

在這裏插入圖片描述
注意:

  1. 這裏的“mydocker”是鏡像的名字,創建的時候可以隨意起名,但是隻支持小寫字母;
  2. mydocker 後面一定記得跟那個點,不然會報錯,如下圖;
    在這裏插入圖片描述
  3. 如果build創建的過程中出現錯誤,創建失敗,可能會出現[虛懸鏡像],這個時候我們用docker image prune指令來清除虛懸鏡像;如果巧了,虛懸鏡像沒有清除掉,有可能是因爲有容器的生成導致虛懸鏡像刪除失敗,這個時候,使用docker ps -a或者docker ps查看容器,找到佔用的容器後,使用docker rm xxxxxx來移除容器(也可以在rm後面加 -f 來強制刪除容器),容器移除完畢後再重新刪除虛懸鏡像即可。(這部分如果覺得我說的模糊,可以後文留言,我再補充)

此時,鏡像創建完畢

四、啓動鏡像

鏡像創建完畢後,啓動鏡像生成容器(以下面的代碼爲準,截圖中的代碼有誤,懶得重新截圖了),執行命令如下

docker run -d -p 8080:8080 mydocker

啓動成功後我們可以進入容器內部,看到ROOT目錄下只有我們寫進去的index.html文件(進入容器內部用exec命令,使用方法看第一階段)
在這裏插入圖片描述
如果我們在容器內,可以用命令exit命令退出容器;

五、打開頁面,查看效果

在這裏插入圖片描述

以上,這樣我們就通過Dockerfile創建完成了一個,只有一個index.html頁面的web項目,並且可以正常訪問。如果讀者想啓動一個自己的項目,這裏以zip包爲例(即你的項目已經打成了zip包),提供了一個Dockerfile

以下是另一個Dockerfile,這個Dockerfile將一個crm項目打成了zip包,將zip複製到了tomcat下,解壓並移除原始zip包,啓動鏡像,這樣就能將任意項目通過dockerfile的方式啓動了;

FROM tomcat
WORKDIR /usr/local/tomcat/webapps/ROOT/
RUN rm -fr *
COPY crm.zip . 
RUN unzip crm.zip
RUN rm -fr crm.zip
WORKDIR /usr/local/tomcat/
EXPOSE 8080

其他步驟見上文

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