Ubuntu一键安装/卸载docker和docker compose,可指定版本或安装最新版本。
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
@
个人博客: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,也可以一键卸载,使用脚本省心又快捷。
Ubuntu一键安装/卸载docker和docker compose,可指定版本或安装最新版本。的更多相关文章
- tomcat 8.0安装ssl证书,及centos7.2 的openssl升级到最新版本,及ERR_SSL_OBSOLETE_CIPHER错误解决
openssl官网https://www.openssl.org/source/下载最新的文件 2017-Feb-16 12:03:39 openssl-1.1.0e.tar.gz 安装的时候,可能由 ...
- linux centos7 非root用户安装源码版docker
注意:非root用户必须要有sudo权限 一.安装前的准备 1.查看当前主机是否有docker组 若没有输出结果则新建 再次查看,发现已经有了docker组 2.新增拥有sudo权限的用户(若知道ro ...
- 15个Linux Yum命令实例--安装/卸载/更新
在linux环境中, 安装, 卸载更新包是一个极为常见的操作.大部分的linux环境都提供了包的管理工具, 例如:apt-get, dpkg, rpm, yum等等. 一些Linux环境中,yum是默 ...
- Linux打包压缩与安装卸载
一.打包压缩 (1)tar:打包拆包命令 tar -cxzjvf 打包后的文件 欲打包的目录 -c:打包文件夹 -x:拆开文件夹 -z:以gzip格式压缩,默认压缩倍数为6倍 -j:以bzi ...
- linux安装&卸载IB网卡(mellanox)驱动
由于工作上的需求,需要在redhat6.5服务器上面安装mellanox品牌的IB网卡,故整理了一个安装&卸载IB网卡驱动的教程: 一.安装 1)下载相应操作系统驱动 http://www.m ...
- ansible的playbook进行yum批量安装nginx最新版本
环境:centos7 版本:nginx最新版本 软件: ansible 作用: 进行批量执行不同机器上,进行安装nginx版本 检查脚本是否正确: [root@ansible-test ansible ...
- 关于Keras 版本的安装与修改
神经协同过滤(Neural Collaborative Filtering)神作的源码的实验设置要求是: 然而,我们使用控制台 (命令:)或者是PyCharm直接安装的版本均是 最新版本(即 2.0版 ...
- docker和docker compose安装使用、入门进阶案例
一.前言 现在可谓是容器化的时代,云原生的袭来,导致go的崛起,作为一名java开发,现在慌得一批.作为知识储备,小编也是一直学关于docker的东西,还有一些持续继承jenkins. 提到docke ...
- Docker----起步(2)----在Ubuntu上安装最新版的Docker CE
之前写了一篇文章关于Docker安装的博客,最近再次使用的时候,在docker的官方文档上发现最新版本的Docker(V18.03)的安装方式和之前有点区别,有一些命令发现不能用了.(真的是一天不学习 ...
- Docker(1)在CentOS上的安装与卸载
一. Docker的安装 CentOS7 上安装: 1. 卸载旧版本 $ sudo yum remove docker \ docker-client \ docker-client-latest ...
随机推荐
- 通过结巴分词 sklearn判断语句和例句集合最相近的句子
` import jieba from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pair ...
- 【Android逆向】破解看雪9月算法破解第二题
1. apk安装到手机,一样的界面,随便输入一样的报错 2. apk拖入到jadx重看看 public native String sha1(String str); static { System. ...
- flex布局-20201028
改版自阮一峰的网络日志-Flex 布局教程:语法篇 在flex容器上设置的(即父元素上设置); flex-direction属性决定主轴的方向(即项目的排列方向). flex-direction: r ...
- python部署项目为什么要用Nginx和uWSGI
一.测试运行python项目 1.1 Flask项目 说明1:当我们直接用编译器运行Flask项目的时候,会有一个提示:意思就是:这是开发环境的服务器,不能用于生产环境的部署,请使用WSGI的服务器替 ...
- DataGear 制作支持全国、省、市三级数据钻取效果的地图数据可视化看板
通过DataGear的参数化数据集.图表联动和看板API功能,可以很方便地制作支持数据钻取效果的数据可视化看板. 首先,以上级地区名为参数,新建一个参数化SQL数据集: SELECT COL_NAME ...
- Frechet Inception Distance
(以下内容重新更新,主要讲解FID的意义,为何FID能够表示生成图像的多样性和质量,为什么FID越小,则图像多样性越好,质量也越好) 在计算FID中我们也同样使用inception network网络 ...
- Java main()方法的使用说明
1 package com.bytezreo.singleton; 2 3 /** 4 * 5 * @Description main()方法的使用说明 6 * @author Bytezero·zh ...
- 从华为WeAutomate数字机器人论坛,看政企领域的“政务新智理”
从华为WeAutomate数字机器人论坛,看政企领域的"政务新智理" 从政务治理到"政务新智理",华为WeAutomate在政务领域的思考与实践 华为WeAut ...
- ansible 自动化运维(1)
ansible 简介 ansible 是什么? ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量 ...
- easy-window && aardio 桌面软件开发
https://github.com/lixk/easy-window https://gitee.com/zha2/easy-window https://www.aardio.com/ 桌面软件开 ...