# Docker Workshop

Build Status (opens new window)

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 daemon sudo systemctl start docker

# 使用虛擬機安裝 Docker 環境

有時候因為特殊理由,可能會不想或無法(如 Windows 7)在本機安裝 Docker,這時可以考慮使用虛擬機安裝。

# Docker Machine

Docker Machine (opens new window) 是建立 Docker 虛擬機的首選,預設的 provider 包括以下選擇:

使用 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) 服務:

  1. 起 Cloud9 服務,設定直接用預設值即可
  2. 在 Cloud9 服務,下 curl ifconfig.co 指令取得公開 IP:
  3. 因需要練習 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

# References