安装 PHP 镜像

方法一、通过 Dockerfile 构建

创建Dockerfile

首先,创建目录php-fpm,用于存放后面的相关东西。

runoob@runoob:~$ mkdir -p ~/php-fpm/logs ~/php-fpm/conf

logs目录将映射为php-fpm容器的日志目录

conf目录里的配置文件将映射为php-fpm容器的配置文件

进入创建的php-fpm目录,创建Dockerfile

FROM debian:jessie

# persistent / runtime deps

ENV PHPIZE_DEPS \

autoconf \

file \

g++ \

gcc \

libc-dev \

make \

pkg-config \

re2c

RUN apt-get update && apt-get install -y \

$PHPIZE_DEPS \

ca-certificates \

curl \

libedit2 \

libsqlite3-0 \

libxml2 \

--no-install-recommends && rm -r /var/lib/apt/lists/*

ENV PHP_INI_DIR /usr/local/etc/php

RUN mkdir -p $PHP_INI_DIR/conf.d

##<autogenerated>##

ENV PHP_EXTRA_CONFIGURE_ARGS --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data

##</autogenerated>##

ENV GPG_KEYS 0BD78B5F97500D450838F95DFE857D9A90D90EC1 6E4F6AB321FDC07F2C332E3AC2BF0BC433CFC8B3

ENV PHP_VERSION 5.6.22

ENV PHP_FILENAME php-5.6.22.tar.xz

ENV PHP_SHA256 c96980d7de1d66c821a4ee5809df0076f925b2fe0b8c362d234d92f2f0a178e2

RUN set -xe \

&& buildDeps=" \

$PHP_EXTRA_BUILD_DEPS \

libcurl4-openssl-dev \

libedit-dev \

libsqlite3-dev \

libssl-dev \

libxml2-dev \

xz-utils \

" \

&& apt-get update && apt-get install -y $buildDeps --no-install-recommends && rm -rf /var/lib/apt/lists/* \

&& curl -fSL "http://php.net/get/$PHP_FILENAME/from/this/mirror" -o "$PHP_FILENAME" \

&& echo "$PHP_SHA256 *$PHP_FILENAME" | sha256sum -c - \

&& curl -fSL "http://php.net/get/$PHP_FILENAME.asc/from/this/mirror" -o "$PHP_FILENAME.asc" \

&& export GNUPGHOME="$(mktemp -d)" \

&& for key in $GPG_KEYS; do \

gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \

done \

&& gpg --batch --verify "$PHP_FILENAME.asc" "$PHP_FILENAME" \

&& rm -r "$GNUPGHOME" "$PHP_FILENAME.asc" \

&& mkdir -p /usr/src/php \

&& tar -xf "$PHP_FILENAME" -C /usr/src/php --strip-components=1 \

&& rm "$PHP_FILENAME" \

&& cd /usr/src/php \

&& ./configure \

--with-config-file-path="$PHP_INI_DIR" \

--with-config-file-scan-dir="$PHP_INI_DIR/conf.d" \

$PHP_EXTRA_CONFIGURE_ARGS \

--disable-cgi \

# --enable-mysqlnd is included here because it's harder to compile after the fact than extensions are (since it's a plugin for several extensions, not an extension in itself)

--enable-mysqlnd \

# --enable-mbstring is included here because otherwise there's no way to get pecl to use it properly (see https://github.com/docker-library/php/issues/195)

--enable-mbstring \

--with-curl \

--with-libedit \

--with-openssl \

--with-zlib \

&& make -j"$(nproc)" \

&& make install \

&& { find /usr/local/bin /usr/local/sbin -type f -executable -exec strip --strip-all '{}' + || true; } \

&& make clean \

&& apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false -o APT::AutoRemove::SuggestsImportant=false $buildDeps

COPY docker-php-ext-* /usr/local/bin/

##<autogenerated>##

WORKDIR /var/www/html

RUN set -ex \

&& cd /usr/local/etc \

&& if [ -d php-fpm.d ]; then \

# for some reason, upstream's php-fpm.conf.default has "include=NONE/etc/php-fpm.d/*.conf"

sed 's!=NONE/!=!g' php-fpm.conf.default | tee php-fpm.conf > /dev/null; \

cp php-fpm.d/www.conf.default php-fpm.d/www.conf; \

else \

# PHP 5.x don't use "include=" by default, so we'll create our own simple config that mimics PHP 7+ for consistency

mkdir php-fpm.d; \

cp php-fpm.conf.default php-fpm.d/www.conf; \

{ \

echo '[global]'; \

echo 'include=etc/php-fpm.d/*.conf'; \

} | tee php-fpm.conf; \

fi \

&& { \

echo '[global]'; \

echo 'error_log = /proc/self/fd/2'; \

echo; \

echo '[www]'; \

echo '; if we send this to /proc/self/fd/1, it never appears'; \

echo 'access.log = /proc/self/fd/2'; \

echo; \

echo 'clear_env = no'; \

echo; \

echo '; Ensure worker stdout and stderr are sent to the main error log.'; \

echo 'catch_workers_output = yes'; \

} | tee php-fpm.d/docker.conf \

&& { \

echo '[global]'; \

echo 'daemonize = no'; \

echo; \

echo '[www]'; \

echo 'listen = [::]:9000'; \

} | tee php-fpm.d/zz-docker.conf

EXPOSE 9000

CMD ["php-fpm"]

通过Dockerfile创建一个镜像,替换成你自己的名字

runoob@runoob:~/php-fpm$ docker build -t php:5.6-fpm .

创建完成后,我们可以在本地的镜像列表里查找到刚刚创建的镜像

runoob@runoob:~/php-fpm$ docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

php                 5.6-fpm             025041cd3aa5        6 days ago          456.3 MB


方法二、docker pull php

查找Docker Hub上的php镜像

runoob@runoob:~/php-fpm$ docker search php

NAME                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED

php                       While designed for web development, the PH...   1232      [OK]

richarvey/nginx-php-fpm   Container running Nginx + PHP-FPM capable ...   207                  [OK]

phpmyadmin/phpmyadmin     A web interface for MySQL and MariaDB.          123                  [OK]

eboraas/apache-php        PHP5 on Apache (with SSL support), built o...   69                   [OK]

php-zendserver            Zend Server - the integrated PHP applicati...   69        [OK]

million12/nginx-php       Nginx + PHP-FPM 5.5, 5.6, 7.0 (NG), CentOS...   67                   [OK]

webdevops/php-nginx       Nginx with PHP-FPM                              39                   [OK]

webdevops/php-apache      Apache with PHP-FPM (based on webdevops/php)    14                   [OK]

phpunit/phpunit           PHPUnit is a programmer-oriented testing f...   14                   [OK]

tetraweb/php              PHP 5.3, 5.4, 5.5, 5.6, 7.0 for CI and run...   12                   [OK]

webdevops/php             PHP (FPM and CLI) service container             10                   [OK]

...

这里我们拉取官方的镜像,标签为5.6-fpm

runoob@runoob:~/php-fpm$ docker pull php:5.6-fpm

等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为php,标签为5.6-fpm的镜像。


使用php-fpm镜像

运行容器

runoob@runoob:~/php-fpm$ docker run -p 9000:9000 --name  myphp-fpm -v ~/nginx/www:/www -v $PWD/conf:/usr/local/etc/php -v $PWD/logs:/phplogs   -d php:5.6-fpm

00c5aa4c2f93ec3486936f45b5f2b450187a9d09acb18f5ac9aa7a5f405dbedf

runoob@runoob:~/php-fpm$

命令说明:

  • -p 9000:9000 :将容器的9000端口映射到主机的9000端口
  • --name myphp-fpm :将容器命名为myphp-fpm
  • -v ~/nginx/www:/www :将主机中项目的目录www挂载到容器的/www
  • -v $PWD/conf:/usr/local/etc/php :将主机中当前目录下的conf目录挂载到容器的/usr/local/etc/php
  • -v $PWD/logs:/phplogs :将主机中当前目录下的logs目录挂载到容器的/phplogs

查看容器启动情况

runoob@runoob:~/php-fpm$ docker ps

CONTAINER ID    IMAGE         COMMAND      ...    PORTS                    NAMES

00c5aa4c2f93    php:5.6-fpm   "php-fpm"    ...    0.0.0.0:9000->9000/tcp   myphp-fpm

通过浏览器访问phpinfo()

PS:此处是通过nginx+php实现web服务,nginx配置文件的fastcgi_pass应该配置为myphp-fpm容器的IP。

fastcgi_pass  172.17.0.4:9000;

容器IP的查方法

docker inspect 容器ID或容器名 |grep '"IPAddress"'

安装 PHP 镜像的更多相关文章

  1. 阿里云Linux安装软件镜像源

    阿里云Linux安装软件镜像源 阿里云是最近新出的一个镜像源.得益与阿里云的高速发展,这么大的需求,肯定会推出自己的镜像源.阿里云Linux安装镜像源地址:http://mirrors.aliyun. ...

  2. SQL 2005 安装数据库镜像教程

    最近在搞在SQL 2005安装数据库镜像,中间遇到不少的错误,在此归纳总结,以方便有需要的朋友参考. 直接上脚本,主机部分: ---修改数据库为完整恢复模式USE master;ALTER DATAB ...

  3. python 相关模块安装 国内镜像地址

    python 相关模块安装 国内镜像地址 pipy国内镜像目前有: http://pypi.douban.com/  豆瓣 http://pypi.hustunique.com/  华中理工大学 ht ...

  4. Docker CE的安装 与镜像加速

    Docker CE 的安装与镜像加速 Docker CE是docker的开源版本 CENTOS 安装Docker CE 系统要求: 操作系统需要使用centos7() centos-extras库 必 ...

  5. Docker学习笔记一 概念、安装、镜像加速

    本文地址:https://www.cnblogs.com/veinyin/p/10406378.html  Docker 是一个容器,可以想象成一个轻便的虚拟机,但不虚拟硬件和操作系统. 优点:启动快 ...

  6. 在Ubuntu18.04的Docker中安装Oracle镜像及简单使用

    一.软件环境: 1.OS:Ubuntu 18.04 2.已安装了Docker 二.安装Oracle镜像的过程 1.切换到root账号下,如果是普通账号,下面操作指令前面加sudo 2.搜索oracle ...

  7. 腾讯云/阿里云/微软云安装ISO镜像系统方法

    如今云服务的盛行,我们的开发和应用中场景应用也层出不穷,有时我们需要安装自由的镜像却越来越难,甚至有些云出于安全原因自己用户安装自由镜像,那么今天将带给大家安装自有镜像的方法. 前提条件:你的现有服务 ...

  8. OpenStack Train版-3.安装glance镜像服务

    安装glance镜像服务 创建数据库并授权 mysql -u root create database glance; GRANT ALL PRIVILEGES ON glance.* TO 'gla ...

  9. Docker安装mysql镜像并进行主从配置

    Docker安装mysql镜像并进行主从配置 1.下载需要的mysql版本镜像 docker pull mysql:5.6 2.启动mysql服务实例(基本启动) #启动主mysql docker r ...

随机推荐

  1. JavaScript:将key和value不带双引号的JSON字符串转换成JSON对象的方法

    遇到相关的问题,花了两天的时间来解决,深感来之不易,所以做如下的总结,希望遇到此问题的码农能更快的找到解决办法! var jsonArr= [{col:TO_CHAR(HZRQ,'YYYYMM'),t ...

  2. JavaScript中匿名函数this指向问题

    this对象是在运行时基于函数执行环境绑定的,在全局函数中,this=window,在函数被作为某个对象的方法调用时,this等于这个对象. 但是匿名函数的执行环境是全局性的,所以匿名函数的this指 ...

  3. DDL 操作数据库

    DDL 操作数据库:常用的操作 CRUD 一.C(create)创建 1.创建数据库 create database 数据库名称; 2.创建数据库,判断是否存在,再创建(如果存在,就不再创建) cre ...

  4. webpack4 从零学习常用配置梳理

    webpack 的核心价值就是前端源码的打包,即将前端源码中每一个文件(无论任何类型)都当做一个 pack ,然后分析依赖,将其最终打包出线上运行的代码.webpack 的四个核心部分 entry 规 ...

  5. Android架构组件——ViewModel

    概述 ViewModel,从字面上理解的话,它肯定是跟视图(View)以及数据(Model)相关的.正像它字面意思一样,它是负责准备和管理和UI组件(Fragment/Activity)相关的数据类, ...

  6. Python2 和 pip2 存在, Python3 也存在,但是 pip3 不存在的解决办法

    sudo curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py sudo python3 get-pip.py 输入两行命令即可

  7. springboot2.1.3使用jdbcTemplate

    这里只是备忘一下使用方式,至于配置数据源信息不在此文中讲解,忘谅解. 1.  查询返回List<Long>数据集 (这里比如返回userId,long型) @Autowired@Quali ...

  8. Maven的下载,配置环境,导入编译器,使用说明一条龙

    什么是Maven?可以认为Maven是写程序时导入jar包的一个轻便的工具. 第一步Maven下载   1.Maven(点击进入),点击一个zip包下载      2.解压maven包,复制maven ...

  9. Linux在丢失的情况下重置密码

    1.开机菜单是 移动光标到第一行 --敲击e 2.找到UTF-8,加上空格rd.break,敲击ctrl+x 3.输入以下命令 mount -o remount,rw /sysroot chroot ...

  10. Docker容器化技术(上)

    目录 Docker容器化技术 一.介绍 二.Docker的发展 三.Docker安装 四.阿里云Docker镜像加速 五.Docker的基本概念 六.命令 七.Docker宿主机与容器通信 八.容器内 ...