1. 程式人生 > >Docker-CE之Dockerfile 生成自定義映象

Docker-CE之Dockerfile 生成自定義映象

我將使用swoft框架根目錄的Dockerfile檔案做講解,看完指令的作用後,你可以自己編寫一個。

FROM 指定基礎映象 (必須是第一個指令)
你需要一個基礎的映象為基,如果你實在想不出用啥映象,就用 FROM scratch,表示空映象。
下面的會到docker倉庫裡去找,然後做為基礎映象。

FROM php:7.1

MAINTAINER 維護者資訊,這個沒什麼好說的,就是告訴你這鍋得誰背,哦不,是這事是誰幹的。

MAINTAINER weikaixxxxxx <@email.com>

ENV 設定環境變數,在下方可以用。
換成php的寫法就是: $PHPREDIS_VERSION = '4.0.0';

ENV PHPREDIS_VERSION 4.0.0

RUN 就是執行shell,看到第一行的{PHPREDIS_VERSION}沒?就是上面賦值的變數。

RUN wget http://pecl.php.net/get/redis-${PHPREDIS_VERSION}.tgz -O /tmp/redis.tar.tgz \
    && pecl install /tmp/redis.tar.tgz \
    && rm -rf /tmp/redis.tar.tgz \
    && docker-php-ext-enable redis

注意了,因為映象的層數是有限的

,所以,儘量對RUN指令通過&&進行拼接。
然後呢,你還發現有rm刪除,這又是為什麼呢?因為我們安裝後壓縮包就沒有用了。

ADD是將本地檔案新增到容器中,如果是壓縮包型別(tar.gz,gzip, bzip2等)的會被解壓。
格式是: ADD 源路徑 目標路徑,作用是將源路徑檔案加到目標路徑映象裡去。這裡“.”指的是當前目錄下所有。

ADD . /var/www/swoft

還有一個COPY,和ADD功能相似,只是不會解壓縮包。

WORKDIR 指定容器的工作目錄,容器啟動時執行的命令會在這個目錄下執行

WORKDIR /var/www/swoft

EXPOSE 暴露埠

,只是宣告而已。

EXPOSE 80

當執行 docker run -P 會將 EXPOSE 配置的埠對映到宿主機的埠上。注意,P是大寫的。
在這裡插入圖片描述
宣告的是你容器的埠,上面這個圖表示你用左邊的埠去訪問的話,就會訪問到你容器的80埠。
感覺還是不好懂,比如你的web是apache,apache是80埠,你啟動了apache的容器,此時的容器就是80埠,當你在瀏覽器位址列訪問32774埠的時候,就會訪問到apache的首頁了。

ENTRYPOINT 執行命令。
ENTRYPOINT [“php”, “/var/www/swoft/bin/swoft”, “start”]
相當於

# php /var/www/swoft/bin/swoft start

還有一個CMD,和ENTRYPOINT功能相似。ENTRYPOINT只能存在一條。

還有幾個其它的,這兒用不著,就不說了。

編輯完執行

# docker build -t swoft:v1 .

-t 是給映象命名(小寫)。swoft是名稱,冒號後的是版本號。“.” 表示當前目錄,我是在Dockerfile所在的目錄(/var/www/swoft)執行這條命令。
在這裡插入圖片描述
等待生成映象,生成後執行

# docker image ls

就能看到你的映象啦。

刪除映象

# docker rmi 映象id