Ubuntu一鍵安裝/卸載docker和docker compose,可指定版本或安裝最新版本。

来源:https://www.cnblogs.com/FaceMan/p/17978460
-Advertisement-
Play Games

提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文檔 @目錄前言一、docker是什麼?二、docker compose是什麼?三、安裝步驟1.Ubuntu安裝腳本2.生成腳本3.啟動和驗證四、卸載步驟1.Ubuntu卸載腳本2.保存文件後設置執行許可權3.運行文件4.驗證是否刪除成功Ce ...


提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文檔

@

目錄


個人博客:FaceMan' Blog
Github:FaceMan' GitHub

前言

在新建的伺服器上,我們一般會用幾條命令來下載安裝docker和docker-compose,這裡為了避免每次都去搜索安裝命令,所以寫成腳本,本文僅支持Ubuntu\CentOS。


一、docker是什麼?

Docker是一個開源的容器化平臺,用於構建、部署和管理應用程式。它採用了輕量級的容器技術,可以在不同的操作系統上運行,並提供了一種將應用程式及其依賴項打包到可移植的容器中的方式。

以下是Docker的一些重要特點和概念:

  • 容器化:Docker利用Linux內核的容器功能來隔離應用程式及其依賴項。每個容器都是一個獨立的運行環境,具有自己的文件系統、進程空間和資源限制。容器可以快速啟動、停止和遷移,而且相互之間彼此隔離,避免了應用程式之間的衝突和依賴問題。

  • 鏡像:Docker使用鏡像來構建容器。鏡像是一個只讀的模板,包含了應用程式運行所需的所有文件系統、庫和依賴項。通過使用Dockerfile定義構建步驟,可以創建自定義的鏡像。鏡像可以從Docker Hub等鏡像倉庫中獲取,也可以通過構建自己的鏡像進行定製。

  • 容器註冊表:Docker Hub是Docker官方的公共鏡像註冊表,提供了大量的基礎鏡像供用戶使用。除此之外,還有其他的公共和私有鏡像註冊表,用戶可以在其中存儲和分享自己的鏡像。

  • Docker引擎:Docker引擎是運行和管理容器的核心組件。它包括一個守護進程(Docker daemon)和一個命令行客戶端(Docker CLI)。守護進程負責構建、運行和管理容器,而命令行客戶端提供了互動式的介面來與守護進程進行通信。

  • 編排和管理工具:Docker提供了一系列的編排和管理工具,用於簡化多個容器的部署和管理。例如,Docker Compose允許通過一個YAML文件描述多個容器的關係和配置,並通過一條命令啟動、停止和擴展整個應用程式的容器集群。

  • 跨平臺支持:Docker可以在不同的操作系統上運行,包括Linux、Windows和MacOS等。對於Linux平臺,Docker直接使用操作系統的容器功能;而對於Windows和MacOS,Docker使用一個輕量級的虛擬機(稱為Docker Desktop)來提供容器化環境。

  • 生態系統:Docker擁有龐大的開發者社區和豐富的生態系統。社區提供了大量的文檔、教程和示例代碼,以及交流和支持的平臺。此外,還有許多第三方工具和服務,如監控工具、CI/CD集成等,與Docker集成,進一步擴展了其功能和用途。

總結起來,Docker是一個強大的容器化平臺,通過將應用程式及其依賴項打包到獨立的容器中,提供了更加靈活、可移植和可擴展的應用部署和管理方式。它已經成為現代軟體開發和運維的重要工具之一。

二、docker compose是什麼?

Docker Compose是一個用於定義和管理多個Docker容器的工具。它允許您使用簡單的YAML文件描述應用程式中的服務、網路、存儲捲等配置,並通過一個命令行界面來啟動、停止和管理這些容器。

