Dcard 實習生活日記:小鯨魚(Docker)介紹
前言
Hi,這是 Web Team Intern 說好的第一則技術文章
這邊是 YC ,讓我來向各位介紹這隻好用的小鯨魚 Docker (Moby)
這篇文章將會以開發的角度切入,帶各位了解 Docker 是如何讓我們的開發更加便利。
介紹
為什麼使用 Docker?
不知道各位有沒有過這種經驗?在開發一套系統的時候,有著各式各樣的伺服器需求,例如同時需要
- Redis 做 Cache
- MongoDB 做資料庫
- RabbitMQ 做 RPC
- MariaDB 做統計
- Nginx 做 Proxy 以及 HTTP Basic Auth
當今天我們遇到這麼多的需求,全部從 Mirror 安裝真的好嗎?
假設同時維護了多個專案的時候,設定檔是否顯得混亂?
當套件不需要被使用時,如果忘了清除是否讓整個開發環境顯得髒亂?
在這樣的需求下 Docker 對於開發來說是個非常好用的工具
Docker 究竟是什麼東西呢?
Docker 是一套 Container 的工具,利用 cgroup、chroot、name space 等功能,將執行環境從系統獨立出來,由於直接共用系統的核心資源,讓 Docker 與傳統的 VM 相比,少了虛擬硬體以及客體系統的資源負擔,有著更輕量化、更快的啟動速度、更多的執行個體等特性,讓我們的開發能夠更加的便利。
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 的時候會有這樣的流程
- 撰寫 Dockerfile 產生 Image / 上 Dockerhub 找我們要用的 Image
- 撰寫 Docker-compose 建立及管理 Container
- 啟動
簡單的幾個步驟,就做到了以前相當麻煩的各個內容,當然 Docker 的好處也不只這些,在部署上還有各式各樣的地方都可以利用 Docker 達到更便利的效果,如果說你對 Docker 有興趣,可以上 Docker 官網 好好的了解它,網路上也有很多的學習資源,希望這篇文章能夠讓你感受到 Docker 的便利、也希望這樣的便利能為你的開發帶來正面的影響。