本文最后更新于24 天前
需求
客户的服务器不连接外网,在不连接互联网的情况下使用 ubuntu 22.04 基于 docker 部署项目。 ## 解决方案
制作apt源
把部署项目所需的软件包制作成一个自定义的源,复制到内网使用,计划使用软件如下: 安装docker需要 docker-ce docker-ce-cli containerd.io docker-compose-plugin(可选)运维工具 vim net-tools netplan.io htop ufw iptables其他基础依赖
#!/bin/bash
set -e
# 添加 Docker 官方源
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add -
add-apt-repository deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable
apt update
apt install -y dpkg-dev
#rm -rf ./offline-packages
rm -rf ./offline-packages.tar.gz
# 创建目录
mkdir -p ./offline-packages
cd ./offline-packages
# 获取依赖列表
PKG_LIST=$(apt-cache depends --recurse --no-recommends --no-suggests \
--no-conflicts --no-breaks --no-replaces --no-enhances \
ca-certificates curl gnupg lsb-release software-properties-common apt-transport-https \
git-man git iptables less patch \
netplan.io htop ufw openvswitch-switch \
docker-ce docker-ce-cli containerd.io docker-compose-plugin vim net-tools |
grep -E '^[a-zA-Z0-9]' | sort -u)
# 下载所有包
for pkg in $PKG_LIST; do
echo 正在下载: $pkg
apt-get download $pkg || echo 跳过无法下载的包: $pkg
done
# 创建仓库索引
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
tar czvf ../offline-packages.tar.gz ./
内网导入apt源,并安装软件
导入软件源
#!/bin/bash
set -e
rm -rf /data/offline-packages
mkdir /data/offline-packages
tar zxvf offline-packages.tar.gz -C /data/offline-packages
cd /data/offline-packages
# 创建 sources.list 条目
rm /etc/apt/sources.list.d/offline.list
echo deb [trusted=yes] file:$(pwd) ./ | sudo tee /etc/apt/sources.list.d/offline.list
sudo apt update
安装软件
sudo apt install -y docker-ce docker-ce-cli containerd.io vim net-tools docker-compose-plugin
导出docker 镜像
# 导出redis
REDIS_IMAGE_VERSION=7.4.2-alpine
REDIS_IMAGE_TAG=redis:$REDIS_IMAGE_VERSION
docker save -o $EXPORT_FOLDER/redis-$REDIS_IMAGE_VERSION.tar $REDIS_IMAGE_TAG
# 导出Portainer
PORTAINER_IMAGE_VERSION=2.33.1
PORTAINER_IMAGE_TAG=portainer/portainer-ce:$PORTAINER_IMAGE_VERSION
docker save -o $EXPORT_FOLDER/portainer-$PORTAINER_IMAGE_VERSION.tar $PORTAINER_IMAGE_TAG
# 导出mysql
MYSQL_IMAGE_VERSION=5.7.44
MYSQL_IMAGE_TAG=mysql:$MYSQL_IMAGE_VERSION
docker save -o $EXPORT_FOLDER/mysql-$MYSQL_IMAGE_VERSION.tar $MYSQL_IMAGE_TAG
内网导入docker镜像
docker load -i ***.tar
netplan 配网
修改/etc/netplan/*.yaml
# Let NetworkManager manage all devices on this system
network:
ethernets:
ens32: ## network card name
dhcp4: false
addresses:
- 192.168.3.88/24 ## set static IP
routes:
- to: default
via: 192.168.3.1 ## gateway
nameservers:
addresses: [ 8.8.8.8,192.168.3.1 ]
version: 2
修改完配置后,使用下面命令使得netplan配置生效:
netplan generate
netplan apply