提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文檔 @目錄前言一、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,也可以一鍵卸載,使用腳本省心又快捷。