以下是Docker Compose的一些重要特點:

  • 聲明式語法:Docker Compose使用聲明式的YAML文件來描述應用程式的架構和配置。您可以在文件中定義每個服務的鏡像、埠映射、環境變數、依賴關係等。這種聲明式語法使得定義和管理複雜的容器集群變得簡單且可維護。

  • 多容器應用管理:Docker Compose專註於管理多個相關的容器,以構建完整的應用程式堆棧。通過一次性的命令,您可以啟動、停止、重啟和銷毀整個容器集群,而不需要手動處理每個容器。

  • 容器間連接和通信:使用Docker Compose,您可以輕鬆地為容器之間創建連接和網路。您可以定義容器之間的連接方式,使它們能夠相互通信和訪問。這在構建微服務架構或多層應用程式時非常有用。

  • 可伸縮性和負載均衡:Docker Compose允許您設置容器的伸縮策略,以根據應用程式的需要自動擴展或收縮容器。它還支持與負載均衡器集成,可以將流量分發到多個實例上,提高應用程式的性能和可靠性。

  • 環境隔離和測試:使用Docker Compose,您可以輕鬆地在開發和測試環境中複製生產環境的配置。您可以創建一個本地的容器化開發環境,確保應用程式在不同環境下的一致性,並減少由於環境差異引起的問題。

  • 可插拔的架構:Docker Compose是可插拔的,可以與其他工具和服務集成,以滿足特定需求。例如,您可以與監控和日誌記錄工具集成,以監視和管理容器的性能和狀態。

Compose V1語法: Compose V1語法是較早版本的Compose語法,其文件名通常為docker-compose.yml。以下是一些Compose V1語法的特點:

  • services:使用services關鍵字定義要運行的服務。每個服務都有一個名稱和一組配置選項。

  • image:指定要使用的鏡像名稱。

  • ports:定義要映射到主機上的容器埠。

  • volumes:指定要掛載到容器中的捲。

  • links:定義與其他服務之間的連接。

  • environment:設置容器中的環境變數。

  • depends_on:定義服務之間的依賴關係。

以下是一個Compose V1語法的示例:

version: '2'

services:
  web:
    image: nginx:latest
    ports:
      - 8080:80
    volumes:
      - ./html:/usr/share/nginx/html

  db:
    image: mysql:latest
    environment:
      - MYSQL_ROOT_PASSWORD=secret

Compose V2語法: Compose V2語法是較新版本的Compose語法,其文件名通常為docker-compose.yaml或docker-compose.yml。以下是一些Compose V2語法的特點:

services:與Compose V1相同,使用services關鍵字定義要運行的服務。
image、ports、volumes、environment等選項與Compose V1相同。
引入了新的配置選項,如networks、configs和secrets,用於更靈活地定義網路、配置文件和機密信息。
以下是一個Compose V2語法的示例:

version: '3'

services:
  web:
    image: nginx:latest
    ports:
      - 8080:80
    volumes:
      - ./html:/usr/share/nginx/html

  db:
    image: mysql:latest
    environment:
      - MYSQL_ROOT_PASSWORD=secret

networks:
  app-net:
    driver: bridge

除了以上介紹的不同之外,Compose V2語法還帶來了一些其他改進和功能增強,例如支持多個文件的擴展性,可選項的驗證和預設值等。

需要註意的是,在使用Docker Compose時,要根據您所使用的Compose版本選擇正確的語法,並確保在編寫Compose文件時遵循該版本的語法規範。

三、安裝步驟

1.Ubuntu安裝腳本

代碼如下(示例):

#!/bin/bash
# 卸載當前版本
echo "卸載當前版本....."
sudo apt-get remove docker docker-engine docker.io containerd runc
y
# 設置apt源
echo "設置apt源....."
sudo apt-get update

# 安裝基礎依賴
echo "安裝基礎依賴....."
sudo apt-get install -y \
    ca-certificates \
    curl \
    gnupg

# 啟用docker官方的源
echo "啟用docker官方的源....."
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 添加docker官方的GPG Key
echo "添加docker官方的GPG Key....."
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 更新軟體源
## 更新密鑰許可權,可選 sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "更新軟體源....."
sudo apt-get update

echo "安裝最新版本或特定版本(Y(最新)/N(特定))?"
read answer
if [ "$answer" == "Y" -o "$answer" == "y" ]; then
    echo "安裝最新版本"
    # 安裝最新版本
    sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
