容器介绍
此容器包含 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
- 查看运行结果
http://localhost/
上传至镜像仓库
创建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