type
status
date
slug
summary
tags
category
icon
password

Docker

推薦安裝

裝完在終端機打個老朋友指令測試一下

一個直覺的理由為什麼要學 Docker

使用 .exe 安裝 MySQL 在電腦上:
使用 docker 安裝+啟動 MySQL 在你的電腦上

介紹今天的主要架構

我們希望有一個後端,可以連接資料庫,跟它溝通
假如今天的東西你都不懂,那你可以怎麼做
  • 想像 request
  • 想像彼此溝通
  • 想像全部都是軟體,或一個方塊
 
接著,因為假如每個你都自己裝都很麻煩,因此我們需要 Docker 這個東西,分點擊破
所以等等我們會先從建立後端的 Docker 開始

Docker 架構 & 講古

chroot

在 Unix V7 的開發階段出現的功能,可以吧 process 和 subprocess 的根目錄,改到其中一個資料夾

Jails

在 FreeBSD 出現,可以為 process 分配 ip

Linux VServer

還可以對記憶體進行分區

Container 萌芽階段

Solaris Containers, Open VZ(Open Virtuzzo), Process Containers

LXC (LinuX Containers)

第一個最完整的 Linux 容器管理實做,使用 cgroup 和 Linux namespaces,並且可以直接在 single Linux kernel 運行

Docker

提供一個很棒的容器管理介面
 
總之接下來就越來越成熟,另外, Docker 的重點還是在「管理」容器,容器本人就是容器,因此可能會問 K8s 跟 Docker 的關係,但還是要回到容器管理去想會比較好

Docker Hello World

所以今天的重點,當然是想要教大家怎麼建立屬於自己的 Container 當服務
不過在此之前要先對 docker 的世界簡單了解一下
notion image
首先有三個名詞:
  • Image
  • Container
  • Repository
把 Image 當作藍圖,並且把 Container 當作執行的小電腦,而 Repo 是放 Image 的地方,而雲端是預設 Docker Hub
 
了解完這一張圖之後,來了解一些基本指令
  1. 看一下目前本地的 Image
    1. 把別人的 Image 拉下來
    1. 執行這個 image
      1. 查看 container 執行狀態
        1. 看一下 container 們
          1. 移除 container
            1. 移除 Image
               
              到這邊應該對 Container 有一點想像了,但離要客製化自己的 image 還有一點點距離,因此我們這邊要用一個後端來給你一個例子

              新手出擊:以 Python FastAPI 為例子

              我們要使用的是 Python 的其中一個 package FastAPI,它可以給你一個快樂的後端,這邊不用會 Python 或後端都沒有關係,用想像的或用看的就好
               
              先來看一下 Example Code
              notion image
              然後我們只要戳一下這個位置,它就會跑出這個畫面
              notion image
              notion image
               
              notion image
               
              但我們可以先想像我們希望達成的事情,也就是我們的後端被關在一個 container 裡面,那也很好想像裡面的環境應該要有 Python,並且要有我們的 code 對吧,所以我們要做以下幾個步驟
              1. 有 Python 的 image
              1. 客製化那個 image(要安裝 fastAPI 和 把程式碼放進去)
              1. 設定它 run 的時候, container 要把 port 打開
               

              建立客製化 Image (Dockerfile)

              先打開一個資料夾,並且新增幾個檔案
              Dockerfile
              看一下在客製化的階段我們做了什麼
              1. 我們用現有的 image python:3.8-slim 來客製化
              1. 我們把一些 requirements.txt 放進去我們的 container 裡面
              1. 就想像成 cd /app
              1. pip install 的感覺
              1. 把目前的東西 copy 到 /app ,目的是把程式碼放進去
              1. 設定當我們 run 這個 container 的時候,要做甚麼事情
              requirements.txt
              main.py
              然後執行
              我們的 image 就出生了,最後要 run 它
              注意到我們的 run 多了幾個參數,其他可以自己查這邊不補充,主要想提到
              • -d, 這個是讓你的終端機不要跑出 container 的 log
              • -p 設定 container 對外的 port
               

              MySQL 的部分

              簡單講解 MySQL & phpmyadmin

              這邊不去細談 SQL 之類的愛恨情仇資料庫關係
              簡單來說, MySQL 就是你的資料庫本人, phpmyadmin 就是可視化界面,後者沒有世界還是可以運轉
              不過因為他們是兩個不同的軟體,因此也很好想像,以 Docker 的角度,我們要開兩個 container 去管理他們

              怎麼用 Docker 把 MySQL 裝好

              • 設定帳號密碼
              • port 的位置
              • 一些眉角角的設定
              • 先查網路再說,不要自己幹,看別人怎麼做,然後去模仿和確認你的需求
               

              Docker-compose

              你會發現前面我們會做太多的事情,都在一行一行打指令,要改某個東西就很麻煩
              那我們有沒有辦法把想要打的指令全部設定在一個檔案裏面
              直接執行一行就可以搞定,這就是 Docker compose
               

              關於 Volumn

              有些東西,你不希望 Container 關掉之後,重開一切都變成新的,例如你的資料庫
              所以你需要 Volumn 這個酷東西
               

              串接 MySQL

              FastAPI
              Dockerfile
              requirement.txt
              docker-compose.yaml

              Notion

              課前請大家先把帳號註冊好,分別是 overleaf, Notion
              另外 Notion 推薦使用學校的信箱去註冊,學生可以免費升級 Pro (空間之類的比較大)

              Notion 的基本操作

              ⚔️
              基本操作示範區
               

              一個文章的起手式

              • 在一個大 Page 建立 page
              • 把 icon 和背景圖片建立好
              • 把 toc 放上去
              • 把常用的連結丟一丟

              分享給你的朋朋

               

              Notion Database

               

              炫炮功能分享

              LaTeX

               
               

              參考資料

               
               
              Pytorch 入門時間 & Wandb架站大成功 + 資策會持續工作