当前位置: 首页 > 工具软件 > Docker-PHP > 使用案例 >

Docker实践笔记6:PHP容器制作

乐正涵意
2023-12-01

容器介绍

此容器包含 PHP 7.3 和Nginx1.18环境,用户可以自己使用Makefile 一键编译安装PHP环境,也可以直接使用制作好的镜像运行项目

容器源码下载

git clone https://github.com/CiaraLi/dockerFiles.git

文件目录

进入php7.3 可看到如下结构

├── Dockerfile //构建容器的DockerFIle
└── src
    ├── nginx //nginx配置文件
    │ ├── default.conf        
    │ ├── nginx.conf          
    │ └── start.sh //nginx启动命令
    ├── nginx-1.18.0.tar.gz //Nginx 源码安装包
    ├── php //PHP配置文件
    │ ├── php-fpm.conf      
    │ ├── php.ini               
    │ └── www.conf           
    ├── php-7.3.5.tar.gz //PHP 源码安装包
    ├── php_install.sh //安装脚本
    ├── phpredis-4.0.2.tar.gz //PHPREDIS 安装包
    └── www-data //PHP脚本目录
        └── index.php 

容器配置

  • 安装脚本
    编辑php_install.sh 可以自定义安装目录及源码版本。
    默认适配版本是php7.3 和php7.4 ,更改为更高级的版本可能需要微调脚本内容。
    也可以更改脚本自定义添加PHP模块
    源码包可以提前下载至src目录
#!/bin/bash 
homeDir="/tmp"   
php="php-7.3.5"
phpDir="/usr/local/php"   
nginx="nginx-1.18.0"  
nginxDir="/usr/local/nginx"    
phpredis="phpredis-4.0.2"   

  • nginx配置
    nginx 启动用户www-data 和www-data,更改用户或用户组需要更改php_install.sh脚本。
    nginx/start.sh 是容器启动命令,Nignx 记得要添加daemon off;
#!/bin/bash
php-fpm
nginx -g "daemon off;"
  • PHP配置
    PHP启动用户www-data 和www-data ,更改用户或用户组需要更改php_install.sh脚本。

构建自己的容器

进入php7.3目录

配置

  • 编辑DockFile
    镜像源使用centos7,不支持更改
    MAINTAINER可以设置自己的邮箱
    TZ 是默认时区
FROM centos:7
USER root
LABEL MAINTAINER="<ciara@gmail.com>"
COPY src/ /tmp/
## isntall nginx by source code 
WORKDIR /tmp

ENV TZ=Asia/Shanghai
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
 systemd-tmpfiles-setup.service ] || rm -f $i; done); \
 rm -f /lib/systemd/system/multi-user.target.wants/*;\
 rm -f /etc/systemd/system/*.wants/*;\
 rm -f /lib/systemd/system/local-fs.target.wants/*; \
 rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
 rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
 rm -f /lib/systemd/system/basic.target.wants/*;\
 rm -f /lib/systemd/system/anaconda.target.wants/*;\
 echo "--HELLO PHP7.3--" > /etc/motd ; \
 echo "set encoding=utf-8" > ~/.vimrc; \
 ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ;\
 chmod +x php_install.sh && ./php_install.sh  
  
EXPOSE 80 443
VOLUME ["/home/www-data","/usr/local/nginx/conf/include"]
CMD ["/bin/sh","/start.sh" ]

构建

  • 使用build命令构建镜像
    -t php7:指定镜像名称
cd php7.3
docker build -t php7 ./  

  • 安装过程看到如下信息,则构建成功
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

  • 查看构建的镜像
TALdeMacBook-Pro1:php7.3 tal$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
php7 latest b25b01f69449 6 minutes ago 556MB

运行容器

  • 准备容器运行的挂载目录
    目录结构如下。
├── config //项目Nginx配置
│ └── host.conf
└── www-data // 项目根目录
    └── hello.php
  • 编辑default.conf
    可以自定义容器的 PHP脚本目录、项目域名、日志目录、端口号
## API ##
server {
    listen 80;
 
    root /home/www-data/;  
    index index.php; 

    server_name 127.0.0.1 localhost;

    charset utf-8;
    access_log /home/www_logs/test_access.log combined;
    error_log /home/www_logs/test_error.log error;
  
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    client_max_body_size 50m;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass php-fpm;
        fastcgi_index index.php;
        include fastcgi_params;
    }

}  
  
  • 运行容器
    做目录挂载和端口映射
    1.Nginx配置挂载目录 :本机路径/config:/usr/local/nginx/conf/include
    2.PHP脚本挂载目录 :本机路径/www-data:/home/www-data/
    3.端口隐射 目前默认端口为80 443 用户可以自行更改Nginx配置
docker run -itd -v /Users/php/config:/usr/local/nginx/conf/include -v /Users/php/www-data/:/home/www-data/ -p 80:80 --name php7 php7

235525a5bc962aa6e5b36cba093c7e59b3213445bdd9e182ee5d1bce5c26d4dc

  • 查看运行的容器
TALdeMacBook-Pro1:php7.3 tal$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
235525a5bc96 php7 "/bin/sh /start.sh '…" 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp php7

上传至镜像仓库

创建tag

  • 创建镜像标签
docker tag php7  iongdoc/php7.3:v1.0

TALdeMacBook-Pro1:php7.3 tal$ docker images

REPOSITORY       TAG       IMAGE ID       CREATED          SIZE

iongdoc/php7.3    v1.0    b25b01f69449   57 minutes ago   556MB

php7             latest    b25b01f69449   57 minutes ago   556MB

  • 推送镜像,下次可以直接使用
    如需要更改环境,重新按之前的步骤构建一遍
TALdeMacBook-Pro1:php7.3 tal$ docker push iongdoc/php7.3:v1.0

Using default tag: latest

The push refers to repository [docker.io/iongdoc/php7]

c6e1c6b2fcc9: Pushed

5f70bf18a086: Mounted from iongdoc/php7.3:v1.0

d8d88d72c7ab: Pushed

174f56854903: Mounted from iongdoc/php7.3:v1.0

latest: digest: sha256:657cf8fd994fd809ac5901d44c4d9a8c119fd7c436f5d68a4859c0a67c604fc7 size: 1157

使用制作好的镜像

  • 直接下载制作好的镜像iongdoc/php7.3:v1.0
TALdeMacBook-Pro1:php7.3 tal$ docker pull iongdoc/php7.3:v1.0

v1.0: Pulling from iongdoc/php7.3

Digest: sha256:63f9b5b7127d4f88a700897b8cb7ffcb8645796d7d66757dd7b905c6f1a3aa2b

Status: Image is up to date for iongdoc/php7.3:v1.0

docker.io/iongdoc/php7.3:v1.0

 类似资料: