这两天在使用容器来编译前后端项目,踩了一些坑,记录一下。
alpine是使用非常广泛的一个容器基础镜像,提供了一个基础的Linux环境,但是它的容量却非常小。因此以它为基础打出来的镜像体积能到缩小很多,对于镜像的分发和传输上具有很大的优势。
但是因为它是一个基础的linux环境,因此一些复杂点的组件全部被删除,只提供基本的功能。在我们配置自己需要的环境的时候,很多组件都需要自己来手动安装。
安装组件的工具
alpine镜像里使用的是apk工具来安装组件,而且是通过联网安装。这个工具和其他linux发行版上的yum、apt工具功能是一样的,可以帮你解决软件的依赖关系,然后自动安装软件,一些常用的软件包上面都有,而且随着它的使用率越来越高,它上面常用的软件会越来越多。apk工具它也是通过源来下载软件,默认的源同样也是在国外,因此对于一些网络不好的环境,可以使用内部的源,或者国内的源。那么我们以它为基础镜像后,要做的第一件事就是替换国内源。默认的源信息配置在/etc/apk/repositories
文件里。默认文件内容如下:
https://dl-cdn.alpinelinux.org/alpine/v3.14/main
https://dl-cdn.alpinelinux.org/alpine/v3.14/community
将里面的两个地址换成国内的阿里云的源或者中科大的源,替换命令如下:
# 阿里的
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 中科大的
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
替换完成后,加速就非常明显
apk的使用
搜索包
搜索使用的是search
子命令,示例如下:
apk search php8
php8-imap-8.0.9-r0
php8-ftp-8.0.9-r0
php8-pspell-8.0.9-r0
php8-phar-8.0.9-r0
php8-pecl-imagick-dev-3.5.0-r0
php8-litespeed-8.0.9-r0
php8-pecl-vips-1.0.12-r0
php8-dba-8.0.9-r0
会显示很多结果,然后直接根据名称安装即可。
安装
安装使用的是子命令add
,不是install
,示例如下:
apk add php8-ftp
fetch https://mirrors.aliyun.com/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
fetch https://mirrors.aliyun.com/alpine/v3.14/community/x86_64/APKINDEX.tar.gz
(1/1) Installing php8-ftp (8.0.9-r0)
OK: 118 MiB in 96 packages
安装流程显示的信息也非常简洁明了
查询包信息
查询使用的是子命令info
,示例如下:
apk info -a php8-ftp
php8-ftp-8.0.9-r0 description:
PHP8 extension: FTP
php8-ftp-8.0.9-r0 webpage:
https://www.php.net/
php8-ftp-8.0.9-r0 installed size:
104 KiB
php8-ftp-8.0.9-r0 depends on:
php8-common
so:libc.musl-x86_64.so.1
so:libcrypto.so.1.1
so:libssl.so.1.1
php8-ftp-8.0.9-r0 provides:
php-ftp
php8-ftp-8.0.9-r0 is required by:
php8-ftp-8.0.9-r0 contains:
etc/php8/conf.d/00_ftp.ini
usr/lib/php8/modules/ftp.so
php8-ftp-8.0.9-r0 triggers:
php8-ftp-8.0.9-r0 has auto-install rule:
php8-ftp-8.0.9-r0 affects auto-installation of:
php8-ftp-8.0.9-r0 replaces:
php8-ftp-8.0.9-r0 license:
PHP-3.01 BSD-3-Clause LGPL-2.0-or-later MIT Zend-2.0
使用-a
选项可以显示出完整的信息,包括它所需的依赖,它的大小、包里的文件存放位置、项目地址、提供的库等等,非常详细。
移除
移除使用的是子命令del
,示例如下:
apk del php8-ftp
(1/1) Purging php8-ftp (8.0.9-r0)
OK: 118 MiB in 95 packages
上面就是apk工具的几个基本操作命令,也是在使用alpine工具的时候摸索出来的一点东西。
网友评论