# Docker 12/14 黑客社程式線社課 --- ### ==**__線上__**== 社員簽到 [https://forms.gle/3TgNZeLSb69ekdyD6](https://forms.gle/3TgNZeLSb69ekdyD6) ![](https://i.imgur.com/hQZnciE.png =40%x) --- ### 先備條件 - Linux 基礎操作 - Windows 10 1903 (建置版本 18362) 以上 --- ## 容器 vs 虛擬機 ![](https://i.imgur.com/XyDTpOS.png) ---- ### 好處 - 相較於直接部屬 - 移植性高 - 安全 - 部屬快速 ---- ### 好處 - 相較於虛擬機 - 效能損耗低 - 映像檔案小 ---- ### 壞處 - 些微效能損耗 - 重新學習 - 架構調整 --- ## Docker 熱門的 Linux 容器管理平台之一 ![docker](https://upload.wikimedia.org/wikipedia/commons/4/4e/Docker_%28container_engine%29_logo.svg) --- ### 架構 ![](https://docs.docker.com/engine/images/architecture.svg) --- ### Registry ![](https://i.imgur.com/X2ETArS.png) ---- ### 官方架設的 Registry 善用別人已經建立好的映像檔 [hub.docker.com](https://hub.docker.com/) --- ### Client 圍繞在 docker 這個指令上 ![](https://i.imgur.com/V1bj0Hk.png) --- ### 安裝 Docker > 熱門的 ==Linux== 容器管理平台之一 Windows 要先裝 WSL2 ---- ### 安裝 WSL2 (一) 1. 以管理員身分執行以下指令 ```cmd= dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart ``` 2. ==**重開機**== ---- ### 安裝 WSL2 (二) 3. 安裝其中一種 Linux 發行版 - [Debian](https://www.microsoft.com/store/productId/9MSVKQC78PK6) <!-- - [Ubuntu](https://www.microsoft.com/store/productId/9NBLGGH4MSV6) --> ---- ### 安裝 WSL2 (三) 設定 Linux 系統的使用者名稱與密碼 它是另一套作業系統,不必跟 Windows 一樣 ![](https://i.imgur.com/hlJM0Z9.png) ---- ### 安裝 Docker Desktop [Docker Desktop](https://www.docker.com/products/docker-desktop) --- ## Docker 指令 ---- ### docker help 善用[線上說明文件](https://docs.docker.com/engine/reference/commandline/cli/)或 help 指令 ```bash= docker --help docker <COMMAND> --help ``` ---- ### 拉取映像檔 範例:從 registry 拉取 Debian 11 的映像檔到 host ```bash= docker image pull debian:11 docker pull debian:11 ``` ---- ### 推送映像檔 範例:將 Debian 11 的映像檔推送到 docker hub ```bash= docker image push mikucat/debian-ssh:11 docker push mikucat/debian-ssh:11 ``` ---- ### 建立映像檔 範例:使用當前目錄的 Dockerfile 建立映像檔 ```bash= docker build . ``` ---- ### 建立並運行容器 範例:以 Debian 11 映像檔建立容器 並命名為 example ```bash= docker run --name=example debian:11 ``` ---- ### 查看正在運行的容器 ```bash= docker container ps docker ps ``` ---- ### 在容器中執行程式 範例:在 example 容器中執行 ls 指令 ```bash= docker container exec example /bin/ls docker exec example /bin/ls ``` ---- ### 刪除容器 範例:刪除 example 容器 ```bash= docker container rm example docker rm example ``` --- ### Dockerfile 建構容器映像檔的腳本 關係類似這樣: 映像檔 <-> Dockerfile 執行檔 <-> 程式碼 [Dockerfile 線上說明文件](https://docs.docker.com/engine/reference/builder/) --- ### 手把手練習! 建立一個帶有 SSH 服務的 Debian 11 容器 ---- ### Dockerfile ```dockerfile= FROM debian:11 RUN sed -i 's|archive.ubuntu.com|tw.archive.ubuntu.com|g' /etc/apt/sources.list \ && mkdir /var/run/sshd \ && echo 'root:hackersir' | chpasswd RUN apt update \ && apt install -y openssh-server \ && sed -i 's|#PermitRootLogin.*|PermitRootLogin yes|' /etc/ssh/sshd_config \ && sed 's|session\s*required\s*pam_loginuid.so|session optional pam_loginuid.so|g' -i /etc/pam.d/sshd EXPOSE 22 CMD ["/usr/sbin/sshd","-D"] ``` ---- ### 建立映像檔 ```bash= docker build -t debian-ssh:11 . ``` ---- ### 運行 ```bash= docker run --name hackersir -itd --rm -p 10022:22 debian-ssh:11 ``` ---- ### 測試 SSH 服務 密碼輸入 hackersir ```bash= ssh -p 10022 root@localhost cat /etc/os-release ``` 成功的話會顯示 ``` PRETTY_NAME="Debian GNU/Linux 11 (bullseye)" ``` --- ### Docker Compose - 處理容器之間的依賴關係 - 搭配 Dockerfile 快速測試應用程式 - 採用 YAML 宣告設定 [Docker Compose 線上說明文件](https://docs.docker.com/compose/compose-file/compose-file-v3/) ---- ### 指令 vs 宣告 - 指令:狀態與狀態之間的更動 - 宣告:期望狀態 ![](https://i.imgur.com/MZTuQTR.jpg =60%x) ---- ### 資料庫+網頁管理介面 docker-compose.yml ```yaml= version: '3.9' services: mariadb: image: mariadb environment: MARIADB_ROOT_PASSWORD: password adminer: image: adminer ports: - '8080:8080' ``` ---- ### 一鍵啟動(?) ```bash= docker-compose up -d ``` ![](https://i.imgur.com/oK0aF8s.png =70%x) ---- ### 停止 ```bash= docker-compose down ``` --- ### 延伸關鍵字 - Docker Swarm - Ansible - Kubernetes - Linux Capability - Linux Namespace - Linux Cgroups --- ### 課程回饋 [https://forms.gle/HXpg5DSggqvGXGxL7](https://forms.gle/HXpg5DSggqvGXGxL7) ![](https://i.imgur.com/qYovbzI.png =50%x)
{"metaMigratedAt":"2023-06-16T16:08:00.813Z","metaMigratedFrom":"YAML","title":"Docker","breaks":true,"description":"12/14 黑客社程式線社課","contributors":"[{\"id\":\"d5ff3cff-6013-437e-ac74-58dddd547e5a\",\"add\":6341,\"del\":1973}]"}
    454 views