Alibaba Cloud Linux 4 安装docker 并运用docker【持续更新........】

# 移除错误的仓库配置
sudo rm -f /etc/yum.repos.d/docker-ce*.repo

# 为 Alibaba Cloud Linux 4 添加正确的仓库
# 使用 el8 而不是 el7,因为 Alibaba Cloud Linux 4 对应 RHEL 8
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 修正仓库配置中的版本号
sudo sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo

# 清理并刷新缓存
sudo yum clean all
sudo yum makecache

# 现在安装 Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io

image

这样说明完成了。

使用命令重启docker:

sudo systemctl restart docker

systemctl status 这个命令是查看系统运行正常否,进入了分页显示模式。按 q 键就可以退出并返回命令行。

# 查看 Docker 服务是否正常运行
sudo systemctl status docker --no-pager

image

 

配置远程访问:

使用 TLS 认证(安全推荐)

生成 TLS 证书

# 创建证书目录
sudo mkdir -p /etc/docker/ssl
cd /etc/docker/ssl

#1-1 生成 CA 私钥和证书
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

生成CA私钥和证书,需要添加密码。4~1024位的

image

#1-2 生成服务器私钥
openssl genrsa -out server-key.pem 4096

# 1-3生成服务器证书签名请求 (CSR)
openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr

#1-4 创建证书扩展配置文件
echo subjectAltName = DNS:$HOST,IP:0.0.0.0,IP:127.0.0.1,IP:your-server-ip >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf

# 1-5生成服务器证书
cd /etc/docker/ssl && openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf

替换 $HOST:将 $HOST 替换为您的服务器 IP 地址或域名
your-server-ip:服务器的IP

注意:这个地方是第一个服务器的docker的SSL证书,是为生成portainer而定制,当生成好后,可以用portainer时,必须要用文件来处理这些。
对于生产环境,建议使用脚本管理:
1、创建 generate-cert.sh 脚本
2、将域名列表放在脚本开头的数组变量中
3、需要添加域名时,只需修改数组内容
4、运行脚本重新生成证书

生成客户端私钥时,需要提供CA填写的密码!

以上1-5可以COPY成一条。

sudo mkdir -p /etc/docker/ssl
cd /etc/docker/ssl

openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
cd /etc/docker/ssl
echo subjectAltName = DNS:$HOST,IP:0.0.0.0,IP:127.0.0.1,IP:your-server-ip >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf

cd /etc/docker/ssl && openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf

//------------------------------------------

#清理临时文件

rm -v client.csr server.csr extfile.cnf extfile-client.cnf