elif [ "$answer" == "N" -o "$answer" == "n" ]; then
    echo "查詢版本"
    ## 查詢版本
    apt-cache madison docker-ce | awk '{ print $3 }'

    echo "請指定版本:
    例如5:20.10.23~3-0~ubuntu-bionic、5:20.10.23~3-0~ubuntu-focal、5:20.10.23~3-0~ubuntu-jammy"
    read VERSION_STRING
    # 安裝特定版本

    # ## 安裝特定版本 ubuntu 18.04
    # VERSION_STRING=5:20.10.23~3-0~ubuntu-bionic

    # ## 安裝特定版本 ubuntu 20.04
    # VERSION_STRING=5:20.10.23~3-0~ubuntu-focal

    # ## 安裝特定版本 ubuntu 22.04
    # VERSION_STRING=5:20.10.23~3-0~ubuntu-jammy

    ## 安裝
    sudo apt-get install -y docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-compose-plugin
else
    echo "無效的輸入"
fi

2.生成腳本

將上述命令保存為一個腳本文件(例如script.sh),並添加執行許可權。您可以在終端中使用以下命令來執行該腳本:

chmod +x script.sh
./script.sh

3.啟動和驗證

# 查看docker
docker -v
# 老版本docker compose命令為
docker-compose -v
# 新版本docker compose命令為
docker compose version

# 查看docker服務是否啟動
$ systemctl status docker
# 若未啟動,則啟動docker服務
$ sudo systemctl start docker
# 驗證hello world
$ sudo docker run hello-world

四、卸載步驟

1.Ubuntu卸載腳本

# 卸載舊版本的Docker
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

rm -rf /etc/docker
rm -rf /run/docker
rm -rf /var/lib/dockershim
#刪除docker的鏡像文件
rm -rf /var/lib/docker

ps -ef|grep docker|grep -v grep|xargs kill -s 9

#卸載docker相關包
yum remove docker-*

yum remove docker-ce-cli-*
yum remove docker-scan-plugin*

# 刪除舊版docker-compose
rm -rf /usr/local/bin/docker-compose
rm -rf /usr/bin/docker-compose

2.保存文件後設置執行許可權

chmod +777  docker-uninstall.sh

3.運行文件

sh  docker-uninstall.sh

4.驗證是否刪除成功

docker -v
docker-compose -v

CentOS

安裝腳本

	#!/bin/bash
	# 卸載當前版本
	echo "卸載當前版本....."
	sudo yum remove docker-ce docker-ce-cli containerd.io
	
	# 設置yum源
	echo "設置yum源....."
	sudo yum install -y yum-utils
	sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
	
	# 安裝基礎依賴
	echo "安裝基礎依賴....."
	sudo yum install -y \
	    yum-plugin-copr \
	    device-mapper-persistent-data \
	    lvm2 \
	    git \
	    bash-completion \
	    bash-completion-extras \
	    iptables \
	    policycoreutils-python \
	    selinux-policy-base \
	    selinux-policy-targeted \
	    audit \
	    libseccomp-devel \
	    python3-pip \
	    python3-setuptools \
	    python3-wheel
	
	# 更新軟體源
	echo "更新軟體源....."
	sudo yum update -y
	
	echo "安裝最新版本或特定版本(Y(最新)/N(特定))?"
	read answer
	if [ "$answer" == "Y" -o "$answer" == "y" ]; then
	    echo "安裝最新版本"
	    # 安裝最新版本
	    sudo yum install -y docker-ce docker-ce-cli containerd.io
	elif [ "$answer" == "N" -o "$answer" == "n" ]; then
	    echo "查詢版本"
	    ## 查詢版本
	    yum list docker-ce --showduplicates | grep -i "docker-ce"
	
	    echo "請指定版本:
	    例如3:20.10.11-3.el7、3:20.10.11-3.el8"
	    read VERSION_STRING
	    # 安裝特定版本
	
	    ## 安裝特定版本 centos 7
	    # VERSION_STRING=3:20.10.11-3.el7
	
	    ## 安裝特定版本 centos 8
	    # VERSION_STRING=3:20.10.11-3.el8
	
	    ## 安裝
	    sudo yum install -y docker-ce-$VERSION_STRING docker-ce-cli-$VERSION_STRING containerd.io
	else
	    echo "無效的輸入"
	fi
	# 啟動Docker服務
	echo "啟動Docker服務....."
	sudo systemctl start docker
	
	# 設置Docker開機自啟
	echo "設置Docker開機自啟....."
	sudo systemctl enable docker
	
	# 配置Docker加速器
	echo "配置Docker加速器....."
	echo '{
	  "registry-mirrors": ["https://your_mirror_url"]
	}' | sudo tee /etc/docker/daemon.json
	
	# 重啟Docker服務
	echo "重啟Docker服務....."
	sudo systemctl daemon-reload
	sudo systemctl restart docker
	
	echo "Docker安裝完成"

