一、环境介绍
操作系统:centos 7.9
cpu:4核心
内存:8GB
docker版本:20.10.17
二、docker commit命令封装镜像
1、拉取centos 7.9镜像
注:需求不通版本镜像上docker上面去找对应版本
docker pull centos:centos7.9.2009
2、运行容器
docker run -d --privileged=true centos:centos7.9.2009 /usr/sbin/init
注:运行基础镜像需要执行一个命令或是加上-it,不然容器就自动关闭了
3、将软件包复制进容器(出nginx以外的四个软件包)
找到docker 容器id或者容器名称
docker cp 本地文件路径 容器ID/容器NAME:容器内路径
例子:
docker cp /root/gbxc/instantclient-basic-linux.x64-12.2.0.1.0.zip 2d23bd5e3690:/root/
4、进入容器
docker exec -it 1c443309a5bc /bin/bash
四个软件包已经存在
5、安装编译工具及依赖
yum -y install \
gcc \
gcc-c++ \
pcre pcre-devel \
autoconf \
libaio \
bzip2 \
unzip \
gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel \
GeoIP GeoIP-devel GeoIP-data
6、解压php软件包,并编译安装
创建php配置文件
mkdir /etc/php
编译
./configure --prefix=/usr/local/php --enable-bcmath --enable-calendar --with-curl --enable-ftp --with-gd --enable-mbstring --enable-mysqlnd --with-mysqli --with-openssl --with-zlib --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-fpm --enable-session --enable-pdo --enable-tokenizer --enable-zip --with-mysql --with-pdo-mysql --with-config-file-path=/etc/php/
7、未报错后进行安装
make && make install
8、安装oracle相关依赖包
unzip instantclient-sdk-linux.x64-12.2.0.1.0.zip
unzip instantclient-basic-linux.x64-12.2.0.1.0.zip
mkdir /usr/lib/oracle
mv instantclient_12_2 /usr/lib/oracle/12.2
创建软连接
cd /usr/lib/oracle/12.2
ln -s libclntsh.so.12.1 libclntsh.so
ln -s libocci.so.12.1 libocci.so
配置lib
echo "/usr/lib/oracle/12.2" > /etc/ld.so.conf.d/oracle-12.2.conf
ldconfig
9、安装oci8
解压进入目录
生成configure文件
/usr/local/php/bin/phpize
编译
./configure --with-php-config=/usr/local/php/bin/php-config --with-oci8=instantclient,/usr/lib/oracle/12.2
安装
make install
10、安装pdo_oci
进入源码目录
cd /root/php-5.6.40/ext/pdo_oci
修改config文件
sed -i "s/10.1/12.2/g" config.m4
生成configure文件
/usr/local/php/bin/phpize
编译
./configure --with-pdo-oci=instantclient,/usr/lib/oracle/12.2,12.2 --with-php-config=/usr/local/php/bin/php-config
安装
make && make install
11、配置php.ini文件
查看php.ini文件位置
/usr/local/php/bin/php --ini
从源码包复制ini文件
cp /root/php-5.6.40/php.ini-production /etc/php/php.ini
加入oracle配置
cat >> /etc/php/php.ini << EOF
extension=oci8.so
extension=pdo_oci.so
EOF
12、配置php-fpm.conf
在php安装目录有原始文件
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
加入oracle环境变量
cat >> /usr/local/php/etc/php-fpm.conf << EOF
env[LD_LIBRARY_PATH] = /usr/lib/oracle/12.2
env[ORACLE_HOME] = /usr/lib/oracle/12.2
EOF
13、配置php-fpm开机启动
注意:容器中药执行systemctl,需要添加 --privileged=true参数,开启特权模式,即root权限
复制源码包中启动文件到/usr/lib/systemd/system
cp /root/php-5.6.40/sapi/fpm/php-fpm.service /usr/lib/systemd/system
编辑启动文件,更改php路径
vi /usr/lib/systemd/system/php-fpm.service
[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target
[Service]
Type=simple
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php//sbin/php-fpm --nodaemonize --fpm-config /usr/local/php//etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
启动
systemctl start php-fpm
systemctl enable php-fpm
14、查看加载的模块
/usr/local/php/bin/php -m
15、设置php执行环境变量
ln -s /usr/local/php/bin/* /usr/local/bin/
ln -s /usr/local/php/sbin/* /usr/local/bin/
16、添加ngixn(可选,如果需要编译ngixn添加)
上传nginx软件包到容器内,解压
http://nginx.org/ 编译nginx
./configure --prefix=/usr/local/nginx --with-threads --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_sub_module --with-stream --with-stream=dynamic --with-stream_ssl_module --with-stream_realip_module --with-stream_geoip_module --with-stream_geoip_module=dynamic --with-stream_ssl_preread_module
安装
make && make install
设置nginx systemd启动
vi /usr/lib/systemd/system/nginx.service
添加如下
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
启动
systemctl start nginx
systemctl enable nginx
17、删除上传的软件包
18、退出容器,生成镜像
docker commit 1c443309a5bc gbxc-php:v1
19、缩小镜像(可选)
注意:commit生成的镜像比较大,docker file创建的小,commit即使缩减,也比docker file创建的大的多
进入容器
docker exec -it 1c443309a5bc /bin/bash
清理yum缓存
yum clean all
打包根
tar -cvf gbxcphp.tar --exclude=/proc --exclude=/sys --exclude=gbxcphp.tar /
退出容器并复制gbxcphp.tar到本地目录
docker cp 1c443309a5bc:/gbxcphp.tar .
导入image
cat gbxcphp.tar | docker import - gbxc-php:v2
可以看到容量变小了
20、上传镜像到私有仓库
打标签
docker tag gbxc-php:v2 harbor.wtown.com/wtown/gbxc-php:v2
推送
docker push harbor.wtown.com/wtown/gbxc-php:v2