2015年7月30日

建立自己的 Docker image

假設一個情境,如果今天我們的應用程式已經開發完成了,以前還要把 Source Code 拿去客戶端部署,還要設定一堆參數等等,或是今天內部開發完成,要進行測試,也要部署到測試機上,如今有 Docker 了,有沒有辦法,只用前面介紹的 run -p 這個指令,就直接完成安裝!?

基本上,前面那篇,我們直接登入到 Docker 來進行抓取 Source 的動作,並且在裡面執行,最後 Commit ,的確,這是一種方法,也可以建立一個新的image,但是,我們不可能每次要 Run MVC 的時候,都還要登入進去執行吧,那真的很累人…其次,登入容器後,再去下載 Source 感覺也不是很好,準備環境也很麻煩,所以這篇,我們來看看,怎樣來建立自己的 Image。

準備本地端的 Source Code

首先,我們透過git指令,來取得ASP.NET 的 Source Code

git clone https://github.com/aspnet/Home.git aspnet-home

enter image description here

完成後,我們先進入專案的位置。

cd aspnet-home/samples/HelloWeb

enter image description here

建立 Dockerfile

接下來,我們透過文字編輯器,來新建一個 Dockerfile 的檔案,這個檔案主要是用來設定 Docker 容器的細節。

vi Dockerfile

enter image description here

文字的內容如下,第一行表示要用哪一個Image當作基底,接下來,拷貝目前目錄下的所有東西到 app ,然後進入app目錄,接著就來跑一下 kpm restore 這個指令,完成之後,對外的 port 要開 5004,並且於整個容器準備完成之後執行 k kestrel。除此之外,比較常用到的還有MAINTAINER(維護人)和ADD(同樣將檔案加入到image,但如果是壓縮黨會自動解壓縮)

FROM microsoft/aspnet

COPY . /app
WORKDIR /app
RUN [“kpm”, “restore”]

EXPOSE 5004
ENTRYPOINT [“k”, “kestrel”]

enter image description here

Build Image

接下來,我們就可以透過 build 的指令來建立新的image,並且取名為 myapp,後面的 . 表示路徑位置,也就是要指向 Dockerfile的位置。

sudo docker build -t myapp .

enter image description here

很快地就會完成了,完成之後我們可以透過等下指令看一下是否有增加進去。

sudo docker images

enter image description here

Run

完成後,我們就可以拿這個 Image 來進行建置容器的動作,這邊的 -d 代表的是讓容器在背景執行,最後我們再用 docker ps 來查看,就可以發現,他在背景執行了。

sudo docker run -t -d -p 80:5004 myapp

enter image description here

上傳到 Docker Hub

最後,我們可以把我們準備好的 Image 提供給別的使用者共享,我們可以把我們的影像檔傳到 Docker Hub 上,所以在進行最後一個步驟之前,要先去申請 Docker Hub 的帳號。

申請完成之後,我們就可以透過以下指令進行登入。

sudo docker login

enter image description here

那再上傳之前,有一點需要注意,Docker Hub 的格式為 UserName/Repo,所以這邊我們要先改名一下,不然會傳不上去,我們先用以下指令查看我們目前有哪些 Image。

sudo docker images

接下來,我們就可以用以下指令改名,改成 skychang/mapp。

sudo docker tag myapp2:latest skychang/myapp:latest

enter image description here

最後,我們再用 push ,就可以傳到 Docker Hub 嚕!

sudo docker push skychang/myapp

enter image description here

完成後,就可以在 Docker Hub 看到嚕!!

enter image description here

刪除用不到的 Image

如果有用不到的 Image ,可以透過 rmi 的指令移除 image , rmi 後面的參數是代表 image 的名稱

sudo docker images 來查看所有的資訊

sudo docker rmi myapp

enter image description here

參考資料

沒有留言:

張貼留言