# GDG on Campus NCU 11/13 Docker 工作坊 [本日簡報連結](https://docs.google.com/presentation/d/1Y9ujVcySOHQs-aGRMu3BR7QkYGrpcgN0FoVWderI530/edit?usp=sharing) ## 目錄 [ToC] # 安裝Docker :::spoiler Windows的注意事項 Docker 在 Windows 需要 WSL(Windows Subsystem for Linux) 才能運作,安裝WSL需要在Powershell輸入下列指令 ```powershell wsl --install ``` 在安裝完成後電腦需要重新啟動 ::: ## 官網下載 Docker 官網:[連結](https://www.docker.com/products/docker-desktop/) :::spoiler 不知道下載哪一個? Windows(Intel / AMD):AMD64 Windows (高通 / ARM):ARM64 MacOS:M系列選 Apple Silicon ,Intel選 Intel Chips ::: ## 套件管理器 (CLI) Chocolately ```powershell choco install docker-desktop docker-cli docker-compose -y ``` Homebrew ```zsh brew install docker docker-compose ``` APT (Linux) 不同distro有各自要注意的部分,請直接從官網下載Docker Desktop或是參照[官方文件](https://docs.docker.com/engine/install/)。 ### 驗證安裝 安裝完成後可以在 command line 輸入以下指令,確認是否有正常安裝! ```bash docker --version docker-compose --version ```  # Hello World from Docker 來執行第一個容器吧! ```zsh docker run hello-world:latest ``` # Build Your First Image via Docker ## 下載檔案 從GitHub上把今天會用到的檔案抓下來) ```zsh git clone https://github.com/Yuyu-1115/docker-workshop.git cd docker-workshop ``` 也可以從[這邊](https://github.com/Yuyu-1115/docker-workshop)下載 ## 建立 Docker 映像檔(Image) 在`docker-workshop`(repo的根目錄)下執行 ```zsh cd python-webapp docker build . -t 00python-webapp ``` 建立好 image 後可以透過 `docker image list` 來查看目前存在電腦中的所有 images ),也可以直接在 Docker Desktop 查看。  ## 執行容器 為了讓容器能夠正常運作,我們需要: 1. 讓容器跑起來 2. 讓容器能夠被外界存取(開放 port) 3. 幫容器取名字(以便管理) 只要輸入以下的指令,我們就能夠讓剛剛建立好的 image 跑起來了 - Unix-like shell (macOS / Linux) ```zsh docker run -it \ # 讓容器跑起來(並讓我們能夠跟容器互動) -p 3000:5000 \ # 讓容器能夠被外界(本機)存取 --name my-first-container \ # 幫容器取名字 python-webapp # 指定 image ``` - Powershell (Windows) ```powershell docker run -it ` -p 3000:5000 ` --name my-first-container ` python-webapp ``` 容器開始執行後 前往 [localhost:3000](http://localhost:3000) 就可以看到跑起來的網站了:D # Persistent Storage: Volume ## 建立 Volume ```zsh docker volume create todo-list ``` ## 執行容器 w/ Volume > 如果你有自己取其他的 image/volume 名稱,記得改成對應的名字:D - Unix-like shell (macOS / Linux) ```zsh docker run -it \ -p 3000:5000 \ -v todo-list:/app/data \ # 將 todo-list 這個 volume bind 到 /app/data --name volume-example \ python-webapp ``` ```zsh docker run -it \ -p 3000:5000 \ -v todo-list:/app/data \ # 將 todo-list 這個 volume bind 到 /app/data --name volume-example \ python-webapp ``` - Powershell (Windows) ```powershell docker run -it ` -p 3000:5000 ` -v todo-list:/app/data ` # 將 todo-list 這個 volume bind 到 /app/data --name volume-example ` python-webapp ``` 容器開始執行後 前往 [localhost:3000](http://localhost:3000) 就可以看到跑起來的網站了:D # Multiple Containers at Once: docker-compose 進入 `compose-example` 目錄 ```zsh cd compose-example ``` 輸入一條~~魔法~~指令...... 三個容器就跑起來了! ```zsh docker-compose up -d ``` # Deploy to the Cloud: Google Cloud Platform 這邊先跟大家提醒一下,GCP 託管[並非完全免費](https://docs.cloud.google.com/free/docs/free-cloud-features?hl=zh-tw#:~:text=units%20per%20month-,Learn%20more,vCPU%2Dseconds%20of%20compute%20time),免費額度也不算太慷慨。 此外,由於使用Cloud Run需要**開啟免費試用**(90天的300美元試用額度)且綁定付款資訊(信用卡)後才能使用,如果不想綁定付款資訊的話這部份就沒辦法實作了。 如果之後有興趣拿GCP來玩看看的話,建議先不要開啟(~~當然也可以開複數帳號重複領取優惠~~),下面也有完整的圖文教學,可以在日後自己來玩看看XD。 (這邊還是會demo一次給大家看) ::: info 等等會介紹不用綁定付款資訊也有足夠免費額度的 Zeabur,敬請期待:D。 ::: ## 新增專案 GCP對於服務的管理是以專案為單位,因此我們需要先新增一個專案。 1. 進入 [Google Cloud Console](https://console.cloud.google.com),點選左上角的選取專案  2. 點選右上角的新增專案  3. 輸入名字後按下建立即可  ## 部署應用程式 1. 選擇中間的部署應用程式,進入 Cloud Run 的主頁面  2. 由於我們的 Image 目前存放在 Docker Hub,選擇部署容器  > 這邊選擇後會要求你連結「帳單帳戶」,這邊就是要求你輸入付款資訊的地方了 3. 輸入必要資訊 選擇 Artifact Registry / **Docker Hub** 映像檔網址:yuyu15/volume-example (或是其他你想要部署的 container,這邊以前面build起來的`volume-example`為主) 區域:隨意 驗證:允許公開存取 計費功能:以要求為依據 服務資源調度:自動(下限0) Ingress:全部 容器-通訊埠:5000(參照Dockerfile) 磁碟區-磁碟區名稱:自己取 bucket 或資料夾:開一個新的bucket,名字取好後其他預設即可 容器-磁碟區掛接: - 名稱:剛剛的磁碟區名稱 - 掛接路徑:/app/data 其他保持預設即可,最後按下建立即完成  最後透過給予的網址就成功把容器部署上去了!  連結:[待補](https://volume-example1-519018217117.europe-west1.run.app/) # Alternative: Zeabur Zeabur是一個為了部署應用程式而生的 PaaS 平台,每個月提供免費的5美元的額度,基本上對於一些小服務來說,完全不用付錢就能夠 24/7 執行了。 ~~如果遇到問題的時候,把問題發在 Threads 上,創辦人就會來幫你解決問題了~~ ## 新增專案 Zeabur 網址: https://zeabur.com/zh-TW/ 1. 進入控制台,點選建立專案  2. 選擇 Docker 容器映像檔  3. 輸入容器資訊後按下部署 映像檔名稱:yuyu15/volume-example Port:5000(HTTP) 硬碟:(硬碟名稱),路徑:/app/data   看到運作中就代表服務已經部署完成了  ## 開放公網存取 ### Zeabur 子網域 1. 在網路分頁下,選擇綁定Zeabur子網域,輸入一個喜歡的子域名(不得重複)後按下確認綁定即可 > 記得確認右邊的 Port 是不是對的 連結:[Link](https://gdg-ncu-docker.zeabur.app/)  ### 自有網域(以 Cloudflare 為例) ::: info 如果你有自己的網域的話,操作還滿直觀的XD。 這邊主要還是以 demo 目的為主 ::: 1. 在網路分頁下,選擇綁定自有網域,輸入你想要的域名(主域名要當然要是你所持有的)  2. 到 Cloudflare 控制台的 DNS頁面,新增對應的 DNS Records   3. 看到綠色背景就代表更新完成了,可以點進去看看:D 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up