# Week17<br> ## Docker, Container, OS [TOC] ---- Made by FanRende (030Mortal#5525) <img src="https://www.docker.com/wp-content/uploads/2013/09/docker-meme.jpg.webp" width="60%"> ###### [ref](https://www.docker.com/blog/docker-can-now-run-within-docker/) --- ## 什麼是 Docker - Docker 是一個開源的容器化平臺,可用於構建、打包和運行應用程序。 - 它通過容器的方式提供了輕量級、可移植和可擴展的應用程序解決方案。 --- ## 容器和虛擬機的差異 ![](https://i.imgur.com/EFT3gFN.png) ---- <div class="flex-container"> <div class="flex-content"> - 資源需求 - 虛擬機佔用大量的資源來運行完整的 OS - 容器僅需要運行應用程序的運行時環境 - 啟動時間 - 虛擬機需要較長的啟動時間 - 容器可以在幾秒鐘內啟動。 - 隔離性 - 虛擬機提供了完整的隔離環境 - 容器共享主機的操作系統核心 - 效能開銷 - 虛擬機需要虛擬化,帶來額外的效能開銷 - 容器運行在主機的操作系統上,效能開銷較低。 </div> <div class="flex-content"> ![](https://i.imgur.com/EFT3gFN.png) </div> </div> --- ## 容器的優點: - 快速部署:容器可以在幾秒鐘內部署 - 隔離性:容器提供了隔離環境 - 可移植性:容器可以在不同的環境中運行 - 高效管理:容器可以通過 CI/CD 來管理和維護 --- ## 安裝 Docker<br>(on Windows WSL2) - [Install Docker Desktop on Windows](https://docs.docker.com/desktop/install/windows-install/) - <img src="https://hackmd.io/_uploads/B1v49M-53.png" width=35%> - WSL 中安裝 Client tools ```shell sudo apt update sudo apt install docker.io sudo usermod -aG docker $USER ``` - `docker run hello-world` ---- ### 成功畫面 <div class="flex-container"> <div class="flex-content"> - ![](https://hackmd.io/_uploads/r1zOpGZq3.png) </div> <div class="flex-content"> - ![](https://hackmd.io/_uploads/SyvBAGZ93.png) </div> </div> --- ## Docker 的基本使用步驟 - 定義 Dockerfile 描述 Image 的內容 - 構建映像 (Image) - 創建容器 (Container) 並執行 - 使用 docker compose 建立關聯的多容器架構 (optional) ---- ### Dockerfile <img src="https://hackmd.io/_uploads/SJJKZ7W5h.png" width=75%> ```dockerfile= # 使用 Ubuntu 作為基礎 Image FROM ubuntu:latest # 安裝需要的 Package RUN apt-get update && apt-get install -y vim # 設置工作目錄 WORKDIR /app # 複製當下目錄到 container 中 COPY . /app # 定義 container 執行的預設指令 CMD ["cat", "/app/example_file"] ``` ---- - `docker build -t myimage .` ![](https://hackmd.io/_uploads/HJxoZQ-5n.png) - `docker run -it myimage` ![](https://hackmd.io/_uploads/r1WyfX-q2.png) ---- - 讓 container 執行後不會自行停止 ```Dockerfile CMD tail -f /dev/null ``` ```shell $ docker build -t myimage . --no-cache ``` - `docker run -itd myimage` <img src="https://hackmd.io/_uploads/B1qVm7Wc3.png" width=75%> - `docker exec -it <name> bash` <img src="https://hackmd.io/_uploads/r1pIXmb53.png" width=75%> --- ## docker compose <img src="https://hackmd.io/_uploads/BkzHtQZ52.png" width=65%> ```yaml= # docker-compose.yaml services: web: build: . ports: - "8000:5000" volumes: - ./code:/code depends_on: - redis redis: image: redis ``` ---- - `docker compose up -d` <img src="https://hackmd.io/_uploads/Sy5zqQb9h.png" width=50%> - `docker compose down` <img src="https://hackmd.io/_uploads/Hkh-9Q-92.png" width=50%> - overview <img src="https://hackmd.io/_uploads/Syh5umW9n.png" width=50%> --- 參考 / 延伸閱讀: - [Docker Desktop WSL 2 backend on Windows](https://docs.docker.com/desktop/wsl/) - [Docker Hub](https://hub.docker.com/) - [Dockerfile reference](https://docs.docker.com/engine/reference/builder/) - [Docker Compose overview](https://docs.docker.com/compose/) <div class="flex-container"> <div class="flex-content"> </div> <div class="flex-content"> </div> </div> <style> .gray { color: gray; font-size: 0.5em; } .slides .rust { font-size: 0.75em !important; line-height: 1.2em !important; } .mermaid { background-color: rgba(1, 1, 1, .2) !important; } .slides code { background-color: #444 !important; border-radius: 10px; white-space : pre-wrap !important; padding-right: 0.1em; padding-left: 0.1em; } .code-wrapper code { background-color: inherit !important; border-radius: inherit; } .flex-container { display: flex; justify-content: center; } .flex-content { flex-grow: 1; font-size: 0.75em; } </style> <style> /* Customize website's scrollbar like Mac OS */ ::-webkit-scrollbar { -webkit-appearance: none; width: 7px; } ::-webkit-scrollbar-thumb { border-radius: 4px; background-color: rgba(128, 128, 128, 1); -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5); } </style>
{"title":"Week17 - Docker, Container, OS","slideOptions":"{\"theme\":\"dark\",\"transition\":\"fade\",\"previewLinks\":true}","description":"簡介 Docker, container, os\n並介紹 Docker Desktop on Windows WSL2\n及基本 docker, docker compose 指令","image":"https://hackmd.io/_uploads/HylXaXW92.png","contributors":"[{\"id\":\"82f6b599-31b8-4112-9dc5-7d7b7d6a3ebb\",\"add\":5590,\"del\":1045}]"}
    203 views
   Owned this note