docker,docker-compose安装部署
一 基本介绍
1.1 虚拟机问题
虚拟机是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在Windows系统里面运行Linux系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。
虽然用户可以通过虚拟机还原软件的原始环境。但是,这个方案有几个缺点。
(1)资源占用多
虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序,真正使用的内存只有 1MB,虚拟机依然需要几百 MB 的内存才能运行。
(2)冗余步骤多
虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。
(3)启动慢
启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。
1.2 什么是应用容器
我们可以把它看成虚拟机,能在一台服务器上隔离出若干个互不干扰的环境。把自己的应用放入容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。它具有启动快、资源占用少、体积小、易操作等等。相比虚拟机有很多优势。
为什么要使用应用容器
因为软件更新发布及部署低效,过程繁琐且需要人工介入。环境一致性难以保证,不同环境之间迁移成本太高。有了应用容器部署可以很大程度解决上面的问题。
Docker 应用容器部署
Docker是一个开源的应用容器引擎,目前有三大类。
(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
(2)提供弹性的云服务。因为Docker容器可以随开随关,很适合动态扩容和缩容。
(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架
初始化
- 查看服务器版本:
cat /etc/os-release
- 关闭防火墙(可选,云服务器不需要):
systemctl disable --now firewalld
- 查看当前系统内核版本:
uname -sr
- 关闭 SELinux:
getenforce # 查看 SELinux 是否开启
cat /etc/selinux/config # 查看 SELinux 是否开启
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭 SELinux ,需要重启
setenforce 0 # 关闭当前会话的 SELinux ,重启之后无效
cat /etc/selinux/config # 查看 SELinux 是否开启
- 关闭 swap 分区:
free -h # 查看 swap 分区是否存在
swapoff -a # 关闭当前会话的 swap ,重启之后无效
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久关闭 swap ,需要重启
free -h # 查看 swap 分区是否存在
二 应用部署
2.1 yum 安装docker
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
2.2 rpm安装docker
2.2.1 有网环境可以直接wget获取
wget -O /data/containerd.io-1.6.9-3.1.el7.x86_64.rpm https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.6.9-3.1.el7.x86_64.rpm
wget -O /data/docker-ce-26.1.4-1.el7.x86_64.rpm https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-26.1.4-1.el7.x86_64.rpm
wget -O /data/docker-ce-cli-26.1.4-1.el7.x86_64.rpm https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-26.1.4-1.el7.x86_64.rpm
2.2.2 离线获取地址rpm
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
https://download.docker.com/linux/rhel/9/x86_64/stable/Packages/
2.2.3 安装docker
[root@localhost ~]# rpm -ivh --nodeps --force ./*.rpm
警告:./containerd.io-1.6.9-3.1.el7.x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID 621e9f35: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:docker-ce-cli-1:26.1.4-1.el7 ################################# [ 33%]
2:docker-ce-3:26.1.4-1.el7 ################################# [ 67%]
3:containerd.io-1.6.9-3.1.el7 ################################# [100%]
2.2.4 启动docker
# 启动并设置开机自启动
systemctl enable --now docker
# 查看状态
systemctl status docker
# 查看版本信息
docker version
2.3 软件包部署Docker(离线)
2.3.1 离线包下载地址:
https://download.docker.com/linux/static/stable/
2.3.2 安装docker
## 解压上传的压缩包
tar -xvf docker-27.3.1.tgz
## 将解压后目录中文件移动到/usr/bin/下
cp docker/* /usr/bin/
2.3.3 将docker做成服务
cat > /usr/lib/systemd/system/docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF
2.3.4 启动和验证docker
# 重载服务
systemctl daemon-reload
# 启动docker并设置开机自启动
systemctl enable --now docker
# 查看docker状态
systemctl status docker
# 查看docker的版本信息
docker version
2.1 配置加速
默认拉取镜像是从这里拉取(https://hub.docker.com),国外地址拉取的速度比较慢。我们也可以配置国内镜像源。
阿里云镜像加速器
访问地址:https://help.aliyun.com/document_detail/60750.html,进入容器镜像服务控制台创建加速器。
2.2 配置镜像加速器
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
mkdir -pv /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"exec-opts": [
"native.cgroupdriver=systemd" // 使用 systemd 作为 cgroup 驱动
],
"registry-mirrors": [ // 指定 Docker 镜像加速器
"https://docker.1ms.run",
"https://docker.m.daocloud.io",
"https://docker.1panel.top"
],
"live-restore": true, // 启用 Live Restore 功能,允许容器在守护进程重启时保持运行
"log-driver": "json-file", // 使用 JSON 文件作为日志驱动
"log-opts": { // 日志选项配置
"max-size": "500m", // 每个日志文件的最大大小为 500MB
"max-file": "3" // 最多保留 3 个日志文件,旧的日志文件会被删除
},
"max-concurrent-downloads": 10, // 设置同时最大下载的镜像数为 10
"max-concurrent-uploads": 5 // 设置同时最大上传的镜像数为 5
}
EOF
systemctl daemon-reload \
&& systemctl restart docker
格式化检查
cat /etc/docker/daemon.json | jq .
2.3 查看docker版本号
docker --version
2.4 docker卸载,看需要
systemctl disable --now docker docker.socket
dnf -y remove docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin \
docker-ce-rootless-extras
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
docker升级
卸载旧的
sudo yum remove docker docker-common docker-snapshot docker-io
2.5 安装docker-compose
官方文档:https://docs.docker.com/compose/install/
curl -L https://github.com/docker/compose/releases/download/v2.30.2/docker-compose-linux-x86_64 > /usr/local/bin/docker-compose
2.6 docker-compose加速下载
因为Docker Compose存放在GitHub,可能不太稳定。可以通过DaoCloud和idm来解析加速下载
curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
2.7 将可执行权限应用于该二进制文件
sudo chmod +x /usr/local/bin/docker-compose
2.8 查看docker-compose版本号
docker-compose --version
如果出现无法显示版本的问题
ll /usr/local/bin/docker-compose
-rwxr-xr-x 1 root root 64044282 Nov 20 09:35 /usr/local/bin/docker-compose
docker-compose -v
-bash: docker-compose: command not found
/usr/local/bin/docker-compose --version
Docker Compose version v2.30.2
## 先检查本地环境
echo $PATH
/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/root/bin
## 没有包含这个地址,所以不生效 执行一下命令加入
echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc
source ~/.bashrc
docker-compose --version
Docker Compose version v2.30.2
三 最后的tab补全docker docker:tag
3.1 安装 bash-completion
yum install -y bash-completion
安装完成之后重启系统或者重新登录 shell。如果安装成功。键入 docker p 后,再 Tab 键,系统显示如下:
pause plugin port ps pull push
此时,我们运行例如 docker run 之类的命令,键入镜像的首字母,镜像名称依然无法自动补全。
3.2 根据 Docker 官方文档进一步配置
sudo curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
source /etc/bash_completion.d/docker-compose
至此,所有补全功能相关的准备工作完成!执行 docker run 类似的命令时,镜像名称及 tag 均能自动补全了。
评论区