docker自定义镜像构建php7的方法

首先进行简单的docker安装。

要进行自定义镜像,我们需要选择一个基础镜像进行构建自己的镜像:其实说白了,就是在一个有基础定义好的容器内,执行安装各种程序的命令,生成 所谓的Dockerfile 文件,既然如此第一步我们首先需要找一个本地的镜像作为基础镜像来操作即可:

1


如上图所示,我们来以centos为基础镜像,来构建一个Dockerfile

2第二步我们需要构建一个目录,用于存放Dockerfile文件

在root下构建docker_demo目录,存放 Dockerfile文件以及需要安装的程序文件即可,因为我要搭建PHP的自定义环境,所以我们再来搞一个PHP7的压缩包即可

wget http://am1.php.net/get/php-7.0.0.tar.gz/from/this/mirror

然后改名字

现在PHP nginx都有了,至于COMPOSER可以在php安装成功以后再自行操作即可~~~

接下来就是编写Dockerfile文件了,在此之前,简单了解下Dockerfile编写的关键字格式:

FROM 代表基于哪个镜像

RUN 安装软件使用

MAINTAINER 镜像的创建者

CMD 容器启动时执行的命令,但是一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条CMD

ENTRYPOINT 容器启动时执行的命令,但是一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条

USER 使用哪个用户运行container

EXPOSE 容器内部服务暴露的端口,主机上还需要在run容器时,做端口映射:

docker run -d -p 80:8080 centos6xxx

上边命令表示把容器内部的8080端口映射到主机80端口上

ENV 用来设置环境变量

ADD 将主机上的文件拷贝到container内的对应路径,所有拷贝到容器中的文件和文件夹权限为0755,uid和gid为0,如果文件是可识别的压缩格式,则docker会帮忙解压缩,ADD只有在build镜像的时候运行一次,后面运行container的时候不会再重新加载了。

例子如:

ADD nginx-1.12.2.tar.gz /usr/local/src

VOLUME 可以将本地文件夹或者其他容器的文件夹挂在到容器内。

WORKDIR 切换目录使用,(相当于cd目录)

ONBUILD 指定的命令在构建镜像时不执行,而是在它的子镜像中执行。

学完了Dockerfile基础命令,我们来试着搞一搞这个环境.

docker pull centos

首先下载一个基础镜像,如果有这一步请忽略,下面是我的Dockerfile

# base image
# 基础镜像
FROM docker.io/centos

# MAINTAINER编写者
MAINTAINER xy61521@163.com

# put nginx-1.12.2.tar.gz into /usr/local/src and unpack nginx 来吧nginx 和PHP提前都放进基础镜像的/usr/local/src目录下,方便编译安装
ADD nginx-1.12.2.tar.gz /usr/local/src
ADD php-7.0.0.tar.gz /usr/local/src

# running required command 安装Nginx的一系列乱七八糟的依赖包
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel
RUN yum install -y libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel
RUN useradd -M -s /sbin/nologin nginx

# change dir to /usr/local/src/nginx-1.12.2
WORKDIR /usr/local/src/nginx-1.12.2

# execute command to compile nginx
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make install

#先装个本地Mysql
RUN yum install -y wget
RUN wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
RUN rpm -ivh mysql57-community-release-el7-8.noarch.rpm
RUN yum install -y mysql-server

#截止此,开始安装php,宇宙惯例,开始安装一些编译的依赖包
RUN yum -y install epel-release
RUN yum -y install libmcrypt-devel
RUN yum -y install libxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel
WORKDIR /usr/local/src/php-7.0.0
#编译 安装
RUN ./configure --prefix=/usr/local/php7 --with-config-file-path=/usr/local/php7/etc --with-config-file-scan-dir=/usr/local/php7/etc/php.d --with-mcrypt=/usr/include --enable-mysqlnd --with-mysqli --with-pdo-mysql --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-gd --with-iconv --with-zlib --enable-xml --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-curl --with-jpeg-dir --with-freetype-dir --enable-opcache && make && make install

RUN cp php.ini-production /usr/local/php7/etc/php.ini

构建成功Dockerfile文件之后,docker build进行构建

docker build -t centos_lnmp:v1 .

后边的.代表相对路径当前目录,也可使用绝对路径

然后就是漫长的等待

直到构建成功镜像,至此我们重新开始

docker images

我们看到该镜像已经构建成功(有一点几率构建失败,失败的话删除容器和镜像重新构建即可),然后运行

docker run -dt -p 80:80 centos_lnmp:v1

