# Docker 學習日誌(1) ###### tags: `Docker` ## 安裝Docker Engine 在開始打造 Docker Container 之前,我們必須先在==本機上安裝Docker Engine。== 可以到[官網](https://docs.docker.com/install/)下載 幾乎支援所有OS環境 ## 將程式包成image 接下來我們將以一個 Nodejs App 為例,將該程式包成 Docker Image 先來了解一下 docker-test 中的這三個檔案分別是用來做什麼 ### Docker File 在將程式 dockerize 時,都需要一個專屬於該程式的 Dockerfile。 ```dockerfile= FROM node:6.2.2 WORKDIR /app ADD . /app RUN npm install EXPOSE 3000 CMD npm start ``` - FROM node:6.2.2 這行會載入程式需要的執行環境,會根據不同的需求下載不同的映像檔,這裡是指 node v6.2.2 - WORKDIR /app 在這個 Docker 中的 Linux 即將會建立一個目錄 /app - ADD . /app 代表會將本機端與 Dockerfile 同一層的所有檔案加到 Linux 的 /app 目錄底下 - RUN npm install 運行 npm install,npm install 會下載 nodejs 相依的 libraries - EXPOSE 3000 是指 container 對外的埠號,再與外界溝通時使用 有關docker network,[Docker 學習日誌(2)](https://hackmd.io/qTGK81lWSweWaW7ZnjXk3A)會講到 - CMD npm start 最後透過 npm start 會運行 Nodejs App ### Nodejs App 在 docker-demo 中,我們還可以找到另外兩個檔案 index.js 與 package.json - index.js:我們會藉由 express 這個套件架設一個小型的 Nodejs API server,並會跑在 port 3000 上,且有一個 endpoint 會回傳 Hello World! 字串。 - package.json:則會記載這個程式所需的套件,以及讓程式運行的指令 npm start 。 **index.js** ```javascript= var express = require('express'); var app = express(); app.get('/', function(req, res) { res.send('Hello World!'); }); var server = app.listen(3000, function() { var host = server.address().address; var port = server.address().port; console.log("Example app listening at 'http://%s:%s'", host, port); }) ``` **package.json** ```json= { "name": "myapp", "version": "1.0.0", "scripts": { "start": "node index.js" }, "dependencies": { "express": "^4.16.2" } } ``` 了解完程式碼之後,我們在本地端建立一個docker-test資料夾 ```shell= $ mkdir docker-test ``` 接著,把上面兩個檔案和docker file都放入資料夾中 就可以準備將檔案打包成image了 ## Docker Build 進入docker-test資料夾後 輸入 ```shell= $ docker build . ``` ![](https://i.imgur.com/aNPWSwG.png) 等到看到 Successfully built ==fa9e1845643e==,代表 Docker Image 已經建置好了。 ==fa9e1845643e== 代表你的Docker Image ID,每次都由系統產生的。 接著我們可以輸入 `docker image ls` 的指令,根據 Image ID,我們可以找到剛剛建立好的 Docker Image ![](https://i.imgur.com/5uR96Y8.png) ## 在本機上運行Container App 在包好 Docker Image 之後,我們可以先在本機上透過 docker指令 跑起我們的 Docker Container。 記住你剛剛的 Docker Image ID,並輸入指令 `docker run` ```shell= $ docker run -p 3000:3000 -it fa9e1845643e ``` 看到這裡代表 Docker Image 已經跑起來了, 可以到瀏覽器輸入 http://127.0.0.1:3000/ 便可以看到我們剛剛架設好的 Nodejs API server ![](https://i.imgur.com/6SLIV1A.png) ## Reference [https://ithelp.ithome.com.tw/articles/10192519](https://ithelp.ithome.com.tw/articles/10192519)