Skip to content

JiaHongL/docker-demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ㄧ、前提

 這是一個學習Docker的筆記,內容是試著將開發環境移到Docker上運行。


二、Docker簡介

 Docker是一種輕量化的虛擬技術,只專注於系統的應用程式執行,並不像傳統VM必須先安裝完整的作業系統(Guest OS),才能開始安裝或相關應用的執行,所以Docker所需的image(映像檔)也是非常小,而Docker的image也可以包含的套件安裝執行,如安裝一個已帶有Npm與Git的linux環境,另外傳統VM是會獨佔所配置的資源(CPU、記憶體),而Docker所建立的Container是與主機共享資源,不過Container建立的環境是單獨隔離的,並不會互相影響。

優點整理

  • 秒級啟動
  • 有效運用系統資源
  • 可自訂系統環境安裝與修改管理
  • 容易部署與遷移系統
  • 易跨平台的虛擬運行(只需安裝好Docker)

三、前置作業

  1. 照著官網文件,完成安裝Docker。

  2. 創一個 Docker Hub 帳號,並使用終端機輸入 docker login,登入帳號。


四、基礎介紹

名詞

  • Image : 如同系統的映像檔一樣,可使用它來建立需要環境。
  • Container : 安裝image與運行系統的容器,而容器之間都是隔離的。
  • Docker Hub : 如同GitHub一樣,是個公開的docker庫,使用者可以pull別人的image下來,或push自己的image提供給別人收尋與使用,如果是自家使用的image,也可以自建私有的Docker Registry.

指令

Image

  1. Search:收尋一個14.04版本的ubuntu。
docker search ubuntu:14.04
NAME:image名稱
DESCRIPTION:images敘述
STARS:stars數量
OFFICIAL:是否為官方提供的image
AUTOMATED:是否有自動build,自己上傳的image設定連動,如Github commit後,就會自動build image 與 commit 到 Docker Hub.

  1. pull:取得影像檔案。
docker pull ubuntu:14.04

  1. images:查看已下載image的資訊。
docker images

  1. rmi:刪除已下載的image。
docker rmi IMAGE

如果不知道或忘記指令參數,可以到官網查看,或是指令後面打--help

docker rmi --help

-f:強制刪除image.
docker rmi -f image


Container

  1. 建立一個容器
docker run -t -i --name my-ubuntu ubuntu:14.04 /bin/bash

-t:容器的終端機.
-i:讓鍵盤可以輸入到虛擬機的終端機.
--name:為容器命名.

ubuntu:14.04 => 安裝ubuntu版本為14.04,會抓本地端的image,如果沒有就會從Docker hub Search 與 pull 回來,再進行安裝。
/bin/bash => 進入容器所建立ubuntu的Shell,就可以在裡面打指令(虛擬機的ubuntu).

  1. 查看已建立容器的資訊
docker ps -a

-a:顯示全部的容器,包含運行與停止的.

  1. 離開容器
exit

ps: 就會從容器的root帳號離開,回到本機的帳號.

docker ps -a

再打一次指令查看,就會看到這容器現在停止狀態.

  1. 建立一個使用後就會自己移除的容器
docker run --rm -ti ubuntu:14.04 /bin/bash
--rm:使用後移除容器

當離開再查看,就只會看到第一次建立的那個my-ubuntu容器.

  1. 重啟容器
docker start CONTAINER

ps:再查看就會看到已啟動.

  1. 進入容器
docker attach CONTAINER

  1. 停止容器
docker stop CONTAINER

docker kill CONTAINER

差異:stop會做像是關機的動作,而kill是直接關掉容器.


五、Dockerfile

 自己撰寫設定來自製一個image。


  1. 撰寫一個設定檔案.

說明:一個以ubuntu 14.04 為基底,另外包安裝node 7.x版本 與 全域 gulp 3.9.1 版本.

  1. build image
docker build ./docker --tag="joe/front-end:1.0"

--tag:設定image的資訊

因為設定檔是放在docker資料夾下,另外如果沒有指定檔案的話,就會預設去找檔名為Dockerfile來build。

build成功後,再查images就會看到自製image已經完成.

  1. 利用自製的images運行一個一次性容器,然後使用容器的環境來進行專案套件的安裝.

目前本機上是沒有安裝node和npm的

docker run --rm -ti -v ~/Desktop/docker-demo/app:/app joe/front-end:1.0

--rm:使用後刪除容器
--ti:使用容器的終端機與鍵盤
-v: 設定本機的docker-demo下的app資料夾掛載進去虛擬機的app資料夾.

=>進入後使用 npm install 安裝套件,安裝完後打exit出來,容器使用完後就移除.

PS:因為Dockerfile有設定進入容器後自動切換到虛擬機的app資料夾,所以也可以直接在把要打的npm指令寫在後面,容器就會安裝然後自己exit.(指令如下)

docker run --rm -t -v ~/Desktop/docker-demo/app:/app joe/front-end:1.0 npm install

就可以看到利用了容器的環境安裝了專案所需的套件.

  1. 利用容器跑專案的開發環境
docker run --rm -ti -p 0.0.0.0:3000:3000 -p 0.0.0.0:35729:35729 -v "$PWD":/app joe/front-end:1.0 

-p:設定主機與虛擬機的對接port.
"$PWD":本機目前資料夾路徑.

=> 進入後打gulp就可以跑起專案了.

在本機修改scss後,由虛擬機做compile.


六、Docker Compose

 剛剛利用了Dockerfile製作了自己的image,但如果每次要用時都要設定port和資料掛載的路徑就很麻煩了,另外也可能一次要run很多個容器起來,如先run後端容器,然後再run前端容器,所以就可以利用docker-compose來做設定與跑容器.

dcoker-compose除非是安裝時有自帶,不然是要另外安裝的.

  1. 建立與設定 docker-compose.yml 檔案

  1. 一次建立全部的image
docker-compose build

跑完後再查看就會看到建立了兩個設定的image

  1. 利用docker-compose跑起一個容器,幫後端專案安裝套件.
docker-compose run --rm --entrypoint /bin/bash api

--rm:使用完後移除容器
--entrypoint:覆蓋原本容器啟動後會跑的指令.

  1. 利用docker-compose跑起一個前端容器做測試.
docker-compose run --rm --no-deps --service-ports --entrypoint /bin/bash web

--no-deps:設定不啟動相依的後端容器.
--service-ports:docker-compose run 是預設不對接port的,所以要加這選項,把port對接起來.

  1. 利用docker-compose一次跑起前端與後端的開發環境容器.
docker-compose up

=> 會看到先跑起api-dev後,才會再跑起web-dev,然後按getData就可以呼叫api取得資料.

修改前端的scss.

修改後端api的response.


操作影片

Everything Is AWESOME


七、心得

 雖然對於前端來說,會安裝到的環境套件並不多,可能在新電腦只要裝個node,就可以再把專案run起來,或是遇到node版本問題,再安裝個nvm做切換版本,就能解決問題,但前端用docker把開發環境與測試環境放進docker做管理也是不錯,而對後端可能安裝到的環境套件就非常多,像是PHP Laveral 就要安裝一大多東西,如 mysql、php、laveral、...等很多套件,或許有時只是學習一個新語言,之後移除的時候,可能就會移除不乾淨,就會把環境弄髒了,其實對後端來說,docker是可以做到更多事,但筆者是個前端沒能理解太多。


以上文章為筆記,擔心有遺漏之處,如有錯誤觀念或建言,歡迎在issues 提出,感謝.

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published