• docker封装镜像(PHP)


    一、环境介绍
    操作系统:centos 7.9
    cpu:4核心
    内存:8GB
    docker版本:20.10.17

    二、docker commit命令封装镜像

    1、拉取centos 7.9镜像
    注:需求不通版本镜像上docker上面去找对应版本

    docker pull centos:centos7.9.2009
    
    • 1

    2、运行容器

    docker run -d --privileged=true centos:centos7.9.2009 /usr/sbin/init
    
    • 1

    注:运行基础镜像需要执行一个命令或是加上-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/
    
    • 1

    4、进入容器

    docker exec -it 1c443309a5bc /bin/bash
    
    • 1

    四个软件包已经存在
    在这里插入图片描述
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    6、解压php软件包,并编译安装
    在这里插入图片描述
    创建php配置文件

    mkdir /etc/php
    
    • 1

    编译

    ./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/
    
    • 1

    7、未报错后进行安装

    make && make install
    
    • 1

    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 
    
    • 1
    • 2
    • 3
    • 4

    创建软连接

    cd /usr/lib/oracle/12.2
    ln -s libclntsh.so.12.1 libclntsh.so
    ln -s libocci.so.12.1 libocci.so
    
    • 1
    • 2
    • 3

    配置lib

    echo "/usr/lib/oracle/12.2" > /etc/ld.so.conf.d/oracle-12.2.conf
    ldconfig
    
    • 1
    • 2

    9、安装oci8
    解压进入目录
    在这里插入图片描述
    生成configure文件

    /usr/local/php/bin/phpize
    
    • 1

    编译

    ./configure --with-php-config=/usr/local/php/bin/php-config  --with-oci8=instantclient,/usr/lib/oracle/12.2
    
    • 1

    安装

    make install
    
    • 1

    在这里插入图片描述
    10、安装pdo_oci
    进入源码目录

    cd /root/php-5.6.40/ext/pdo_oci
    
    • 1

    修改config文件

    sed -i "s/10.1/12.2/g" config.m4
    
    • 1

    生成configure文件

    /usr/local/php/bin/phpize
    
    • 1

    编译

    ./configure --with-pdo-oci=instantclient,/usr/lib/oracle/12.2,12.2 --with-php-config=/usr/local/php/bin/php-config
    
    • 1

    安装

    make && make install
    
    • 1

    在这里插入图片描述
    11、配置php.ini文件
    查看php.ini文件位置

    /usr/local/php/bin/php --ini
    
    • 1

    从源码包复制ini文件

    cp /root/php-5.6.40/php.ini-production /etc/php/php.ini
    
    • 1

    加入oracle配置

    cat >> /etc/php/php.ini << EOF
    extension=oci8.so
    extension=pdo_oci.so
    EOF
    
    • 1
    • 2
    • 3
    • 4

    12、配置php-fpm.conf
    在php安装目录有原始文件

    cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
    
    • 1

    加入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
    
    • 1
    • 2
    • 3
    • 4

    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
    
    • 1

    编辑启动文件,更改php路径

    vi /usr/lib/systemd/system/php-fpm.service
    
    • 1
    [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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    启动

    systemctl start php-fpm
    systemctl enable php-fpm
    
    • 1
    • 2

    14、查看加载的模块

    /usr/local/php/bin/php -m
    
    • 1

    在这里插入图片描述
    15、设置php执行环境变量

    ln -s /usr/local/php/bin/* /usr/local/bin/
    ln -s /usr/local/php/sbin/* /usr/local/bin/
    
    • 1
    • 2

    在这里插入图片描述
    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
    
    • 1

    安装

    make && make install
    
    • 1

    设置nginx systemd启动

    vi /usr/lib/systemd/system/nginx.service
    
    • 1

    添加如下

    [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 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    启动

     systemctl start nginx
     systemctl enable nginx
    
    • 1
    • 2

    17、删除上传的软件包
    在这里插入图片描述
    18、退出容器,生成镜像

    docker commit 1c443309a5bc gbxc-php:v1
    
    • 1

    在这里插入图片描述
    19、缩小镜像(可选)

    注意:commit生成的镜像比较大,docker file创建的小,commit即使缩减,也比docker file创建的大的多

    进入容器

    docker exec -it 1c443309a5bc /bin/bash
    
    • 1

    清理yum缓存

    yum clean all
    
    • 1

    打包根

    tar -cvf gbxcphp.tar --exclude=/proc --exclude=/sys --exclude=gbxcphp.tar /
    
    • 1

    退出容器并复制gbxcphp.tar到本地目录

    docker cp 1c443309a5bc:/gbxcphp.tar .
    
    • 1

    导入image

    cat gbxcphp.tar | docker import - gbxc-php:v2
    
    • 1

    可以看到容量变小了
    在这里插入图片描述
    20、上传镜像到私有仓库
    打标签

    docker tag gbxc-php:v2 harbor.wtown.com/wtown/gbxc-php:v2
    
    • 1

    推送

    docker push harbor.wtown.com/wtown/gbxc-php:v2
    
    • 1
  • 相关阅读:
    先进制造aps专题三 为什么java语言不适合作为aps算法的开发语言
    Linuxd的内核定时器 timer_list
    软件测试定位bug方法+定位案例(详解)
    Go 中的类型断言与静态转换
    6个步骤轻松实现 postman 接口压力测试(建议收藏)
    变量使用、
    Ansys DesignModeler
    React 学习笔记目录
    JVM内存布局及GC原理
    云原生技术如何应用到智慧城市数字底座建设中?
  • 原文地址:https://blog.csdn.net/zyj81092211/article/details/127357382