1. 程式人生 > >Docker第四篇-Dockerfile製作Docker映象

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 [容器名稱] .