跳至主要内容

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