前言
如果你不知道什么是 Docker, 請(qǐng)自行Google。簡(jiǎn)單的安裝說明可以自行網(wǎng)上搜索,也可以看看我之前寫的 Docker 初體驗(yàn)。
作為一個(gè)程序員,我們最大的痛苦是吃的是草,擠出來的都是蛋白質(zhì)。電腦破得老牛拉車,可是為了開發(fā)/測(cè)試不同的軟件,我們的電腦上需要有 Visual studio, VS Code, SQL Server /MySQL/MongoDB,Redis,Niginx,Jenkins,RabbitMQ ..... 以及一大堆需要時(shí)候很好用,不需要的時(shí)候只能占用我們寶貴內(nèi)存和CPU計(jì)算資源的各種工具。
目標(biāo)設(shè)置
制作一個(gè) Docker Image,功能是使用 Nginx 顯示一個(gè) Hello World 靜態(tài)網(wǎng)頁。
下載本教程 Docker Image
docker pull edmundhuang/learning:v1
生產(chǎn)環(huán)境準(zhǔn)備
- Windows 10 專業(yè)版 + Hyper-V
- Docker for Windows + Kitematic
- VS Code + Docker Extension
- Docker ID
本文將教你一步步學(xué)會(huì)制作docker image,并上傳至Docker Hub,所有源碼開源于 Github。
直接使用以下命令可以得到本教程完成時(shí)的結(jié)果,但我建議你暫時(shí)不要使用下面這兩個(gè)命令。
dock pull edmundhuang/learning
git clone https://github.com/edmundhuang/DockerLearning.git
創(chuàng)建HTML文件
- 準(zhǔn)備一個(gè)空文件夾 Learning (當(dāng)然也可以是任意你喜歡的名稱),用 VS Code打開此文件夾。
- 新建文件夾 src,并在文件夾 src 內(nèi)新建 index.html 文件,內(nèi)容如下:
<html>
<head>
<title>Docker in 30 minutes</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
初始化 Docker 文件
VS Code 安裝 Docker Extension 后,按 F1,輸入Docker
出現(xiàn)的第一條命令是 Docker:Add docker files to workspace
,
按回車后出現(xiàn)語言選擇選Other,
按回車后出現(xiàn)端口選擇(默認(rèn)為3000),再次按下回車即可。文件夾中將多出4個(gè)文件:
- .dockerignore
- docker-compose.debug.yml
- docker-compose.yml
- Dockerfile
Docker build
docker build -f Dockerfile .
請(qǐng)注意,最后面有一個(gè) .
代碼當(dāng)前文件夾,此命令的簡(jiǎn)化模式為
docker build .
沒有指定文件情況下,默認(rèn)尋找當(dāng)前文件夾下 Dockerfile。
修改 Dockerfile 文件內(nèi)容為:
FROM nginx
保存 Dockerfile, 運(yùn)行Docker builder命令后,Docker 引擎將從 Docker hub 下載最新的 Nginx Image。下載完成后打開Kitematic(桌面右下角Docker圖標(biāo)右鍵菜單上有),運(yùn)行最新下載的 Nginx,可以看見Nginx默認(rèn)的歡迎頁面。點(diǎn)擊 “Exec” 打開Powershell, Docker會(huì)自動(dòng)將powershell 連接到Image里面的linux 環(huán)境,記住這時(shí)候輸入的命令是linux命令,看見的是nginx服務(wù)器的環(huán)境。
構(gòu)建 Learning Image
修改 Dockerfile 內(nèi)容為:
FROM nginx
COPY src/. /usr/share/nginx/html
將我們創(chuàng)建的index.html復(fù)制到nginx啟動(dòng)文件夾下。
執(zhí)行命令
docker build -t learning .
請(qǐng)注意此處加入了 -t learning
參數(shù),表示我們希望構(gòu)建的Image 名稱為L(zhǎng)earning。因?yàn)槿绻麤]有 Image 名稱,在Kitematic 的My Images 里面將不會(huì)顯示,只能通過 Docker image ls
命令查看。
打開Kitematic,在My Images 中找到Learning,點(diǎn)擊Create
創(chuàng)建一個(gè) Container 。
小結(jié)
本文中,簡(jiǎn)單介紹了如何使用 Docker 命令構(gòu)建 Image,其中涉及到的命令請(qǐng)讀者自行查閱相關(guān)資料,因?yàn)槿绻覍懺谶@兒的話,再多幾千字也不夠。
Docker Build
命令第一次運(yùn)行的時(shí)候較慢,因?yàn)樾枰獜倪h(yuǎn)程服務(wù)器下載Nginx Image,再次運(yùn)行就很快,一般幾秒鐘就能運(yùn)行完成。但是問題來了,在開發(fā)過程中,我們需要經(jīng)常修改網(wǎng)站中的文件,如果每次修改都需要重新制作一次 Docker Image,也是挺麻煩的,有沒有什么可持續(xù)發(fā)展的道路呢?請(qǐng)關(guān)注下一篇,持續(xù)集成/持續(xù)發(fā)布(CI/CD)。