成功后则可进入容器,配置nginx php 。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Linux下 php7安装redis的方法

    安装redis服务 1 下载redis cd /usr/local/ 进入安装目录 wget http://download.redis.io/redis-stable.tar.gz 2 解压安装 tar xvzf redis-stable.tar.gz cd redis-stable make && make install 3 配置redis 拷贝配置文件到/etc/redis/redis.conf cp redis.conf /etc/redis/6379redis.conf vim

  • PHP7 echo和print语句实例用法

    在 PHP 中,有两种基本的输出方法:echo 和 print. 在本教程中,我们几乎在每个例子中都会用到 echo 和 print.因此,本节为您讲解更多关于这两条输出语句的知识. PHP echo 和 print 语句 echo 和 print 之间的差异: echo - 能够输出一个以上的字符串 print - 只能输出一个字符串,并始终返回 1 提示:echo 比 print 稍快,因为它不返回任何值. PHP echo 语句 echo 是一个语言结构,有无括号均可使用:echo 或 e

  • PHP7引入的"??"和"?:"的区别讲解

    实践出真知- 测试代码 输入测试: <?php $array = [ 'a' => 1, 'b' => 2, 'c' => [], ]; $a = $array['c'] ?? 0; $b = $array['c'] ?: 0; $c = $array['d'] ?? 0; $d = $array['d'] ?: 0; $e = $array['c'] ? 1 : 0; $f = isset($array['c']) ? 1 : 0; $g = $array['d'] ? 1 :

  • 什么是PHP7中的孤儿进程与僵尸进程

    基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程.子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束. 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态. 孤儿进程 一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程.孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作. 僵尸进程 一

  • 为Plesk PHP7启用Oracle OCI8扩展方法总结

    注:本文适用于RHEL/CentOS发行版. 步骤1.安装构建自定义PHP 7模块所需的devel包 # yum install plesk-php70-devel gcc glibc-devel libmemcached-devel zlib-devel make libaio.x86_64 步骤2.下载oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm和oracle-instantclient12.1-devel-12.1.0.2.0

  • Centos7.4环境安装lamp-php7.0教程

    本文实例讲述了Centos7.4环境安装lamp-php7.0的方法.分享给大家供大家参考,具体如下: 一. 环境准备 桥接模式 能访问外网 #ping www.baidu.com ping得通则能到外网 关闭防火墙 #systemctl disable firewalld //禁用防火墙 #systemctl stop firewalld //关闭防火墙 关闭seLinux #vim /etc/selinux/config 改为: SELINUX=disabled 配置yum源 # cd /e

  • centos7上编译安装php7以php-fpm方式连接apache

    好几个月之间其实已经配置过LAMP LNMP等等一些配置,以前配置都是按照晚上抄的,基本都能配置出来,现重头学想自己配置下,但是发现好多配置都忘了 ,中间踩了几个坑,记录下,也更彻底的学习下..... ./configure --prefix=/usr/local/php7 --enable-fpm 以fpm模式安装,这个还可以改成 --with-apxs2=PATH模式,两者只能取其一 --enable-so --with-config-file-path=/etc 只能配置文件位置 --wi

  • PHP7匿名类的用法示例

    本文实例讲述了PHP7匿名类的用法.分享给大家供大家参考,具体如下: <?php /** * Created by PhpStorm. * User: Itboot * Date: 2019/1/17 * Time: 18:15 */ class An { private $num; protected $age = 15; public function __construct() { $this->num = 1; } protected function bar(): int { ret

  • PHP7内核之Reference详解

    问题 上一章说过引用(REFERENCE)在PHP5的时候是一个标志位, 而在PHP7以后我们把它变成了一种新的类型:IS_REFERNCE. 然而引用是一种很常见的应用, 所以这个变化带来了很多的变化, 也给我们在做PHP7开发的时候, 因为有的时候疏忽忘了处理这个类型, 而带来不少的bug. 最简单的情况, 就是在处理各种类型的时候, 从此以后我们要多考虑这种新的类型, 比如在PHP7中, 这样的代码形式就变得很常见了: try_again: swtich (Z_TYPE_P(zv)) {

  • docker自定义镜像构建php7的方法

    首先进行简单的docker安装. 要进行自定义镜像,我们需要选择一个基础镜像进行构建自己的镜像:其实说白了,就是在一个有基础定义好的容器内,执行安装各种程序的命令,生成 所谓的Dockerfile 文件,既然如此第一步我们首先需要找一个本地的镜像作为基础镜像来操作即可: 1 如上图所示,我们来以centos为基础镜像,来构建一个Dockerfile 2第二步我们需要构建一个目录,用于存放Dockerfile文件 在root下构建docker_demo目录,存放 Dockerfile文件以及需要安

  • Docker中镜像构建文件Dockerfile与相关命令的详细介绍

    前言 使用docker build命令或使用Docker Hub的自动构建功能构建Docker镜像时,都需要一个Dockerfile文件.Dockerfile文件是一个由一系列构建指令组成的文本文件,docker build命令会根据这些构建指令完成Docker镜像的构建.本文将会介绍Dockerfile文件,及其中使用的构建指令. 1. Dockerfile文件使用 docker build命令会根据Dockerfile文件及上下文构建新Docker镜像.构建上下文是指Dockerfile所在

  • Docker 下载镜像慢的问题解决方法

    docker 解决下载镜像慢 使用Docker pull 镜像这个超级慢,因为docker的hub是在国外的,所以是特别慢的,有什么办法可以解决这个问题么?答案肯定是有的,我们可以使用docker的代理的解决这个问题,大家要自己准备一个可以使用的http代理地扯 原文. 代理设置 此文使用的系统是fedora 创建一个docker service目录 mkdir /etc/systemd/system/docker.service.d 创建 /etc/systemd/system/docker.

  • 从零开始构建docker基础镜像的方法

    段子 今年基本已经结束了,我问了很多朋友今年挣钱了没?大多朋友都有挣,而且挣得五花八门:有挣个屁的,有挣个锤子的,有挣个毛的,更有甚者挣个妹的,奢侈之极!最恐怖的是挣个鬼的!有的还可以,挣个球,下午我碰见一朋友,问今年挣了吗?他望着天空喃喃自语:挣个鸟!看吧,只要肯努力,什么都能挣到. 年末将至,忽然发现,从创建开始到现在,整整一年时间,没有写过多少东西.为了留下一点痕迹,也是为了整理一下自己的收获,为17年画上一笔浓郁的色彩. 最近在看一本入门级机器学习的书,里面的案例基本上是python实现

  • 使用Docker构建企业级自定义镜像的方法

    前言 临下班前,楼主接到了一个需求,由于基础镜像标准发生变更,需要按照最新的Docker 镜像标准构建自己应用的自定义镜像.目前的标准是这样的:基础架构组只提供所有项目必须接入的3个公共镜像,这3个公共基础镜像包含了:JDK8.Skywalking.Arthas.对于各自业务组的应用如果还需要加入其它镜像,则由各个业务组自己基于基础架构组提供的公共镜像之上,再添加自定义的镜像,结构图如下: 构建步骤 编写Dockerfile 基于最新的规范来看,我们需要编写一个Dockerfile,然后引用基础

  • docker使用Dockerfile构建镜像的方法

    构建镜像 前面我们使用各种镜像进行测试演示,很多情况下我们是需要自己的镜像,满足自己业务需要的镜像,这就需要我们能够定制自己需要的镜像,构建 Docker 镜像有以下两种方法. 使用 docker commit 命令. 使用 docker build 命令和 Dockerfile 构建文件. 现在我们不推荐使用 docker commit 命令,而应该使用更灵活.更强大的 Dockerfile 来构建 Docker 镜像. 1.使用 commit 命令构建 docker commit 命令是创建

  • 使用Docker镜像构建Go应用的实现方法

    目录 修炼背景 第一次尝试 第二次尝试 第三次尝试 神功练成 项目地址 修炼背景 我夜以继日,加班加点开发了一个最简单的 Go Hello world 应用,虽然只是跑了打印一下就退出了,但是老板也要求我上线这个我能写出的唯一应用. 项目结构如下: . ├── go.mod └── hello.go hello.go 代码如下: package main func main() { println("hello world!") } 并且,老板要求用 docker 部署,显得咱们紧跟潮

  • Docker进阶之构建自定义镜像实战指南

    目录 一.什么是 Docker 镜像? 二.自定义镜像的好处? 三.构建自己的Centos 四.RUN.CMD和ENTRYPOINT的区别 五.[实战]Dockerfile制作tomcat镜像 小结 一.什么是 Docker 镜像? Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷.环境变量.用户等).镜像不包含任何动态数据,其内容在构建之后也不会被改变. 镜像是Docker容器的基石,容器是镜

  • Docker镜像构建的两种方法解析

    关于Docker里面的几个主要概念 这里用个不太恰当的比方来说明. 大家肯定安装过ghost系统,镜像就像是ghost文件,容器就像是ghost系统.你可以拿别人的ghost文件安装系统(使用镜像运行容器),也可以把自己现有的系统制作成ghost文件(从容器构建镜像).Dockerfile则像是一个生成ghost文件的脚本(镜像构建脚本),这个脚本会指定去哪里下载哪个版本的window系统,再去哪里下载哪些软件并安装,再修改哪些配置文件,等等.本文主要讲的是,如何从容器构建镜像(把现有系统制作成

  • Docker基于现有镜像构建新镜像的实现方法

    由现有镜像构建新镜像都是通过Dockerfile文档来实现的. 1.新建Dockerfile文档 在/home文件夹下新建一个文件夹,专门用来测试的,/docker/test文件夹,在文件夹中新建一个Dockerfile文档,文档中写入以下内容: FROM ubuntu:18.04 RUN apt-get update RUN apt-get install -y vim EXPOSE 80 Dockerfile文档中,每行的第一个关键字都必须大写. 第一行的意思是新建镜像的源镜像是Ubuntu

随机推荐