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
注意了,因為映象的層數是有限的
&&
進行拼接。然後呢,你還發現有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