# Learning Docker, Part2 ###### tags: `Docker` ## 使用Docker建立Project   實際流程範例: 1. 建立一個simpleweb的資料夾,並在其中建立package.json、index.js 內容如下: ``` // package.json { "dependencies": { "express": "4.18.2" }, "scripts": { "start": "node index.js" } } ``` ``` // index.js const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Hi there'); }) app.listen(8080, () => { console.log('Lisening on port 8080') }) ``` 2. 建立一個Dockerfile資料夾 內容如下:  3. 建立image 終端機切換至simpleweb資料夾,並輸入下列指令來建立image ``` docker build -t stevenchang421/simpleweb . ``` 4. 啟動image作為container  終端機輸入指令並指定port: ``` docker run -p 8080:8080 stevenchang421/simpleweb ``` 5. 在瀏覽器連接至App 網址輸入http://localhost:8080/  Ex: docker run -p 8080:8080 stevenchang421/simpleweb ### 更改dockerfile 當程式碼有更動時,需要再重新跑一次 ``` docker build -t stevenchang421/simpleweb . ``` 此時npm install還是會再n一次 將dockerfile改成 ``` # Specify a base image FROM node:20-alpine # Install some dependencies WORKDIR /usr/app COPY ./package.json ./ RUN npm install ^^^^^^^^^^^^^^^^^^^^^^^ COPY ./ ./ # Default command CMD ["npm", "start"] ``` 這樣一來,只有當package.json改動時才會再跑一次npm install ## Docker Compose Docker Compose 是一個用於定義和運行多容器 Docker 應用程式的工具。通過 Docker Compose,使用 YAML 文件來配置application,然後只需要一個命令就可以創建和啟動所有的application。   Docker Compose 文件通常被命名為 docker-compose.yml,在這個文件中,你可以定義一組相關的服務,每個服務都是在其自己的容器中運行。例如,一個application可能包括一個data base、一個後端和一個前端,你可以將它們都定義在同一個 Compose 文件中。 **index.js設置如下:**  **package.json設置如下**  ### 指令 1. 建構完成後可使用指令`docker-compose up`來啟動redis-server及node-app 2. 如需重新建立容器可使用`docker-compose up --build`來重建並啟動 3. 在後台執行而不占用指令列,使用`docker-compose up -d`這裡的'-d'為'-detach'縮寫 4. 使用`docker ps`來看正在運行的容器有哪些 5. 使用`docker logs <container_id>`來查看這個容器的輸出紀錄 6. 停止運行使用`docker-compose down` ### 重啟原則  在docker-compose.yml中新增設定 ``` version: '3' services: redis-server: image: 'redis' node-app: restart: 'no' ^^^^^^^^^^^^^ build: . ports: - "8081:8081" ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up