Dcard 實習生活日記:小鯨魚(Docker)介紹

Dcard Lab

前言

Hi,這是 Web Team Intern 說好的第一則技術文章
這邊是 YC ,讓我來向各位介紹這隻好用的小鯨魚 Docker (Moby)
這篇文章將會以開發的角度切入,帶各位了解 Docker 是如何讓我們的開發更加便利。


介紹

為什麼使用 Docker?

不知道各位有沒有過這種經驗?在開發一套系統的時候,有著各式各樣的伺服器需求,例如同時需要

  1. Redis 做 Cache
  2. MongoDB 做資料庫
  3. RabbitMQ 做 RPC
  4. MariaDB 做統計
  5. Nginx 做 Proxy 以及 HTTP Basic Auth

當今天我們遇到這麼多的需求,全部從 Mirror 安裝真的好嗎?
假設同時維護了多個專案的時候,設定檔是否顯得混亂?
當套件不需要被使用時,如果忘了清除是否讓整個開發環境顯得髒亂?

在這樣的需求下 Docker 對於開發來說是個非常好用的工具

Docker 究竟是什麼東西呢?

Docker 是一套 Container 的工具,利用 cgroup、chroot、name space 等功能,將執行環境從系統獨立出來,由於直接共用系統的核心資源,讓 Docker 與傳統的 VM 相比,少了虛擬硬體以及客體系統的資源負擔,有著更輕量化、更快的啟動速度、更多的執行個體等特性,讓我們的開發能夠更加的便利。

https://www.docker.com/what-container

Container 與 Image

Docker 的每個 Container 建立來自於所謂的 Image,我們會將所需要用到的 Service 一個一個產生 Image,再利用 Image 去產生所謂的 Container,接著只要執行了 Container,Service 就可以被使用啦!

手把手教學 — 建構開發環境

上面我們有提到,可以利用 Docker 來維護我們的開發環境
這邊就帶著各位來操作、建立一個有 redis、mongoDB、rabbitMQ 的開發環境吧!

1. 首先撰寫 docker-compose

Docker-compose 能讓我們快速而方便的管理很多 Container 只需要一個檔案,我們就可以設定所有的 Container

vim docker-compose.yml

在裡面編輯

version: '3' # dockerfile 版本  
services:
redis:
container_name: exmple-redis # Container 名稱
image: redis # 使用的 Image
ports:
- "127.0.0.1:6379:6379" # 將 container 的 port 映射到127.0.0.1
mongo:
container_name: example-mongo
image: mongo
ports:
- "127.0.0.1:27017:27017"
rabbit:
container_name: example-rabbit
image: rabbitmq:3-management
ports:
- "127.0.0.1:8080:8080"
- "127.0.0.1:5672:5672"

2. 啟動它

docker-compose up -d

兩步驟完成了 redis、mongoDB、rabbitMQ 的開發環境是不是很方便呢?

手把手教學 — 產生 Image

在這個章節我會帶著大家將 Koa2 的小程式打包成一個 Image 並且建立 Container 啟動它。

1. 首先是我們的程式

這部分就先以 Koa-generator 產生一個小的程式來做示範吧

npm install -g koa-generator 
koa2 example
cd example && npm install

2. 撰寫 Dockerfile

我們可以利用 Dockerfile 產生我們的 Image

vim Dockerfile

編輯內容

FROM node:lastest # 基於 Dockerhub 上的 node Image  WORKDIR /app  COPY package.json . # 複製套件相依性  
RUN npm install # 安裝套件
COPY . . # 複製整個原始資料夾
EXPOSE 3000 CMD [ "npm", "run", "start" ] # 啟動時執行 npm run start

接下來執行

docker build -t example-image .

我們的 Image 就完成囉

3. 啟動 Container

接下來我們就可以用個簡單的指令

docker run -p 3000:3000 -d --name example-container example-image

這樣子 Container 就會執行囉,我們也可以很輕鬆將 Image 放到其他主機上面去,也就可以直接執行了!

總結

一般來說我們在使用 Docker 的時候會有這樣的流程

  1. 撰寫 Dockerfile 產生 Image / 上 Dockerhub 找我們要用的 Image
  2. 撰寫 Docker-compose 建立及管理 Container
  3. 啟動

簡單的幾個步驟,就做到了以前相當麻煩的各個內容,當然 Docker 的好處也不只這些,在部署上還有各式各樣的地方都可以利用 Docker 達到更便利的效果,如果說你對 Docker 有興趣,可以上 Docker 官網 好好的了解它,網路上也有很多的學習資源,希望這篇文章能夠讓你感受到 Docker 的便利、也希望這樣的便利能為你的開發帶來正面的影響。

Dcard Lab

Written by

Dcard Lab

在 Dcard 實驗室,打造激動人心的產品,定義下個世代的社群網路。

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade