Lunski's Clutter

This is a place to put my clutters, no matter you like it or not, welcome here.

0%

Docker

容器化的主流工具。

Container 容器化

  1. 快速部署與一致性:Docker映像包含所有軟件依賴項,確保在多個平台上創建一致環境。
  2. 隔離與安全性:每個容器獨立運行應用程序皆使用自己資源,實現了最大的安全性和可靠性。
  3. 可伸縮性與便攜性:容器隔離環境,易於擴展。

在還沒Docker前我們可能要用VMWare開虛擬機, 耗費大量資源, 伸縮性也不佳。

Docker File 定義映像檔如何啟動

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 基礎映像  
From python: 3.9

# 維護者信息
MAINTAINER Eric

# 工作目錄
WORKDIR /app

# 複製當前目錄下的所有文件到工作目錄
COPY . /app

# 添加本地的 JDK 壓縮包到工作目錄中並解壓
ADD jdk-8u152-linux-x64.tar.gz /app/

# 安裝所需的Python包
RUN pip install --no-cache-dir -r requirements.txt

# 設定環境變數
ENV JAVA_HOME=/app/jdk1.8.0_152
ENV PATH=$PATH:/app/jdk1.8.0_152/bin

# 暴露應用端口
EXPOSE 5000

# 啟動應用
CMD ["python", "app.py"]

docker build -t my-python-app . # 建構映像檔

映像檔

  • docker search 搜尋想裝的 Docker Image
  • docker pull 指 Docker Image 下載回 local
  • docker images 顯示出在 local 下載了哪些 Docker Image
  • docker build –tag node-docker . 生成鏡像
  • docker run 使用 Docker Image 啟動執行 Docker Container
  • docker container ls 或 docker ps 確認目前執行中的容器
  • docker exec -it bash: runs a new command in a running container 如果要使用 foreground,我們則要使用 -it 這個參數 沒有加 -it ,基本上,只 run 一下,馬上就跳回來了
  • docker rmi [OPTIONS] IMAGE [IMAGE…] 删除本地一个或多少镜像

基本操作

  • docker login 指令登入到 Docker Hub
  • docker history 操作歷史
  • docker inspect 容器資訊
  • docker save -o # 將 Docker Image 存檔出一個檔案
  • docker load -i
  • docker –version 查看版本
  • docker run –help 查看可使用操作
1
2
3
4
docker run -d --name web -p 8080:80 docker hub user/project
* -d: 背景執行
* --name web: 指定此container叫web
* -p: 映射port
  • docker COMMAND –help 查看所有指令
  • docker info 查看狀態
  • docker ps -a 查看所有容器
  • docker stats 查看容器資源使用情況
  • docker ps 查看運行的容器
  • docker rename 重命名容器
1
2
3
4
* docker start nginx 啟動容器  
* docker stop nginx 暫停容器
* docker start $(sudo docker ps -a -q) 啟動所有容器
* docker stop $(sudo docker ps -a -q) 暫停所有容器
  • docker pause 暫停所有容器
  • docker unpause
  • docker restart 重啟容器
  • docker ps 顯示了啟動了哪些的 Docker Container

-a 列出所有容器
-l 列出最後一次執行容器

  • docker exec -it nginx bash 進入容器
  • docker container stop 會優雅停止 (gracefully stop) 容器,若要強制關閉 (force shutdown) 容器,可用 docker container kill
  • docker rm <277e632692e2>: Error response from daemon: conflict: unable to delete 7bc4c38be46a (must be forced) - image is being used by stopped container 277e632692e2 時使用
  • docker rm nginx 刪除容器
  • docker rm -f nginx 強制刪除容器

Docker logs

  • docker logs -t my_container 查看帶時間戳的日誌
  • docker logs –since 2024-06-25T15:00:00 my_container 查看從特定時間點後的日誌

Docker Volume

  1. 持久化數據
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 創建Volume
docker volume create vol1
<docker volume rm vol1>
# 啟動第一個Ubuntu容器並掛載vol1
docker run -it --name ubuntu1 -v vol1:/data ubuntu

# 在 ubuntu1 容器中創建一些數據
echo "This is some persistent data" > /data/sample.txt
# 確認數據已經寫入
cat /data/sample.txt
# 退出 ubuntu1 容器
exit

# 重啟 ubuntu1 容器
docker restart ubuntu1
# 重新進入 ubuntu1 容器
docker exec -it ubuntu1 bash
# 確認數據依舊存在
cat /data/sample.txt
# 退出 ubuntu1 容器
exit
  1. 不同機器間傳遞數據
1
2
3
4
5
6
7
8
# 使用 ubuntu2 容器範例掛載 vol1
docker run -it --rm --name temp-ubuntu -v vol1:/data-share ubuntu
# 確認數據是否存在
ls /data-share
# 你應該會看到 'sample.txt' 文件
cat /data-share/sample.txt
# 退出臨時容器
exit

Docker Network

  • docker network ls
  • docker network create my_network
  • docker network connect my_network my_container

Docker Compose

  • version 指定檔案的版本
  • services 定義應用程式的服務
  • image 指定要使用的 Docker 映像
  • container_name 指定容器的名稱
  • ports 指定容器要公開的埠
  • volumes 指定要掛載到容器的卷
  • environment 指定要設定的環境變數
  • depends_on 指定此服務在啟動前需依賴的服務
  • networks 指定此服務要加入的網路
  • restart 指定容器的重啟策略
  • healthcheck 指定容器的健康檢查
  • logging 指定容器的日誌記錄
  • build 指定如何建立容器映像
  • command 指定容器啟動時要執行的命令
  • working_dir 指定容器的工作目錄
  • user 指定容器的使用者
  • labels 指定容器的標籤
  • volumes 定義應用程式要使用的卷
  • build 指定如何建立容器映像
  • context 指定建立映像的 Dockerfile 檔案所在的目錄
  • dockerfile 指定要使用的 Dockerfile 檔案的名稱
  • args 指定傳遞給 Dockerfile 檔案的引數
  • build-args 指定傳遞給 docker build 命令的引數
  • shm-size 指定共享記憶體的大小
  • timeout 指定建立映像的超時時間

Play Ground

K8S


如果你覺得這篇文章很棒,請你不吝點讚 (゚∀゚)

Welcome to my other publishing channels