摘要:指令這條命令是指明最后容器需要暴露哪些端口號(hào),這樣其他系統(tǒng)才能使用這個(gè)端口。但是靈活性不高,后面我在編排的時(shí)候會(huì)教大家用編排來(lái)統(tǒng)一開(kāi)發(fā)環(huán)境。更多還有更多指令大家看下官方文檔,我自己覺(jué)得上面的指令算是使用比較多的了。
前言
上一篇文章呢,我們簡(jiǎn)單的了解了Docker的基本命令,這篇文章呢,我們來(lái)了解下Dockerfile這個(gè)文件。
一個(gè)神奇的文件:Dockerfile我不知道有多少同學(xué)之前用過(guò)Vagrant來(lái)統(tǒng)一開(kāi)發(fā)環(huán)境的,如果你之前接觸過(guò)Vagrant的話(huà),Dockerfile有點(diǎn)類(lèi)似于vagrantfile文件。
一言以蔽之,Dockerfile就是描述了你要構(gòu)建一個(gè)什么樣的鏡像,好比你要建立一棟大樓,你需要把每一步寫(xiě)進(jìn)一張藍(lán)圖中,然后交給工人(docker build [dockerfile文件所在路徑]),然后你就擁有了一棟房子,懂了么?懂了么?懂了么?
我們來(lái)看下dockerfile長(zhǎng)什么樣子吧?
# Nginx # # VERSION 0.0.1 FROM ubuntu MAINTAINER Victor VieuxLABEL 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
這個(gè)是官方給出的例子。
FROM指明了這里鏡像繼承Ubuntu的基礎(chǔ)系統(tǒng)。
MAINTAINER是指明了作者信息,一般是名字和郵箱。
LABEL是為你即將打造的鏡像寫(xiě)上一些標(biāo)簽信息。
RUN這個(gè)是執(zhí)行一條命令,等價(jià)于你在終端打了一條命令
當(dāng)然,遠(yuǎn)遠(yuǎn)不止這些命令,我列舉幾條比較常用的還有一些注意點(diǎn)吧。
FROM指令FROM:
這里大家要注意一點(diǎn)就是,docker官方源鏡像被墻,所以如果你要使用國(guó)內(nèi)源的話(huà)需要這樣來(lái)書(shū)寫(xiě):FROM daocloud.io/ubuntu:latest,這是很多新人一直摸不著頭腦經(jīng)常要問(wèn)的,這里給大家提示下。
RUN指令RUN
這條命令相當(dāng)于你在終端執(zhí)行了一條命令,當(dāng)然這條命令一般是一條能夠帶來(lái)內(nèi)容寫(xiě)入的命令,比如RUN apt-get install vim這樣的安裝程序的命令,或者是RUN echo "Hello" > /hello.txt這樣的腳本命令。RUN可以在dockerfile中存在多條,大家要注意了。
當(dāng)然還有RUN ["/bin/bash", "-c", "echo hello"]這樣也是可以的。
CMD ["executable","param1","param2"]
CMD指令一般用來(lái)指明啟動(dòng)容器時(shí)需要運(yùn)行什么進(jìn)程。一般我們是跑一條無(wú)輸入有輸出的前臺(tái)進(jìn)程,比如官方ghost啟動(dòng)時(shí)就運(yùn)行了/entrypoint.sh npm start,這就是一條無(wú)輸入有輸出的命令,輸出將會(huì)作為容器的日志顯示。但是你看到ghost的Dockerfile會(huì)發(fā)現(xiàn):
... COPY docker-entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] EXPOSE 2368 CMD ["npm", "start"]
ENTRYPOINT是配置容器啟動(dòng)后執(zhí)行的命令,CMD此時(shí)為它提供了兩個(gè)參數(shù),所以等價(jià)于CMD /entrypoint.sh npm start。CMD只能執(zhí)行一次,重復(fù)寫(xiě)會(huì)覆蓋哦。
EXPOSE指令EXPOSE[ ...]
這條命令是指明最后容器需要暴露哪些端口號(hào),這樣其他系統(tǒng)才能使用這個(gè)端口。比如常見(jiàn)的80、3306這些,PHP開(kāi)發(fā)者對(duì)這些端口應(yīng)該是非常熟悉的了。在這里多說(shuō)幾句,就是寫(xiě)明了這個(gè)指令不代表你可以從外面就直接連進(jìn)來(lái),因?yàn)槟愕膁ockerfile最后生成的是鏡像文件,你需要用這個(gè)鏡像文件來(lái)run容器。所以你要在run的時(shí)候使用-P參數(shù)來(lái)隨機(jī)分配映射口或者使用-p來(lái)指定端口映射。
ADD、COPY指令ADDCOPY
這兩個(gè)都是復(fù)制命令,比如Ubuntu下需要換源(替換/etc/apt/source.list文件)就可以用這個(gè)命令,推薦使用COPY
VOLUME掛載指令VOLUME ["/data"]
顧名思義,就是掛載一個(gè)主機(jī)目錄到你的容器內(nèi),對(duì)于PHP開(kāi)發(fā)者而言就是你可以在本地寫(xiě)好代碼在目錄/workdir/test,然后掛載進(jìn)去來(lái)省去繁雜的復(fù)制代碼進(jìn)入容器的過(guò)程。但是靈活性不高,后面我在編排的時(shí)候會(huì)教大家用編排來(lái)統(tǒng)一開(kāi)發(fā)環(huán)境。
更多還有更多指令大家看下官方文檔,我自己覺(jué)得上面的指令算是使用比較多的了。作為PHP開(kāi)發(fā)者只要認(rèn)識(shí)這幾個(gè)我覺(jué)得夠用了。
構(gòu)建鏡像前面說(shuō)了好多,目的就只是為了自動(dòng)化構(gòu)建一個(gè)屬于自己的鏡像。哈哈,別不耐煩,但凡官方給出的鏡像都會(huì)附帶一份dockerfile的,不信到hub上去look look。你的PHP官方也是給出了dockerfile:Docker Official Image packaging for PHP
好了,該給出這道命令了
docker build [dockerfile所在目錄](méi)
比如我的dockerfile路徑是~/project/dockerfile,那么我構(gòu)建鏡像的命令是:
docker build -t cnbrucehong/myimg ~/project/ | | -t指明了你要給這個(gè)鏡像什么名字 注意這里沒(méi)有dockerfile
然后你鍵入
docker images
你就能看到你創(chuàng)建的鏡像啦,趕緊run一下試試吧!~有問(wèn)題可以在下面留言哦!~
下節(jié)預(yù)告下屆我們來(lái)說(shuō)說(shuō)如何在Mac下優(yōu)雅的搭建Docker,哈哈如果你是linux的用戶(hù)可以直接跳過(guò),如果是window的話(huà)也是可以看看的,因?yàn)槔锩娼榻B的軟件在window也是有的,但是我還是推薦大家使用mac啦,下節(jié)見(jiàn)咯!~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/21374.html
摘要:指令這條命令是指明最后容器需要暴露哪些端口號(hào),這樣其他系統(tǒng)才能使用這個(gè)端口。但是靈活性不高,后面我在編排的時(shí)候會(huì)教大家用編排來(lái)統(tǒng)一開(kāi)發(fā)環(huán)境。更多還有更多指令大家看下官方文檔,我自己覺(jué)得上面的指令算是使用比較多的了。 前言 上一篇文章呢,我們簡(jiǎn)單的了解了Docker的基本命令,這篇文章呢,我們來(lái)了解下Dockerfile這個(gè)文件。 一個(gè)神奇的文件:Dockerfile 我不知道有多少同學(xué)...
摘要:三部署架構(gòu)說(shuō)明這個(gè)方案僅適用于小公司敏捷項(xiàng)目團(tuán)隊(duì)聯(lián)調(diào)測(cè)試環(huán)境的部署,同時(shí)也可以作為學(xué)習(xí)入門(mén)的,并不適用于有一定規(guī)模的生產(chǎn)環(huán)境。另外,建議把測(cè)試域名泛解析到部署這臺(tái)服務(wù)的機(jī)器。模塊配置部署腳本業(yè)務(wù)模塊的配置基本是通過(guò)部署腳本來(lái)操作的。 項(xiàng)目地址: https://github.com/xiongwilee...基本特性: 快捷部署多人nginx+php的開(kāi)發(fā)測(cè)試環(huán)境,也可以擴(kuò)展構(gòu)建其...
摘要:三部署架構(gòu)說(shuō)明這個(gè)方案僅適用于小公司敏捷項(xiàng)目團(tuán)隊(duì)聯(lián)調(diào)測(cè)試環(huán)境的部署,同時(shí)也可以作為學(xué)習(xí)入門(mén)的,并不適用于有一定規(guī)模的生產(chǎn)環(huán)境。另外,建議把測(cè)試域名泛解析到部署這臺(tái)服務(wù)的機(jī)器。模塊配置部署腳本業(yè)務(wù)模塊的配置基本是通過(guò)部署腳本來(lái)操作的。 項(xiàng)目地址: https://github.com/xiongwilee...基本特性: 快捷部署多人nginx+php的開(kāi)發(fā)測(cè)試環(huán)境,也可以擴(kuò)展構(gòu)建其...
摘要:導(dǎo)讀要從容器化開(kāi)始,而容器又需要從開(kāi)始,本文將介紹如何寫(xiě)出一個(gè)優(yōu)雅的文件。只要記住以上三點(diǎn)就能寫(xiě)出不錯(cuò)的。執(zhí)行完成項(xiàng)目的構(gòu)建。 導(dǎo)讀 Kubernetes要從容器化開(kāi)始,而容器又需要從Dockerfile開(kāi)始,本文將介紹如何寫(xiě)出一個(gè)優(yōu)雅的Dockerfile文件。 文章主要內(nèi)容包括: Docker容器 Dockerfile 使用多階構(gòu)建 感謝公司提供大量機(jī)器資源及時(shí)間讓我們可以實(shí)踐...
摘要:更換源更新源使用的源通過(guò)安裝腳本安裝應(yīng)用所需要的依賴(lài)。 showImg(https://segmentfault.com/img/remote/1460000011106825); 有了第二篇《使用 Docker 搭建簡(jiǎn)易的 Java Web 環(huán)境 (二)》,懂了如何通過(guò)單一鏡像創(chuàng)建 Docker 環(huán)境,這篇主要學(xué)習(xí)如何使用「docker-compose」。目標(biāo)是:搭建 Laravel...
閱讀 2561·2021-11-22 09:34
閱讀 3539·2021-11-15 11:37
閱讀 2341·2021-09-13 10:37
閱讀 2105·2021-09-04 16:40
閱讀 1564·2021-09-02 15:40
閱讀 2456·2019-08-30 13:14
閱讀 3326·2019-08-29 13:42
閱讀 1903·2019-08-29 13:02