Build / Run container(範例)
Step By Step
將Web App打包成(Dockerize)Docker Image並執行成Container
- 準備打包的目標程式
- 撰寫Dockerfile
- 打包程式(built image)
- 執行成Container(run container)
1. 準備目標程式(來自高見龍repo範例)
- git clone
<git@gitlab.com:kaochenlong/shopping-cat-v2.git>
- cd shopping-cat-v2
2. 撰寫Dockerfile
Dockerfile 透過撰寫命令行告訴 Docker 應該要如何打包我的程式。
- 這行會載入 main.js 需要的執行環境,每個不同的程式需要的環境可能不同,這裏下載的是 denoland/deno:alpine-1.26.0,其他版本可以在 Dockerhub 上看到
- 在這個 Docker 的環境之中建立一個工作目錄 /app
- 把跟 Dockerfile 同個資料夾的程式全部複製到剛建立的工作目錄 /app 中
- 運行 npm install,讓 npm 透過讀取 package.json 下載相依的 package
- 指定 container 對外開放的 port
- 我們透過 run main.ts 來執行我們的 Server
FROM denoland/deno:alpine-1.26.0
WORKDIR /app
COPY . /app
EXPOSE 8000
RUN deno cache main.ts
CMD [ "run", "--allow-all", "main.ts" ]
3. 打包程式(Dockerize)
- 終於把所有預備檔案準備好後,我們可以在資料夾內透過指令 docker build,-t 參數在此次打包的image上tag,最後的.,執行cmd下尋找dockerfile檔案執行
- 列出我們全部的 Docker Image 如下
docker image build -t hello-cat .
docker images
Docker Image 如下
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-cat latest d7c92d6b3a3b 31 seconds ago 123MB
latest latest 4c0be2fcf904 2 weeks ago 123MB
registry.gitlab.com/nicktseng/git-cicd-demo-server latest 52c0abb7cfd9 2 weeks ago 123MB
4. 執行成Container
- 生成 Docker Image 後,下一步就可以來實際執行 Container 。透過上面的 docker images 指令,找到我們建立 Image 的 ID / tag name,在這邊是 733776b1db0a / hello-cat。
docker run -d -p 4000:8000 --name {{container_name}} {{docker_image_name}}
(參數-p: 本地主機port 4000 mapping to 容器 port 8000, 參數 -d 背景執行) 透過 docker run,我們實際把 Image 執行成 Container 了!這時我們看到 terminal 顯示 listening on port 8000 後,用瀏覽器打開 localhost:4000,就可以迎接一隻 Docker 鯨魚。
5. 進入運行中的Container
- 要進入運行中的container,查看機器文件,process,可以執行以下命令。
docker exec -it {{container_ID}} /bin/bash