Docker Tutorial

2022-03-06

Windows 開發者生態系的 Docker 入門介紹,從下載安裝到實際使用。以開發者的觀點探討 Docker 可以為開發流程與應用所帶來的便利與革新;從營運人員的角度探討 Docker 的容器化技術如何使 Infra as Code 以及 MicroServices 如何可能,從而也觸及 Docker 之間交互作用,引導出為什麼我們需要 Kubernetes Orchestration 來達到複雜的管理與調度 😀

Docker logo

說明

Docker Desktop

  • WSL2 Backend (Win Home / Win Pro)
  • HypverV Backend (Win Pro)

Windows Container

  • Windows Server Container (共用核心)
  • HyperV Container (獨立核心、完全隔離)

安裝方式 (WSL2 Backend)

使用 Windows Run optionalfeatures 開啟 Windows 子系統 Linux 版Windows Hypervisor 平台虛擬機器平台

使用 Dcoker Desktop 進行安裝:



如果切換成 Windows Containers 模式,因為 Windows Home Edition 不支援 HyperV 會出現錯誤,使 Docker Engine 無法啟動。


安裝完成後,透過 wsl 可以看到以下資訊:

C:\Users\Webber>wsl --list
Windows 子系統 Linux 版發佈:
docker-desktop (預設)
docker-desktop-data

docker-desktop 是用於執行 Docker engine (dockerd),而 docker-desktop-data 則是用於儲存容器與映像檔,兩者都無法用於一般開發,如果需要在 WSL2 上進行開發,需要安裝一個 Linux 發行版,例如 Ubuntu。

Volumes

建立的 Docker Cotainer 所留下的 Volume 會儲存在實際作業系統的下列路徑:

\\wsl.localhost\docker-desktop-data\data\docker\volumes

Scenario

WordPress & MySQL

參考 vc7 所分享筆記的 compose.yml,並且在結合 phpmyadmin

docker-compose.yml

version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: admin
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress@

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress@

   phpmyadmin:
     image: phpmyadmin/phpmyadmin
     ports:
       - "8080:80"
     depends_on:
       - db
     environment:
       PMA_HOST: db
       PMA_PORT: 3306
volumes:
    db_data:

啟動 docker compose

docker-compose up -d

清除 Volume 資源的方式

docker volume ls
dcoker volume rm wp_db_data
docker volume prune

OWASP Juice

打靶機、練滲透測試不需要大費周章地準備環境了,Docker 起,Image 落,juice-shop 就完成部署了 🙂

docker pull bkimminich/juice-shop
docker run --rm -p 3000:3000 bkimminich/juice-shop

SQL Server On Linux

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=yourStrong(!)Password" -e "MSSQL_PID=Developer" -p 1433:1433  --name sqlpreview --hostname sqlpreview -d mcr.microsoft.com/mssql/server:2022-preview-ubuntu-22.04

參考資料

Windows容器技術大剖析

Windows 10 Home家用版安裝 Hyper-V 與 Docker

Introducing the Docker Desktop WSL 2 Backend | docker

用 Docker Compose 快速生成一個 WordPress 網站(筆記,無細節說明)

容器初體驗 - 搞個 IIS Container 來部署網站

Windows 和容器 | learn.microsoft

在 WSL 2 上開始使用 Docker 遠端容器 | learn.microsoft

學習 Docker | learn.microsoft

不合理的要求是磨練:Docker 架站

用 Docker 建立不同 Angular CLI 版本的開發環境

時代在變 Docker 要會:台北 Docker 一日入門篇

Docker 基礎介紹與實戰

快速上手 Windows Containers 容器技術 (Docker Taipei)

開發人員不可不知的 Windows Container 容器技術預覽

Windows Container 101: dotNET, Container, Kubernetes

iThome

Container技術三部曲(一)迎接下一個雲端火紅技術Docker

Container技術三部曲(二)不只快,還要更快──臺灣Docker應用案例的啟發

Container三部曲(三)IT架構的新奈米革命:Container OS