docker打包php7.3镜像

docker打包php7.3镜像

docker 打包php镜像

CentOS 7
Docker 1.16.x
php: 7.3

构建docker打包步骤

step.1 拉取基础php:7.3-apache镜像
docker pull php:7.3-apache

可以查看一下php镜像的环境变量

docker inspect php:7.3-apache

在这里插入图片描述

step.2 创建Dockerfile

先复习一下Dockerfile构建指令

指令 描述
FROM 构建的新镜像是基于哪个镜像。例如:FROM centos:6
MAINTAINER 镜像维护者姓名或邮箱地址。例如:MAINTAINER Mr.chen
RUN 构建镜像时运行的Shell命令。例如:RUN [“yum”,“install”,“httpd”]
或者RUN yum install httpd
CMD 运行容器时执行的Shell命令(可以被运行时传递的参数覆盖)。例如:CMD ["-c","/start.sh"]
或者CMD ["/usr/sbin/sshd","-D"]或者CMD /usr/sbin/sshd -D
EXPOSE 声明容器运行的服务端口。例如:EXPOSE 80 443
ENV 设置容器内环境变量。例如:ENV MYSQL_ROOT_PASSWORD 123456
ADD 拷贝文件或目录到镜像(可以自动解压缩或者下载)
例如:ADD [“src”,“dest”]或者ADD https://xxx.com/html.tar.gz /var/www/html
或者:ADD html.tar.gz /var/www/html
COPY 拷贝文件或目录到镜像(不能自动解压缩)。例如:COPY ./start.sh /start.sh
ENTRYPOINT 运行容器时执行的Shell命令(不能被运行时传递的参数覆盖)。例如:ENTRYPOINT ["/bin/bash","-c","/start.sh"]
或者ENTRYPOINT /bin/bash -c “/start.sh”
VOLUME 指定容器挂载点到宿主机自动生成的目录或其他容器
例如:VOLUME ["/var/lib/mysql"] ,将容器中的/var/lib/mysql 目录随机挂在到本地数据卷,可通过docker inspect查看
USER 为RUN,CMD和ENTRYPOINT执行命令指定运行用户
例如:USER Mr_chen
WORKDIR 为RUN,CMD,ENTRYPOINT,COPY和ADD设置工作目录(指定进入容器中默认被切换的目录)。
例如:WORKDIR /data
HEALTHCHECK 健康检查。例如:HEALTHCHECK –interval=5m –timeout=3s –retries=3
CMD curl -f http://localhost/
ARG 在构建镜像时指定一些参数。例如:ARG user

在你的php项目项目代码下创建Dockerfile文件,如下结构

-myAppPHP
    |-src
        |-index.php
    |-config
        |-php.ini
    |-Dockerfile

注意,建议把php.ini一起拷贝到镜像中

index.php的内容如下

<?php
phpinfo();
?>

Dockerifle的内容如下

FROM php:7.3-apache
COPY ./src /var/www/html/
COPY ./config /usr/local/etc/php/

注意,拷贝的路径是src下的文件,到/var/www/html/下,不包括src,如需要包括,则使用COPY . /var/www/html/

参考地址 https://hub.docker.com/_/php/

step.3 开始构建docker镜像

Dockerfile文件的同级目录下执行构建docker镜像指令

docker build -t phpapp:latest .

查看镜像

在这里插入图片描述

step.4 启动镜像
docker run -d -p 30001:80 --name myphp phpapp

浏览器输入 IP:30001即可见如下内容

在这里插入图片描述

安装常用php拓展模块

查看默认php模块

# 进入php容器
docker exec -it myphp bash

进入容器后适用php -m 查看启用的模块

通过php -i 查看php信息
php -i | grep -i extension_dir 查看拓展目录

在这里插入图片描述

执行php安装指令

# 容器中执行
docker-php-ext-install pdo_mysql
docker-php-ext-install mysqli

php:7.3-apache ls: cannot access ‘.’: Operation not permitted
这是docker版本过低,把docker升级到1.20以上可以解决

也可以将安装命令做到Dockerfile中

FROM php:7.3-apache
COPY ./src /var/www/html/
COPY ./config /usr/local/etc/php/
RUN docker-php-ext-install pdo_mysql
RUN docker-php-ext-install mysqli
php的拓展安装.1

php拓展安装过程常用的命令有

docker-php-source
docker-php-ext-install
docker-php-ext-enable
docker-php-ext-configure

参考地址https://www.cnblogs.com/yinguohai/p/11329273.html

php的拓展目录在如下目录

cd /usr/src/php/ext/

如无改目录,可能是未解压,我们进入/usr/src,可以看到如下内容

cd /usr/src
ls
php.tar.xz  php.tar.xz.asc

使用 docker-php-source extract 命令解压

安装拓展时,只需要使用 docker-php-ext-install <extName>即可,如果没有需要的拓展,则可下载源码到改目录,再使用该命令进行安装,安装好后,可以启用

启用插件的命令为docker-php-ext-enable <extName>

删除拓展插件 rm -rf /usr/local/etc/php/conf.d/docker-php-ext-redis.ini

启动的插件配置,我们可以在/usr/local/etc/php目录下的conf.d找到一一对应的模块配置

cd /usr/local/etc/php
ls
conf.d  php.ini  php.ini-development  php.ini-production
# 当个模块的配置文件
ls conf.d/
docker-php-ext-mysqli.ini  docker-php-ext-pdo_mysql.ini  docker-php-ext-sodium.ini
# 查看配置内容长什么样的
cat docker-php-ext-mysqli.ini
extension=mysqli.so

显然,跟php.ini中的写法一样,我们也可以直接修改/usr/local/etc/php/php.ini文件,添加php拓展的配置

更多php拓展安装参考点这里

php拓展安装.2

还有一种比较简单、非常规的操作安装法,直接拷贝*.so到相应的docker镜像中

php容器中的默认php拓展*.so库路径在/usr/local/lib/php/extensions/no-debug-non-zts-20180731/

然后修改php.ini

                       

点击阅读全文

上一篇 2023年 6月 15日 am10:15
下一篇 2023年 6月 15日 am10:18