#设置证书权限
sudo chmod 600 /etc/docker/ssl/*.pem
sudo chmod 644 /etc/docker/ssl/*.pem 2>/dev/null || true
sudo chown root:root /etc/docker/ssl/*.pem

证书文件的路径或权限问题。,路径检查

ls -l

image

# 检查所有证书文件
sudo ls -la /etc/docker/ssl/

# 应该有以下文件:
# ca.pem          # CA 证书
# ca-key.pem      # CA 私钥
# server-cert.pem # 服务器证书
# server-key.pem  # 服务器私钥
# cert.pem        # 客户端证书
# key.pem         # 客户端私钥
如果以上的任何一类缺少,都不能https访问

image

# 检查证书文件是否有效
sudo openssl x509 -in /etc/docker/ssl/ca.pem -text -noout
sudo openssl x509 -in /etc/docker/ssl/server-cert.pem -text -noout
sudo openssl rsa -in /etc/docker/ssl/server-key.pem -check -noout

image

image

 

3、#生成pem密钥文件后,执行
#在 /etc/docker/daemon.json 中配置:

sudo mkdir -p /etc/docker
sudo cat > /etc/docker/daemon.json << EOF
{  
  "tls": true,
  "tlscacert": "/etc/docker/ssl/ca.pem",
  "tlscert": "/etc/docker/ssl/server-cert.pem", 
  "tlskey": "/etc/docker/ssl/server-key.pem",
  "tlsverify": true
}
EOF

# 使用 systemd 来配置 hosts 参数,避免冲突
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/override.conf > /dev/null << 'EOF'
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376
EOF
#验证文件是否创建成功
sudo ls -la /etc/docker/daemon.json
sudo cat /etc/docker/daemon.json

这个地方3只能分两步来操作,否则会docker启动不了。

如果同时开放则这样写

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/override.conf > /dev/null << 'EOF'
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 -H tcp://0.0.0.0:2376
EOF

 

如果创建成功,则要重启docker

#重启#查看是否重启成功
sudo systemctl daemon-reload
sudo systemctl start docker

-------三个命令不能同时处理,先重启,然后查看
sudo systemctl status docker --no-pager

image

 

 

 

# 测试本地 socket 连接(传统方式)
docker ps

# 测试本地 TCP 连接
docker -H tcp://localhost:2375 ps

# 测试使用环境变量
export DOCKER_HOST=tcp://localhost:2375
docker ps
unset DOCKER_HOST

 

 

# 检查防火墙是否开放了 2375 端口
sudo firewall-cmd --list-ports | grep 2375
sudo firewall-cmd --list-all | grep 2375

 

然后开始部署Portainer 

部署 Portainer(推荐)

# 根据地域使用对应的加速器地址

# 通用地址:https://<你的账号代码>.mirror.aliyuncs.com

获取阿里云专属镜像加速器地址的正确方法

方法一:通过阿里云控制台获取(推荐)

  1. 登录阿里云控制台 → 容器镜像服务 → 镜像工具 → 镜像加速器

  2. 页面会显示你的专属加速器地址,格式如:https://abc1234.mirror.aliyuncs.com

再配置

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://dhog5ljb.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

这个是配置镜像加速器。然后再测试这个镜像服务。

curl -I --connect-timeout 10 http://mirrors.aliyun.com/
curl -I --connect-timeout 10 https://dhog5ljb.mirror.aliyuncs.com

 

 

======================================================================================================================================

# 设置正确的权限
sudo chmod 600 /etc/docker/ssl/*.pem
sudo chmod 644 /etc/docker/ssl/ca.pem
sudo chmod 644 /etc/docker/ssl/server-cert.pem
sudo chmod 644 /etc/docker/ssl/cert.pem
# 检查文件所有权
sudo chown root:root /etc/docker/ssl/*.pem

检查完文件的权限后,验证证书的有效性

# 检查证书文件是否有效
sudo openssl x509 -in /etc/docker/ssl/ca.pem -text -noout
sudo openssl x509 -in /etc/docker/ssl/server-cert.pem -text -noout
sudo openssl rsa -in /etc/docker/ssl/server-key.pem -check -noout

image

image

验证为OK后,当前配置可能有冲突,让我们使用更安全的配置方式

修改 daemon.json 配置

# 停止 Docker
sudo systemctl stop docker

# 创建修正后的配置
sudo tee /etc/docker/daemon.json > /dev/null << 'EOF'
{
  "tls": true,
  "tlscacert": "/etc/docker/ssl/ca.pem",
  "tlscert": "/etc/docker/ssl/server-cert.pem", 
  "tlskey": "/etc/docker/ssl/server-key.pem",
  "tlsverify": true
}
EOF

# 使用 systemd 来配置 hosts 参数,避免冲突
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/override.conf > /dev/null << 'EOF'
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376
EOF

这个地方注意:

 [Service] ExecStart= ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376 EOF

SB的编辑器,不允许修改这个地方的内容。所以COPY这个命令时,这个地方要修改为2375

 

# 重新加载并启动
sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl status docker --no-pager

image

然后开始部署Portainer 

部署 Portainer(推荐)

# 根据地域使用对应的加速器地址
# 通用地址:https://<你的账号代码>.mirror.aliyuncs.com

首先要测试DNS有没有安装成功,

 获取阿里云专属镜像加速器地址的正确方法

方法一:通过阿里云控制台获取(推荐)

  1. 登录阿里云控制台 → 容器镜像服务 → 镜像工具 → 镜像加速器

  2. 页面会显示你的专属加速器地址,格式如:https://abc1234.mirror.aliyuncs.com

再配置

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://dhog5ljb.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

这个是配置镜像加速器。然后再测试这个镜像服务。

# 测试阿里云镜像服务

curl -I --connect-timeout 10 http://mirrors.aliyun.com/
curl -I --connect-timeout 10 https://dhog5ljb.mirror.aliyuncs.com

测试基本网络连通,image

返回200,说明连通没问题。

接下来安装prontainer-data

# 使用标准方式安装 Portainer
echo "=== 安装 Portainer ==="

# 创建数据卷
docker volume create portainer_data

# 拉取并运行 Portainer
docker pull portainer/portainer-ce:latest
docker run -d \
  --name portainer \
  -p 8000:8000 \
  -p 9000:9000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  --restart unless-stopped \
  portainer/portainer-ce:latest

# 检查状态
sleep 5
docker ps | grep portainer && echo "✓ Portainer 启动成功" || echo "✗ Portainer 启动失败"

image

Portainer 启动成功后,你可以开始使用这个强大的 Docker 管理工具了

# 获取 ECS 公网 IP
PUBLIC_IP=$(curl -s http://checkip.amazonaws.com)
echo "访问地址: http://$PUBLIC_IP:9000"

image

然后在安全组中,打开9000,8000端口。云服务器ECS-》安全组-》9000,8000打开

然后web访问

image

 

# 使用环境变量强制设置中文(最可靠的方法)
docker stop portainer
docker rm portainer

# 重新安装并强制中文
docker run -d \
  --name portainer \
  -p 9000:9000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  -e PORTAINER_UI_LANGUAGE=zh-cn \
  --restart unless-stopped \
  portainer/portainer-ce:latest

echo "重新安装完成,现在应该是中文界面了"
echo "访问: http://你的ECSIP:9000"

也可以直接找github来升级,升级命令如下:

#!/bin/bash
echo "=== 通过 GitHub Release 升级 Portainer 2.11 → 2.33.2 ==="

# 颜色定义
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'

echo -e "${YELLOW}1. 创建备份...${NC}"
docker stop portainer 2>/dev/null
BACKUP_FILE="portainer_backup_$(date +%Y%m%d_%H%M%S).tar.gz"
docker run --rm -v portainer_data:/source -v $(pwd):/backup alpine \
    tar czf /backup/$BACKUP_FILE -C /source ./
echo -e "${GREEN}✅ 备份完成: $BACKUP_FILE${NC}"

echo -e "${YELLOW}2. 下载 GitHub Release 2.33.2...${NC}"
cd /tmp
rm -rf portainer-2.33.2* portainer/

# 方法1: 直接下载二进制文件
if wget https://github.com/portainer/portainer/releases/download/2.33.2/portainer-2.33.2-linux-amd64.tar.gz; then
    echo -e "${GREEN}✅ 下载成功${NC}"
    tar xzf portainer-2.33.2-linux-amd64.tar.gz
    cd portainer
else
    echo -e "${RED}❌ 直接下载失败,尝试备用方案...${NC}"
    # 备用方案:使用 Docker 镜像
    docker pull portainer/portainer-ce:2.33.2
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}✅ 使用 Docker 镜像成功${NC}"
        docker run -d --name portainer -p 9000:9000 -p 9443:9443 \
            -v /var/run/docker.sock:/var/run/docker.sock \
            -v portainer_data:/data --restart unless-stopped \
            portainer/portainer-ce:2.33.2
        echo -e "${GREEN}🎉 升级完成!访问: http://你的ECSIP:9000${NC}"
        exit 0
    else
        echo -e "${RED}❌ 所有下载方式都失败${NC}"
        exit 1
    fi
fi

echo -e "${YELLOW}3. 验证下载的文件...${NC}"
if [ -f "portainer" ]; then
    echo -e "${GREEN}✅ 找到 portainer 二进制文件${NC}"
    chmod +x portainer
    ./portainer --version || echo "无法获取版本信息"
else
    echo -e "${RED}❌ 未找到 portainer 二进制文件${NC}"
    ls -la
    exit 1
fi

echo -e "${YELLOW}4. 创建自定义 Docker 镜像...${NC}"
cat > Dockerfile << 'EOF'
FROM alpine:latest
RUN apk add --no-cache ca-certificates
COPY portainer /portainer
VOLUME /data
EXPOSE 9000 9443
ENTRYPOINT ["/portainer"]
CMD ["--data", "/data", "--no-auth"]
EOF

docker build -t portainer-custom:2.33.2 .

echo -e "${YELLOW}5. 启动新版本...${NC}"
docker stop portainer 2>/dev/null
docker rm portainer 2>/dev/null

docker run -d \
    --name portainer \
    -p 9000:9000 \
    -p 9443:9443 \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v portainer_data:/data \
    --restart unless-stopped \
    portainer-custom:2.33.2

echo -e "${YELLOW}6. 等待启动...${NC}"
sleep 20

echo -e "${YELLOW}7. 验证升级...${NC}"
if docker ps | grep -q portainer; then
    echo -e "${GREEN}✅ Portainer 2.33.2 启动成功${NC}"
    echo -e "${GREEN}📍 访问地址: http://你的ECSIP:9000${NC}"
    echo -e "${GREEN}🔐 HTTPS地址: https://你的ECSIP:9443${NC}"
    
    # 检查日志
    docker logs portainer --tail 5
else
    echo -e "${RED}❌ 启动失败${NC}"
    docker logs portainer
fi

echo -e "${GREEN}=== 升级完成 ===${NC}"

 

posted on 2025-10-15 21:16  侗家小蚁哥  阅读(17)  评论(0)    收藏  举报