上一篇文章呢,咱們簡單的瞭解了Docker的基本命令,這篇文章呢,咱們來了解下Dockerfile
這個文件。php
我不知道有多少同窗以前用過Vagrant
來統一開發環境的,若是你以前接觸過Vagrant的話,Dockerfile有點相似於vagrantfile
文件。
一言以蔽之,Dockerfile就是描述了你要構建一個什麼樣的鏡像,比如你要創建一棟大樓,你須要把每一步寫進一張藍圖中,而後交給工人(docker build [dockerfile文件所在路徑]
),而後你就擁有了一棟房子,懂了麼?懂了麼?懂了麼?
咱們來看下dockerfile長什麼樣子吧?linux
# Nginx # # VERSION 0.0.1 FROM ubuntu MAINTAINER Victor Vieux <victor@docker.com> LABEL Description="This image is used to start the foobar executable" Vendor="ACME Products" Version="1.0" RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server
這個是官方給出的例子。FROM
指明瞭這裏鏡像繼承Ubuntu的基礎系統。MAINTAINER
是指明瞭做者信息,通常是名字和郵箱。LABEL
是爲你即將打造的鏡像寫上一些標籤信息。RUN
這個是執行一條命令,等價於你在終端打了一條命令nginx
固然,遠遠不止這些命令,我列舉幾條比較經常使用的還有一些注意點吧。git
FROM <image>:<tag>
這裏你們要注意一點就是,docker官方源鏡像被牆,因此若是你要使用國內源的話須要這樣來書寫:FROM daocloud.io/ubuntu:latest
,這是不少新人一直摸不着頭腦常常要問的,這裏給你們提示下。github
RUN <command>
這條命令至關於你在終端執行了一條命令,固然這條命令通常是一條可以帶來內容寫入的命令,好比RUN apt-get install vim
這樣的安裝程序的命令,或者是RUN echo "Hello" > /hello.txt
這樣的腳本命令。RUN
能夠在dockerfile中存在多條
,你們要注意了。
固然還有RUN ["/bin/bash", "-c", "echo hello"]
這樣也是能夠的。docker
CMD ["executable","param1","param2"]
CMD
指令通常用來指明啓動容器時須要運行什麼進程。通常咱們是跑一條無輸入有輸出
的前臺進程,好比官方ghost啓動時就運行了/entrypoint.sh npm start
,這就是一條無輸入有輸出的命令,輸出將會做爲容器的日誌顯示。可是你看到ghost的Dockerfile會發現:apache
... COPY docker-entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] EXPOSE 2368 CMD ["npm", "start"]
ENTRYPOINT
是配置容器啓動後執行的命令,CMD
此時爲它提供了兩個參數,因此等價於CMD /entrypoint.sh npm start
。CMD
只能執行一次,重複寫會覆蓋哦。npm
EXPOSE <port> [<port>...]
這條命令是指明最後容器須要暴露哪些端口號,這樣其餘系統才能使用這個端口。好比常見的80
、3306
這些,PHP開發者對這些端口應該是很是熟悉的了。在這裏多說幾句,就是寫明瞭這個指令不表明你能夠從外面就直接連進來,由於你的dockerfile最後生成的是鏡像文件,你須要用這個鏡像文件來run
容器。因此你要在run的時候使用-P
參數來隨機分配映射口或者使用-p
來指定端口映射。ubuntu
ADD <src> <dest> COPY <src> <dest>
這兩個都是複製命令,好比Ubuntu下須要換源(替換/etc/apt/source.list
文件)就能夠用這個命令,推薦使用COPY
vim
VOLUME ["/data"]
顧名思義,就是掛載一個主機目錄到你的容器內,對於PHP開發者而言就是你能夠在本地寫好代碼在目錄/workdir/test
,而後掛載進去來省去繁雜的複製代碼進入容器的過程。可是靈活性不高,後面我在編排的時候會教你們用編排來統一開發環境。
還有更多指令你們看下官方文檔,我本身以爲上面的指令算是使用比較多的了。做爲PHP開發者只要認識這幾個我以爲夠用了。
前面說了好多,目的就只是爲了自動化構建一個屬於本身的鏡像。哈哈,別不耐煩,但凡官方給出的鏡像都會附帶一份dockerfile的,不信到hub上去look look。你的PHP官方也是給出了dockerfile:Docker Official Image packaging for PHP
好了,該給出這道命令了
docker build [dockerfile所在目錄]
好比個人dockerfile路徑是~/project/dockerfile
,那麼我構建鏡像的命令是:
docker build -t cnbrucehong/myimg ~/project/ | | -t指明瞭你要給這個鏡像什麼名字 注意這裏沒有dockerfile
而後你鍵入
docker images
你就能看到你建立的鏡像啦,趕忙run一下試試吧!~有問題能夠在下面留言哦!~
下屆咱們來講說如何在Mac下優雅的搭建Docker,哈哈若是你是linux的用戶能夠直接跳過,若是是window的話也是能夠看看的,由於裏面介紹的軟件在window也是有的,可是我仍是推薦你們使用mac啦,下節見咯!~