# Docker Workshop
Docker (opens new window) 工作坊。
開始前,先對此工作坊做點基本說明:
- 主要使用 command line 操作,shell 會以
bash
為主 - 文件會以 Mac / Linux 環境為主做說明,不保證 Windows 系統完全可用
- 大多 image 裡面的 user 都會是 root,包括執行 docker 也需要 root(Linux)。為方便入門為前提,會以 root 執行來教學
GUI 可以參考 Portainer (opens new window)、Kitematic (opens new window)、DockStation (opens new window),但本 workshop 說明不會討論 GUI。
# 直接在原生系統上安裝 Docker 環境
不同環境的安裝方法當然是不同的,但最後驗證是否安裝成功,可以打開終端機輸入下面指令:
docker run hello-world
若沒出現錯誤訊息,且有出現 Hello from Docker!
的字眼的話,代表服務有正常啟動,可以開始使用 Docker 了。
# Mac
使用 Homebrew (opens new window) 的 Cask (opens new window) 安裝(需要權限):
brew cask install docker
或是下載安裝包 (opens new window)安裝(需要權限)。
# Windows 10
參考官方文件 (opens new window),下載並安裝 Docker Desktop 即可。
# Linux
參考官方文件 (opens new window),注意必須要是 64-bit 版本才能運行 Docker。
或使用懶人包安裝:
sudo curl -fsSL https://get.docker.com/ | sh
sudo usermod -aG docker your-user
已使用 Vagrant 測試過
ubuntu/trusty64
(opens new window)、debian/jessie64
(opens new window) 可行。centos/7
(opens new window) 需另外啟動 docker daemonsudo systemctl start docker
。
# 使用虛擬機安裝 Docker 環境
有時候因為特殊理由,可能會不想或無法(如 Windows 7)在本機安裝 Docker,這時可以考慮使用虛擬機安裝。
# Docker Machine
Docker Machine (opens new window) 是建立 Docker 虛擬機的首選,預設的 provider 包括以下選擇:
- VirtualBox (opens new window)
- Hyper-V (opens new window)(Windows only)
- AWS
使用 AWS 請注意防火牆要開通 local 機器的連線,Docker 使用 tcp 2376 port 連線,同時也注意不要讓其他人能連到這個 port。
以 VirtualBox 為例,執行以下指令即可建立一個 Docker 虛擬機:
# 建立 Docker 虛擬機
docker-machine create -d virtualbox my-docker
# 查看這台機器相關的環境參數
docker-machine env my-docker
# export 環境參數,執行 docker 指令即可改直接連線到虛擬機上
eval $(docker-machine env my-docker)
# Vagrant
Vagrant (opens new window) 可以使用指令管理虛擬機(VM),並使用程式碼來表達環境(Infrastructure-as-code,IaC)。
Clone 此專案,並使用 vagrant up
指令即可得到 Ubuntu trusty 64-bit + Docker CE 的乾淨環境:
vagrant up
vagrant ssh
# AWS
除了上述方法外,也可以在 AWS 上使用 RancherOS (opens new window) 的 AMI。
# Cloud9
另一個方法是使用 AWS Cloud9 (opens new window) 服務:
- 起 Cloud9 服務,設定直接用預設值即可
- 在 Cloud9 服務,下
curl ifconfig.co
指令取得公開 IP: - 因需要練習 port forwarding,所以必須到 EC2 服務裡,找到對應的 instance,再設定 security group
# Play with Docker
上述方法全部都不行的話,最後一個就是使用 Play with Docker (opens new window) 服務,只要準備好 DockerHub 的帳號,即可使用。因為它是一個使用 DinD (opens new window) 做成的線上服務,所以會有兩個問題:
- 它並沒有保證系統一直都可以用,所以什麼時候會壞,這是無法預期的
- 因為使用 DinD,所以跟 port forwarding 相關的練習是無法使用瀏覽器測試的,不過可以使用 curl 指令測試
# 預載 Image
若知道如何使用 docker 指令下載 image 的話,可以先執行下面這些指令,先下載比較大的 image,避免當天大家都在下載造成網路過慢。
docker pull composer:1.10
docker pull gradle:6.5
docker pull maven:3.6-alpine
docker pull mysql
docker pull nginx
docker pull node:10-alpine
docker pull node:12-alpine
docker pull php:7.2-alpine
docker pull php:7.3-alpine
docker pull php:7.4-alpine
docker pull python:3.8-alpine
docker pull selenium/hub:3.141.59-iron
docker pull selenium/node-chrome-debug:3.141.59-iron
docker pull selenium/node-firefox-debug:3.141.59-iron