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

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
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现一个docker封装postgresql集群镜像可以按照以下步骤进行: 1. 安装Docker,如果已经安装Docker可以跳过这一步。 2. 下载postgresql镜像,可以使用以下命令: ``` docker pull postgres ``` 3. 创建docker-compose.yml文件,可以使用以下代码: ``` version: "3" services: db1: image: postgres environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: password POSTGRES_DB: mydatabase volumes: - ./data/db1:/var/lib/postgresql/data ports: - "5432:5432" db2: image: postgres environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: password POSTGRES_DB: mydatabase volumes: - ./data/db2:/var/lib/postgresql/data ports: - "5433:5432" db3: image: postgres environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: password POSTGRES_DB: mydatabase volumes: - ./data/db3:/var/lib/postgresql/data ports: - "5434:5432" ``` 上述代码中,我们创建了三个postgresql容器,并将它们绑定到不同的端口。同时,我们还定义了数据库的用户名、密码和数据库名称,并将数据保存在本地目录的data文件夹中。 4. 运行docker-compose.yml文件,可以使用以下命令: ``` docker-compose up -d ``` 上述命令将启动三个postgresql容器,并将它们绑定到不同的端口。 5. 验证postgresql集群是否正常工作,可以使用以下命令: ``` docker-compose ps ``` 上述命令将显示三个postgresql容器的状态,如果状态为“Up”,则表示集群正常工作。 以上就是一个基本的docker封装postgresql集群镜像的步骤,可以根据实际需要进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值