Docker 是一個虛擬化技術
可以根據映像檔製作獨立的容器來模擬特定環境
很多人認識 docker 是為了部署作業
不過除了部署還有很多的學習價值
像是用來認識不同的作業系統與環境
底下就來說明 Docker 的基本使用方式吧!
- 用 homebrew 來安裝 Docker
- Docker 中的 image 和 container
- Docker 的基本指令
- 替 React 專案撰寫 Dockerfile
用 homebrew 來安裝 Docker
首先這是 Docker 的官網
進去可以直接下載 Docker Desktop
因為本身是使用 macOS 作業系統
順便推廣一下 homebrew
homebrew 是一個 macOS 的套件管理工具
能以指令的方式統一且輕鬆的管理電腦上安裝的軟體
基本上安裝的軟體都會被放在 /opt/homebrew 下面
另外使用 brew list 就可以看見自己安裝過的軟體有哪些
使用 brew search docker 在列表中查看 docker 軟體
1 | ==> Formulae |
可以注意到有兩個分類都有 docker
這兩個分類分別是:
- Formulae
- Casks
中文名稱是配方(Formulae)和酒桶(Casks)
是 homebrew 裡面的術語
配方代表的是 CLI 工具(文字指令行介面)
酒桶則是 GUI 工具(圖形化使用者介面)
GUI 使用上比較親民也和官網直接下載的一樣
另外也同時包含了 CLI 的用法
所以可以直接安裝 Casks 裡面的 docker
當安裝過後再搜尋時就會看見小勾勾
代表這是已經安裝過的軟體
使用 homebrew 安裝 GUI 版本的 docker:
brew install --cask docker
Docker 中的 image 和 container
在使用 Docker 前要先認識的兩個術語
- image 映像檔/鏡像
- container 容器
image 可以理解為包含了特定服務及環境的模板檔案
而 container 則是 image 的運行實例並且和原先的系統有所分隔
至於映像檔有哪些呢?
可以到 docker hub 上面搜索
Docker 的基本指令
安裝完成後
如果直接下 docker 的相關指令會發現無法運行
而且會得到底下的訊息:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock.
Is the docker daemon running?
這則訊息是在說明 daemon 尚未運行
翻譯查了一下 daemon 可以叫做守護進程或是常駐程式
指在電腦後台運行的程式
為使其運行可以直接點擊 docker 圖像啟動
或是使用指令 open --background -a docker
當安裝完 docker 並確認將其在後台運行後
接下來就可以安裝 image 了
這邊以下載 nginx 的 image 為例
docker pull nginx
這樣就可以下載最新版的 nginx image 到本地
如果要查看本地已經有的 image 可以使用下面指令
docker images
運行容器方式
docker run -d -p 80:80 nginx
| 參數 | 說明 |
|---|---|
| -d | daemon -> 守護進程 |
| -p | port -> local:container -> 表示本機的 80 port 會映射到容器裡的 80 port |
另外因為 nginx 是網頁伺服器
預設 80port 為其根目錄
所以此時本機網址用 localhost 可以看到 nginx 的歡迎畫面
1 | Welcome to nginx! |
確認運行中的容器
docker ps
| CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES |
|---|---|---|---|---|---|---|
| 4d251324d169 | nginx | “/docker-entrypoint…” | 5 minutes ago | Up 5 minutes | 0.0.0.0:80->80/tcp, :::80->80/tcp | recursing_wilson |
註:docker ps -a 可以查看所有容器包含未運行的
再來是進入容器的終端機
docker exec -it 4d251324d169 /bin/bash
4d251324d169 為上一步驟查到的 CONTAINER ID
-it 每次查這兩個參數都覺得很深奧
總之是開啟可以從本機和容器間互動的介面所需要的參數
/bin/bash 則是要開啟的終端機
離開容器終端機:
1 | root@4d251324d169:/# exit |
關閉容器
docker stop 4d251324d169
刪除容器
docker rm 4d251324d169
刪除本地 image
docker rmi <image>
OK..以上的一輪說明已經包含:
- 下載 image
- 啟動 container
- 使用 container
- 關閉 container
- 刪除 image 和 container
真的是又臭又長…
不過恭喜你已經對 docker 的基本使用方式有所了解了
替 React 專案撰寫 Dockerfile
Dockerfile 是啥呢?
主要是一份文檔可以用來製作 image
裡面會敘述 image 要包含的指令與配置
底下先提供一份範例:
1 | # 使用 Node.js 作為基礎映像 |
這份 dockerfile 會被放在專案的根目錄
最後一步是建構映像檔
docker build -t name:version -f Dockerfile ."
- -t: 用來打標籤名稱和版本號
- -f Dockerfile 表示套用的檔案
- . 表示當前目錄
本文作者: David Huang
本文地址: https://davidblog.github.io/2023/07/29/docker-虛擬化技術/