Dockerfile
- 一、相關概念
-
- Docker鏡像
- Docker鏡像的建立方法
- 二、Dockerfile常用指令解釋
- 三、建立apache鏡像
- 四、挂載資料卷
一、相關概念
- Dockerfile中的每個指令都會建立一個新的鏡像層(相當于一個臨時容器)
- 鏡像層将被緩存和複用
- 當Dockerfile的指令修改了,複制的檔案變化了,或者建構鏡像時指定的變量不同了,對應的鏡像層緩存就會失效
- 某一層的鏡像緩存失效之後,它之後的鏡像層緩存都會失效
- 鏡像層是不可變的,如果在某一層中添加一個檔案,然後在下一層中删除它,則鏡像中依然會包含該檔案
即:Dockerfile中的指令在執行時會建立一個新的容器,執行新的指令時會删除之前的容器同時再次建立一個新的容器
Docker鏡像
- 應用釋出的标準格式
- 支撐一個Docker容器的運作
Docker鏡像的建立方法
- 基于已有鏡像建立
- 基于本地模闆建立
- 基于Dockerfile(參數)建立
二、Dockerfile常用指令解釋
指令 | 含義 |
---|---|
FROM 鏡像 | 指定新鏡像所要基于的基礎鏡像,第一條指令必須為FROM指令, 建立一個新鏡像就需要一條FROM指令 |
MAINTAINER 名字 | 說明新鏡像的維護人資訊 |
RUN 指令 | 在所基于的鏡像執行指令,并送出到新的鏡像中 |
EXPOSE 端口号 | 指定新鏡像加載到Docker時要開啟的端口 |
ENV 環境變量 變量值 | 設定一個環境變量的值,會被後面的RUN使用 |
ADD 源檔案/目錄 目标檔案/目錄 | 将源檔案複制到目标檔案,源檔案要與Dockerfile位于 相同目錄中,或者是一個URL |
CMD [ “要運作的程式”,“參數1”,“參數2”] | 指令啟動容器時要運作的指令或者腳本,Dockerfile隻能 有一條CMD指令,如果指定多條則隻能執行最後一條 |
COPY 源檔案/目錄 目标檔案/目錄 | 将本地主機上的檔案/目錄複制到目标地點,源檔案/目錄 要與Dockerfile在相同的目錄中 |
VOLUME [“目錄”] | 在容器中建立一個挂載點 |
USER 使用者名/UID | 指定運作容器時的使用者 |
WORKDIR 路徑 | 為後續的RUN、CMD、ENTRYPOINT指定工作目錄 |
ONBUILD 指令 | 指定所生成的鏡像作為一個基礎鏡像時所要運作的指令 |
HEALTHCHECK | 健康檢查 |
三、建立apache鏡像
①建立目錄并編寫Dockerfile檔案
mkdir apache
cd apache
vim Dockerfile
#基于的基礎鏡像
FROM centos:7
#維護鏡像的使用者資訊
MAINTAINER wt
#原鏡像操作指令——安裝apache軟體
RUN yum -y update
RUN yum -y install httpd
#開啟端口
EXPOSE 80
#複制網站首頁檔案到指定位置
ADD index.html /var/www/html/index.html
#将執行腳本複制到容器中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#啟動容器時運作腳本
CMD ["/run.sh"]
②編寫執行腳本
vim run.sh
#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND
③準備網頁文檔
echo "this is the test web" > index.html
④生成鏡像
docker build -t httpd:centos .
在生成鏡像時可以重開一個終端,使用
docker ps -a
可以看到有容器在被建立和删除,這就是Dockerfile中的指令執行時建立的臨時容器
⑤新鏡像運作容器
docker run -d -P httpd:centos
#-P使用随機端口,也可以-p使用指定端口
⑥驗證
四、挂載資料卷
通過挂載資料卷的方法,可以在不進入容器的情況下編輯網頁文檔
#主控端目錄/root/apache挂載到容器中的/var/www/html
docker run --name web -d -p 8080:80 -v /root/apache:/var/www/html httpd:centos
#拖入圖檔并,編輯網頁文檔
<Img src="123.jpg"/>
</body>
</html>
驗證