前言
CentOS官方宣布
- CentOS Linux8在2021年底停止更新;
- CentOS Linux7用户较多,这个版本将在 2024年6月30日停止支持;
- 未来社区不会再有CentOS Linux的新版本,只有CentOS Stream不断向前发展;
我也不得不寻找CentOS的替代方案;
- Alpine
- Debian
- Ubuntu
都是基于Linux内核的开源操作系统,都可作为Docker的基础镜像使用;
但是这些系统有显著区别,本文记录下在使用这些开源操作系统过程踩过的坑;
一、Ununtu
Ubuntu是基于Debian构建的1个发行版本;
Ubuntu系统里,每个大版本里面都包含不同小版本,每个小版本都有自己的版本名称;
例如
- Ubuntu 24.04 LTS (noble)
- Ubuntu 23.10 (mantic)
- Ubuntu 23.04 (lunar)
- Ubuntu 22.04 LTs (jammy)
- Ubuntu 20.04 LTS (focal)
- Ubuntu 18.04 LTS (bionic)
- Ubuntu 16.04 LTS (xenial)(EOL)
- Ubuntu 14.04 LTS (trusty) (EOL)
我们可以使用lsb_release-c或lsb_release -a命令查看
1.apt-get源目录
https://mirrors.aliyun.com/ubuntu/
在使用Ubuntu源时同1个大版本中包含的小版本都可以使用同1个源,例如Ubuntu 22.10(kinetic)和Ubuntu22.04(jammy)等Ubuntu 22.xx小版本都可以使用Ubuntu22.04(jammy)的源;
1.1.dists目录
apt-get源中dist目录记录了Ubuntu的小版本的元数据
1.1.1.大分类
backports:过期功能
1.1.1.1.小分类
每个大分类又包含各种小分类- main:完全自由软件
- restricted:不完全自由软件
- universe:ubuntu官方不提供支持与补丁,全靠社群支持
- multiverse:非自由软件,完全不提供支持和补丁
secuirty:安全
updates:更新
proposed:预发布
1.2.pool目录
dists:记录了Ubuntu的小版本的元数据,pool目录才是真正存储包的目录;
2.ubuntu指定apt-get源
在ubuntu的/etc/apt/sources.list可以配置apt-get安装软件包时使用的源;
sed -i "s@deb http://security.ubuntu.com@deb [trusted=yes] https://mirrors.aliyun.com@g" /etc/apt/sources.list
sed -i "s@deb http://archive.ubuntu.com@deb [trusted=yes] https://mirrors.aliyun.com@g" /etc/apt/sources.list
信任源不需要公钥验证
deb [trusted=yes] https://https://mirrors.aliyun.com/ubuntu/ bionic-updates universe
取消源验证
echo "Acquire { https::Verify-Peer false }" > /etc/apt/apt.conf.d/my-verify-peer.conf
更新源
当/etc/apt/sources.list配置文件发生修改时需执行apt-get update命令进行更新
apt-get update
3.签名验证
以上在在ubuntu的/etc/apt/sources.list配置文件中配置[turned-yes]项,是指定apt-get完全信任该源,通常是企业内部的源;
如果是阿里云、华为云的源可以去这些对外公开的源,可以去远端源的Release.key文件中下载公钥到本地;
然后再在本地的/etc/apt/sources.list配置文件中指定本地的公钥[signed-by=/etc/apt/keyrings/xx-keyring.gpg];
apt-get安装每1个软件包都需要使用公钥进行数字签名,公钥保存在本地的/etc/apt/trusted.gpg.d/目录;
公钥保存在远端源的Release.key文件中,下载之后需要gpg --dearmor转换为gpg格式才能被apt-get命令所使用;
wget https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/Release.key
gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg Release.key curl -fsSL htps://mirors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/Release.key | gpg --dearmor -o/etc/apt/keyrings/kubernetes-apt-keyring.gpg
/etc/apt/sources.list中使用公钥
deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes.new/core/stable/v1.30/deb/ /
4.PPA
PPA 全称为 Personal Package Archives(个人软件包档案);
Ubuntu Launchpad官方源网站提供的1项服务,当然不仅限于 Launchpad 。
PPA允许个人用户上传软件源代码,通过Launchpad进行编译并发布为二进制软件包,作为apt-get新的源供给其他用户下载和更新。
在Launchpad网站上的每1个用户和团队都可以拥有1个或多个PPA。
通常PPA源里的软件是官方源里没有的,或者是最新版本的软件。
相对于通过Deb包安装来说,使用 PPA 的好处是,一旦软件有更新,通过 sudo apt-get upgrade 这样命令就可以直接升级到新版本。
PPA源软件包安装流程
1.搜索PPA软件源,如在Google上软件名称关键字 + PPA ,或者也可直接到 launchpad.net 上搜索 2.sudo apt-add-repository ppa_source_name //添加PPA源添加到源列表(/etc/apt/sources.list) 3.sudo apt update //访问源列表里的每个网址,并读取软件列表,然后保存在本地电脑,即获取软件的最新更新信息 4.udo apt-get install [ppa源对应的软件包名] //下载安装
配置PPA源
sudo apt-add-repository ppa:ubuntu-mozilla-daily/ppa
更新PPA源
sudo apt-get update sudo apt-get install firefox-4.0
Dockerfile
FROM codercom/code-server:4.1.0 USER root RUN set -eux; \ apt-get update; \ apt-get install -y --no-install-recommends \ apt-transport-https \ ca-certificates \ curl \ gnupg2 \ software-properties-common; \ curl -fsSL https://repo.huaweicloud.com/docker-ce/linux/debian/gpg | sudo apt-key add -; \ add-apt-repository "deb [arch=amd64] https://repo.huaweicloud.com/docker-ce/linux/debian $(lsb_release -cs) stable"; \ apt-get update; \ apt-get install -y --no-install-recommends \ docker-ce-cli; \ rm -rf /var/lib/apt/lists/* USER 1000 ENV USER=coder CMD ["bash"]
二、Debian
Ubuntu是基于Debian构建的1个Linux发行版;
1.发行版目录
- 下一代 Debian 正式发行版的代号为
trixie
—测试(testing)
版 — 发布日期尚未确定 - Debian 12 (
bookworm
) — 当前的稳定(stable)
版 - Debian 11 (
bullseye
) — 当前的旧的稳定(oldstable)
版 - Debian 10(
buster
) — 已存档版本,另有第三方付费扩展长期支持 - Debian 9(
stretch
) — 已存档版本,另有第三方付费扩展长期支持 - Debian 8(
jessie
) — 已存档版本,另有第三方付费扩展长期支持 - Debian 7(
wheezy
) — 被淘汰的稳定版 - Debian 6.0(
squeeze
) — 被淘汰的稳定版 - Debian GNU/Linux 5.0(
lenny
) — 被淘汰的稳定版 - Debian GNU/Linux 4.0(
etch
) — 被淘汰的稳定版 - Debian GNU/Linux 3.1(
sarge
) — 被淘汰的稳定版 - Debian GNU/Linux 3.0(
woody
) — 被淘汰的稳定版 - Debian GNU/Linux 2.2(
potato
) — 被淘汰的稳定版 - Debian GNU/Linux 2.1(
slink
) — 被淘汰的稳定版 - Debian GNU/Linux 2.0(
hamm
) — 被淘汰的稳定版
被淘汰的 Debian 正式发行版的网页信息已被原封不动地保留,但是这些发行版本身只能在单独的存档中找到。
请参考 Debian FAQ 中关于所有这些版本代号的由来的相关说明信息。
三、Alpine
Alpine 的意思是“高山的”,比如 Alpine plants高山植物,Alpine skiing高山滑雪、the alpine resort阿尔卑斯山胜地。
Alpine Linux 网站首页注明“Small!Simple!Secure!Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.”概括了
1.特点
- 小巧:基于Musl libc和busybox,和busybox一样小巧,最小的Docker镜像只有5MB;
- 安全:面向安全的轻量发行版;
- 简单:提供APK包管理工具,软件的搜索、安装、删除、升级都非常方便。
- 适合容器使用:由于小巧、功能完备,非常适合作为容器的基础镜像。
2.apk包管理
Alpine使用apk包管理器
2.1.使用企业内部源
sed -i 's%https://dl-cdn.alpinelinux.org%私有源地址%g' /etc/apk/repositories;
apl add xxpackage --allow-untrusted添加信任内部源
apk add --no-cache \ ca-certificates \ vim \ bash \
--allow-untrusted; \