Docker第四篇-Dockerfile製作Docker映象
文章目錄
這一篇主要介紹Dockerfile命令的使用說明及如何使用Dockerfile製作簡單映象
製作簡單Mysql映象
建立目錄
mkdir /tmp/mysql
cd /tmp/mysql
新建Dockerfile檔案,輸入如下內容並儲存
vim Dockerfile
#輸入如下內容
FROM mysql:5.7
COPY my.cnf /etc/mysql/
EXPOSE 3306
CMD ["mysqld"]
新建my.cnf檔案,輸入如下內容並儲存
vim my.cnf
#輸入以下內容
[mysqld]
##################基礎設定##################
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
#log-error = /var/log/mysql/error.log
#資料庫預設字符集,主流字符集支援一些特殊表情符號(特殊表情符佔用4個位元組)
character-set-server = utf8mb4
#資料庫字符集對應一些排序等規則,注意要和character-set-server對應
collation-server = utf8mb4_general_ci
#設定client連線mysql時的字符集,防止亂碼
init_connect=‘SET NAMES utf8mb4‘
#是否對sql語句大小寫敏感,1表示不敏感
lower_case_table_names = 1
編譯
docker build -t myself-mysql:5.7 .
注意:
- myself-mysql為自定義的映象名稱
- 5.7為映象版本號
- 命令的最後一定要有 . 符號,表示docker使用當前目錄的Dockerfile檔案進行映象的製作
這樣,一個簡單的映象就做成了,接下來說明Dockerfile檔案內的各個命令的作用
Dockerfile命令說明
|
|
---|---|
FROM | 必填,指定鎖建立映象的基礎映象 |
MAINTAINER | 指定維護者資訊,該資訊將會寫入生成映象的Author屬性域中,如:MAINTAINER docker_user [email protected] |
RUN | 執行命令 |
CMD | 指定啟動容器時預設執行的命令 |
LABEL | 指定生成映象的元資料標籤資訊 |
EXPOSE | 宣告映象內服務所監聽的埠 |
ENV | 指定環境變數 |
ADD | 賦值指定的src路徑下的內容到容器中的dest路徑下 |
COPY | 賦值本地主機的scr路徑下的內容到容器中的dest路徑下;一般情況下推薦使用COPY而不是ADD |
ENTRYPOINT | 指定映象的預設入口 |
VOLUME | 建立資料掛載點 |
USER | 指定執行容器時的使用者名稱或UID |
WORKDIR | 配置工作目錄 |
ARG | 指定映象內使用的引數 |
ONBUILD | 配置當前所建立的映象作為其他映象的基礎映象時,所執行的建立操作的命令 |
STOPSIGNAL | 容器退出的訊號 |
HEALTHCHECK | 如何進行健康檢查 |
SHELL | 指定使用SHELL時的預設SHELL型別 |
上述命令中,常用的命令其實不多,接下來對常用的命令進行詳解:
-
FROM:指定所建立的映象的基礎映象,如果本地不存在,則預設會去Docker Hub下載指定映象。格式為:FROM image,或FROM image:tag。任何Dockerfile中的第一條指令必須為FROM指令。並且,如果在同一個Dockerfile檔案中建立多個映象,可以使用多個FROM指令(每個映象一次)
-
RUN:執行指定命令
兩種執行格式
- shell格式:RUN [command]
- exec格式:RUN [“可執行檔案”, “引數1”, “引數2”]
每條RUN指令將在當前映象的基礎上執行指定命令,並提交為新的映象。當命令較長時可以使用\換行,如下:
RUN apt-get update
&& apt-get install -y libsnappy-dev zliblg-dev libbz2-dev
&& rm -rf /var/cache/apt -
CMD :容器啟動命令,啟動方式和RUN類似,也有兩種。每個Dockerfile只能有一條CMD命令。如果指定了多條命令,只有最後一條會被執行。如果使用者啟動容器時指定了執行的命令(作為run的引數),則會覆蓋掉CMD指定的命令
- shell格式:RUN [command]
- exec格式:RUN [“可執行檔案”, “引數1”, “引數2”]
-
EXPOSE:宣告映象內服務所監聽的埠,格式為:EXPOSE [port] [port]…],如:EXPOSE 22 80 443 3306。
注意:該命令只是起到宣告作用,並不會自動完成埠對映。在容器啟動時需要使用-P(大寫P),Docker主機會自動分配一個宿主機未被使用的臨時埠轉發到指定的埠;使用-p(小寫p),則可以具體指定哪個宿主機的本地埠對映過來
-
COPY:複製本地主機的src下的內容到映象中的dest下,路徑同樣支援正則。
格式為:COPY [src] [dest]。
src為本地主機所在目錄的一個相對路徑、檔案或目錄
dest為容器內的目錄,目標路徑不存在時,會自動建立
當使用本地目錄為源目錄時,推薦使用COPY而不是ADD。 -
ADD:和COPY指令作用一致,該指令將複製指定的src路徑下的內容到容器中的dest路徑下。
格式為:ADD[src] [dest]。
[src]可以是Dockerfile所在目錄的一個相對路徑(檔案或目錄),也可以是一個URL,還可以是一個tar檔案(如果是tar檔案,會自動解壓到[dest]路徑下)。
[dest]可以使映象內的絕對路徑,或者相當於工作目錄(WORKDIR)的相對路徑。路徑支援正則表示式。 -
ENV:設定環境變數。
格式有兩種:ENV [key] [value]或ENV [key1]=[value1] [key2]=[value2]…。
無論是後面的其它指令,如 RUN ,還是執行時的應用,都可以直接使用這裡定義的環境變數
總結
製作映象的步驟如下:
- 編寫Dockerfile檔案及其他相關的使用到的配置檔案
- 將Dockerfile和配置檔案放在同一個目錄
- 進入該目錄,執行命令:docker build -t [容器名稱] .