CentOS6.10+PHP7.3+SWOOLE4.5镜像

制作镜像

公司的swoole镜像是基于centos6.10,php版本是7.3,swoole的版本是4.5,但php没有安装yasd扩展!

用这个镜像的容器跑项目,要想进行swoole的debug,还必须安装它!

而这个扩展偏偏无法通过pecl或者docker-php-ext-install的方式安装。

虽然可以进入容器中去安装它,这里就分享一个自己制作的Dockerfile,可以一览无遗:

FROM centos:centos6.10
# 配置阿里云的yum源
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && \
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-6.10.repo && \
yum clean all && \
yum makecache && \
# 安装相应的依赖
yum install -y gcc gcc-c++ openssl openssl-devel libxml2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel && \
yum install -y openldap openldap-devel bzip2 bzip2-devel freetype freetype-devel && \
yum install -y wget && \
# 后续安装yasd扩展 需要升级gcc4.4到4.8
wget --no-check-certificate http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtoolset-2.repo && \
yum -y install devtoolset-2-gcc devtoolset-2-gcc-c++ devtoolset-2-binutils && \
scl enable devtoolset-2 bash && \
wget -O /cmake-3.18.0-Linux-x86_64.tar.gz https://cmake.org/files/v3.18/cmake-3.18.0-Linux-x86_64.tar.gz && \
mkdir /usr/local/cmake-3.18.0 && \
tar -zxvf /cmake-3.18.0-Linux-x86_64.tar.gz --strip-components 1 -C /usr/local/cmake-3.18.0 && \
ln -s /usr/local/cmake-3.18.0/bin/cmake /usr/bin/cmake && \
wget --no-check-certificate -O /libzip-1.5.2.tar.gz https://libzip.org/download/libzip-1.5.2.tar.gz && \
tar -zxvf /libzip-1.5.2.tar.gz && \
cd /libzip-1.5.2 && \
mkdir build && \
cd build && \
cmake .. && \
make && \
make install && \
echo '/usr/local/lib64' >> /etc/ld.so.conf && \
echo '/usr/local/lib' >> /etc/ld.so.conf && \
echo '/usr/lib' >> /etc/ld.so.conf && \
echo '/usr/lib64' >> /etc/ld.so.conf && \
ldconfig -v && \
wget --no-check-certificate -O /autoconf-2.69.tar.gz https://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz && \
tar -zxvf /autoconf-2.69.tar.gz && \
cd /autoconf-2.69 && \
./configure --prefix=/usr/ && \
make && make install && \
# 创建www组和用户
groupadd www && \
useradd -g www -M -s /sbin/nologin www && \
# 安装php7.3
wget -O /php-7.3.33.tar.gz https://www.php.net/distributions/php-7.3.33.tar.gz && \
tar -zxvf /php-7.3.33.tar.gz && \
cd /php-7.3.33 && \
mkdir /usr/local/php-7.3.33 && \
mkdir /etc/php && \
./configure \
--prefix=/usr/local/php-7.3.33/ \
--with-config-file-path=/etc/php/ \
--with-libdir=/lib64 \
--with-mysqli \
--with-pdo-mysql \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--with-mhash \
--with-ldap \
--disable-rpath \
--disable-ipv6 \
--enable-pcntl \
--enable-fpm \
--enable-sockets \
--enable-mbregex \
--enable-mbstring \
--enable-mysqlnd \
--enable-zip \
--enable-soap \
--enable-bcmath \
--enable-calendar \
--enable-opcache \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-inline-optimization && \
make && \
make install && \
# 安装swoole扩展 根据提示选择安装对应的支持
/usr/local/php-7.3.33/bin/pecl install https://pecl.php.net/get/swoole-4.5.11.tgz && \
# 安装yasd扩展
wget --no-check-certificate -O /yasd-0.3.9.tar.gz https://github.com/swoole/yasd/archive/refs/tags/v0.3.9.tar.gz && \
tar -xvf /yasd-0.3.9.tar.gz && \
cd /yasd-0.3.9 && \
/usr/local/php-7.3.33/bin/phpize --clean && \
/usr/local/php-7.3.33/bin/phpize && \
./configure  --with-php-config=/usr/local/php-7.3.33/bin/php-config && \
make clean && \
make && make install  && \
# 删除多余的资源包
rm -f /cmake-3.18.0-Linux-x86_64.tar.gz && \
rm -f /libzip-1.5.2.tar.gz && \
rm -rf /libzip-1.5.2 && \
rm -f /php-7.3.33.tar.gz && \
rm -rf /php-7.3.33 && \
rm -f /autoconf-2.69.tar.gz && \
rm -rf /autoconf-2.69/ && \
rm -f yasd-0.3.9.tar.gz && \
rm -rf /yasd-0.3.9/ && \
rm -f php-7.3.33.tar.gz && \
rm -rf / php-7.3.33/