卸載腳本


#!/bin/bash
# 停止和刪除所有Docker容器
echo "停止和刪除所有Docker容器....."
sudo docker stop $(sudo docker ps -aq)
sudo docker rm $(sudo docker ps -aq)

# 卸載Docker服務
echo "卸載Docker服務....."
sudo yum remove -y docker-ce docker-ce-cli containerd.io

# 刪除Docker相關文件和目錄
echo "刪除Docker相關文件和目錄....."
sudo rm -rf /var/lib/docker
sudo rm -rf /etc/docker

# 刪除Docker用戶組
echo "刪除Docker用戶組....."
sudo groupdel docker

# 刪除Docker存儲庫
echo "刪除Docker存儲庫....."
sudo rm -f /etc/yum.repos.d/docker-ce.repo

echo "Docker已成功卸載"

總結

我們可以通過用戶輸入指令來安裝不同版本的docker和docker compose,也可以一鍵卸載,使用腳本省心又快捷。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Spring AOP 技術實現原理 在Spring框架中,AOP(面向切麵編程)是通過代理模式和反射機制來實現的。本文將詳細介紹Spring AOP的技術實現原理,包括JDK動態代理和CGLIB代理的使用,並通過實例演示其在實際項目中的應用。 1. AOP的實現原理概述 Spring AOP的實現基 ...
  • 本文致力於,讓編程者一步步明白書寫一個JavaWeb項目應該做些什麼,梳理清楚流程框架,需要的jar包,同時手寫了一個分頁工具類也在其中,讓你在編程中更加絲滑。 ...
  • 在 C++11 中,原子變數(std::atomic)提供了一種線程安全的方式來操作共用變數。下麵是一個簡單的例子,演示了C++11原子變數的用法。 #include <iostream> #include <atomic> #include <thread> std::atomic<int> co ...
  • 小北說在前面: 在一線互聯網企業種,如網易、美團、位元組、如阿裡、滴滴、極兔、有贊、希音、百度、美團等大廠,資料庫的面試題,一直是核心和重點的提問點,比如前段時間有位小伙伴面試位元組,就遇到了下麵這道面試題: 索引的設計規範,你知道那些? 小伙伴雖然用過索引,但是索引的設計規範忘記得一干二凈,回答也是朦 ...
  • ELK的架構有多種,本篇分享使用的架構如圖所示: Beats(Filebeat) -> -> Elasticsearch -> Kibana,目前生產環境一天幾千萬的日誌,記憶體占用大概 10G ...
  • 本文向大家介紹了最小二乘法以及公式推導的過程,並使用C#與Python進行實現。重點介紹了C#中是如何實現的,同時介紹了在C#中如何使用OxyPlot繪圖。希望對你有所幫助。 ...
  • 在 .NET 中,字元串是不可變的,這意味著一旦創建,字元串的內容就不能被修改。字元串在記憶體中以不同的方式存儲,具體取決於它是常量字元串還是動態創建的字元串。 常量字元串 常量字元串在編譯時就被解析,併在程式的元數據(Metadata)中存儲。多個相同的字元串常量可能會共用同一塊記憶體。 string ...
  • 字元串用於存儲文本。一個字元串變數包含由雙引號括起的字元集合 示例: // 創建一個string類型的變數並賦予一個值 string greeting = "Hello"; 如果需要,一個字元串變數可以包含多個單詞: 示例: string greeting2 = "Nice to meet you! ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...