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
  • 前言 插件化的需求主要源於對軟體架構靈活性的追求,特別是在開發大型、複雜或需要不斷更新的軟體系統時,插件化可以提高軟體系統的可擴展性、可定製性、隔離性、安全性、可維護性、模塊化、易於升級和更新以及支持第三方開發等方面的能力,從而滿足不斷變化的業務需求和技術挑戰。 一、插件化探索 在WPF中我們想要開 ...
  • 歡迎ReaLTaiizor是一個用戶友好的、以設計為中心的.NET WinForms項目控制項庫,包含廣泛的組件。您可以使用不同的主題選項對項目進行個性化設置,並自定義用戶控制項,以使您的應用程式更加專業。 項目地址:https://github.com/Taiizor/ReaLTaiizor 步驟1: ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • Channel 是乾什麼的 The System.Threading.Channels namespace provides a set of synchronization data structures for passing data between producers and consume ...
  • efcore如何優雅的實現按年分庫按月分表 介紹 本文ShardinfCore版本 本期主角: ShardingCore 一款ef-core下高性能、輕量級針對分表分庫讀寫分離的解決方案,具有零依賴、零學習成本、零業務代碼入侵適配 距離上次發文.net相關的已經有很久了,期間一直在從事java相關的 ...
  • 前言 Spacesniffer 是一個免費的文件掃描工具,通過使用樹狀圖可視化佈局,可以立即瞭解大文件夾的位置,幫助用戶處理找到這些文件夾 當前系統C盤空間 清理後系統C盤空間 下載 Spacesniffer 下載地址:https://spacesniffer.en.softonic.com/dow ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • 一、ReZero簡介 ReZero是一款.NET中間件 : 全網唯一開源界面操作就能生成API , 可以集成到任何.NET6+ API項目,無破壞性,也可讓非.NET用戶使用exe文件 免費開源:MIT最寬鬆協議 , 一直從事開源事業十年,一直堅持開源 1.1 純ReZero開發 適合.Net Co ...
  • 一:背景 1. 講故事 停了一個月沒有更新文章了,主要是忙於寫 C#內功修煉系列的PPT,現在基本上接近尾聲,可以回頭繼續更新這段時間分析dump的一些事故報告,有朋友微信上找到我,說他們的系統出現了大量的http超時,程式不響應處理了,讓我幫忙看下怎麼回事,dump也抓到了。 二:WinDbg分析 ...
  • 開始做項目管理了(本人3年java,來到這邊之後真沒想到...),天天開會溝通整理需求,他們講話的時候忙裡偷閑整理一下常用的方法,其實語言還是有共通性的,基本上看到方法名就大概能猜出來用法。出去打水的時候看到外面太陽好好,真想在外面坐著曬太陽,回來的時候好兄弟三年前送給我的鍵盤D鍵不靈了,在打"等待 ...