这样你能很清楚镜像的细节,放心修改和使用!

php.ini配置如下:

[PHP]
engine = On
short_open_tag = On
asp_tags = Off
precision = 14
y2k_compliance = On
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = 17
allow_call_time_pass_reference = Off
safe_mode = Off
safe_mode_gid = Off
safe_mode_include_dir =
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
;disable_functions = passthru,exec,system,popen,chroot,escapeshellcmd,escapeshellarg,shell_exec,proc_open,proc_get_status,socket_bind,socket_listen,socket_accept,socket_write,socket_read,phpinfo,scandir,chgrp,chown,chmod,delete,rmdir,eval
disable_classes =
zend.enable_gc = On
expose_php = Off
max_execution_time = 30
max_input_time = 60
memory_limit = 128M
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
error_log = /data/logs/php-errors.log
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = Off
variables_order = "EGPCS"
request_order = "GP"
register_globals = Off
register_long_arrays = Off
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
extension_dir = "/usr/local/php-7.3.33/lib/php/extensions/no-debug-non-zts-20180731"
extension = swoole.so
extension = yasd.so
zend_extension = "/usr/local/php-7.3.33/lib/php/extensions/no-debug-non-zts-20180731/opcache.so"
[Date]
date.timezone = Asia/Chongqing
[filter]
[iconv]
[intl]
[sqlite]
[sqlite3]
[Pcre]
[Pdo]
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=
[Phar]
[Syslog]
define_syslog_variables  = Off
[mail function]
SMTP = localhost
smtp_port = 25
mail.add_x_header = On
[SQL]
sql.safe_mode = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[Interbase]
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
ibase.dateformat = "%Y-%m-%d"
ibase.timeformat = "%H:%M:%S"
[MySQL]
mysql.allow_local_infile = On
mysql.allow_persistent = On
mysql.cache_size = 2000
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port =
mysql.default_socket =
mysql.default_host =
mysql.default_user =
mysql.default_password =
mysql.connect_timeout = 60
mysql.trace_mode = Off
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = Off
[OCI8]
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[Sybase-CT]
sybct.allow_persistent = On
sybct.max_persistent = -1
sybct.max_links = -1
sybct.min_server_severity = 10
sybct.min_client_severity = 10
[bcmath]
bcmath.scale = 0
[browscap]
[Session]
;session.save_handler = redis
session.save_handler = file
;session.save_path = "tcp://ip:port?database=1"
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.bug_compat_42 = Off
session.bug_compat_warn = Off
session.referer_check =
session.entropy_length = 0
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
[MSSQL]
mssql.allow_persistent = On
mssql.max_persistent = -1
mssql.max_links = -1
mssql.min_error_severity = 10
mssql.min_message_severity = 10
mssql.compatability_mode = Off
mssql.secure_connection = Off
[Assertion]
[COM]
[mbstring]
[gd]
[exif]
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
[mcrypt]
[dba]
[xsl]
[opencache]
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60
opcache.fast_shutdown = 1
opcache.enable_cli = 1

可以通过COPY命令把它加进去,或者你自己进入容器编辑。

建议

由于一些tar.gz包是国外的,下载比较慢,所以可以把上面wget下载的tar.gz包都提前通过工具下载到本地!然后通过ADD进行添加,ADD这个命令相比COPY还有解压缩的功能!

如对于:

wget --no-check-certificate -O /libzip-1.5.2.tar.gz https://libzip.org/download/libzip-1.5.2.tar.gz && \
tar -zxvf /libzip-1.5.2.tar.gz && \

就可以先下载https://libzip.org/download/libzip-1.5.2.tar.gz到本地,然后通过:

ADD libzip-1.5.2.tar.gz /

就可以添加到镜像中,并且是解压缩的。

总结

由于基础镜像是CentOS6,它的gcc版本默认是4.4,在编译某些软件时,可能报错:

cc1plus: error: unrecognized command line option "-std=c++11"

解决办法就是升级它,或者选择CentOS7作为基础镜像,它的gcc默认是4.8的。

当然如果替换了基础镜像,那么以上的dockerfile还有待验证。

posted @ 2022-12-30 17:27  笑笑霸  阅读(154)  评论(0编辑  收藏  举报