Docker容器是轻量级虚拟化技术的一种实现,可以在一个宿主机上运行多个隔离的应用容器。
Docker镜像是个可执行的文件,它包含了运行一个特定应用程序所需的一切组件。从Docker Hub上下载的镜像可能会缺少某些特定的软件包或库文件,因此我们需要在镜像中安装必要的工具和软件包以满足应用程序的需要。通常情况下,我们可以在Docker容器中使用aptet宋安装需要的软件包,但是却发现Docker容器里没有apt-get这个命令,那么我们该怎么办呢?这是因为Docker容器的基础镜像通常是一个精简的操作系统,只包合运行应用程序所需的最基本组件,不包括完整的操作系统因此,我们需要找到适用于镜像的软件包管理器。
对于基于Alpine Linux的Docker境像,建议使用apk命今来安装需要的软件包
对于Ubuntu或Debian基础镜像,我们可以使用apt-get命令来安装
查看系统类型:uname -s 或者 cat /etc/os-release
以安装PHP扩展xlswriter为例,分dockerfile和docker容器内部两种方式安装
一 在docker容器内部安装
1、设置docker镜像源
(Alpine Linux系统)
在容器环境中输入以下命令:
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && apk update
2、安装扩展需要的环境
apk add autoconf \
gcc \
g++ \
zlib-dev \
make
3、pecl工具安装
(1)apk一键安装
apk add php-pear
(2)下载安装
cd /bin/
wget http://pear.php.net/go-pear.phar -O go-pear.php
php go-pear.php
##回车默认安装
4、使用pecl安装xlswriter
pecl install xlswriter
(可能会会出现错误提示,但是不要紧xlswriter 的安装包已经下载下来了,路径在/tmp/pear/install/)
5、安装php8-dev(指定php8)
apk add php8-dev
6、编译安装xlswriter
cd /tmp/pear/install/
解压 tar -zxvf xlswriter.tgz
cd xlswriter
phpize && ./configure --with-php-config=/usr/bin/php-config8 --enable-reader
7、配置扩展文件
cd /usr/lib/php8/modules/ 查看xlswriter.so文件是否存在
确认存在 cd /etc/php8/conf.d
编辑扩展文件 vi xlswriter.ini
extension = xlswriter.so
运行 php -m |grep xlswriter 确认是否安装上
(Ubuntu或Debian系统)
1、在容器环境中输入以下命令:
sed -i s@/archive.ubuntu.com/@/mirrors.ustc.edu.cn/@g /etc/apt/sources.list && apt-get update
2、安装扩展需要的环境
apt-get install autoconf automake libtool php-xml
3、pecl工具安装
(1)apt-get一键安装
apt-get install php-pear
(2)下载安装
cd /bin/
wget http://pear.php.net/go-pear.phar -O go-pear.php
php go-pear.php
##回车默认安装
4、使用pecl安装xlswriter
pecl install xlswriter
路径在/tmp/pear/install
5、安装php8-dev
apt-get install php8-dev
6、编译安装xlswriter
cd /tmp/pear/install/
解压 tar -zxvf xlswriter.tgz
cd xlswriter
phpize && ./configure --with-php-config=/usr/bin/php-config8 --enable-reader
7、配置扩展文件
cd /usr/lib/php8/modules/ 查看xlswriter.so文件是否存在
确认存在 cd /etc/php8/conf.d
编辑扩展文件 vi xlswriter.ini
extension = xlswriter.so
运行 php -m |grep xlswriter 确认是否安装上
二 用dockerfile安装
这里在hyperf3.0 框架的dockerfile基础上进行修改
(Alpine Linux系统)
dokerfile文件内容
# Default Dockerfile_1
#
# @link https://www.hyperf.io
# @document https://hyperf.wiki
# @contact [email protected]
# @license https://github.com/hyperf/hyperf/blob/master/LICENSE
FROM hyperf/hyperf:8.0-alpine-v3.16-swoole
LABEL maintainer="Hyperf Developers " version="1.0" license="MIT" app.name="Hyperf"
##
# ---------- env settings ----------
##
# --build-arg timezone=Asia/Shanghai
ARG timezone
ENV TIMEZONE=${timezone:-"Asia/Shanghai"} \
APP_ENV=prod \
SCAN_CACHEABLE=(true)
# update
RUN set -ex \
# show php version and extensions
&& php -v \
&& php -m \
&& php --ri swoole \
# ---------- some config ----------
&& cd /etc/php* \
# - config PHP
&& { \
echo "upload_max_filesize=128M"; \
echo "post_max_size=128M"; \
echo "memory_limit=1G"; \
echo "date.timezone=${TIMEZONE}"; \
} | tee conf.d/99_overrides.ini \
# - config timezone
&& ln -sf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime \
&& echo "${TIMEZONE}" > /etc/timezone \
&& sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && apk update \
&& apk update && apk add autoconf \
gcc \
g++ \
zlib-dev \
make \
&& cd /bin \
&& wget http://pear.php.net/go-pear.phar -O go-pear.php \
&& php go-pear.php Y \
&& apk add php8-dev \
&& pecl install xlswriter \
&& cd /tmp/pear/install \
&& mv xlswriter*.tgz xlswriter.tgz \
&& tar -zxvf xlswriter.tgz \
&& mv xlswriter-* xlswriter \
&& cp /usr/bin/phpize8 /usr/bin/phpize \
&& cd /tmp/pear/install/xlswriter \
&& phpize && ./configure --with-php-config=/usr/bin/php-config8 --enable-reader \
&& make && make install \
&& echo "extension=xlswriter.so" > /etc/php8/conf.d/xlswriter.ini \
&& echo -e "\033[42;37m Build Completed :).\033[0m\n" \
# ---------- clear works ----------
&& rm -rf /var/cache/apk/* /tmp/* /usr/share/man \
WORKDIR /opt/www
# Composer Cache
# COPY ./composer.* /opt/www/
# RUN composer install --no-dev --no-scripts
#
#COPY . /opt/www
#RUN composer install && php bin/hyperf.php
#
#EXPOSE 9508
#
#ENTRYPOINT ["php", "/opt/www/bin/hyperf.php", "start"]
(Ubuntu或Debian系统)
写在最后
可能会用到的命令:
composer config -g -l
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
composer install --ignore-platform-req=ext-xlswriter 忽略ext-xlswriter扩展
composer install --ignore-platform-reqs 设置忽略版本匹配
可以将配置好环境的容器生成镜像这样其他项目如果要用可以直接使用
docke commit 安装好环境的容器名 新的镜像名