1、创建目录,上传包

创建项目目录

$ mkdir apache_php
$ cd apache_php

把包下载后放到服务器该目录下

$ ls
apr-1.6..tar.gz apr-util-1.6..tar.gz httpd-2.4..tar.gz php-7.2..tar.gz

2、创建Dockerfile

$ vi Dockerfile
# From表示使用centos:latest这个镜像为基础构建我们的镜像
FROM centos:latest # 创建者的基本信息
MAINTAINER xiaozhou (xiaozhou@docker.com) # 把下载好的源码包copy到容器,使用ADD会自动将文件解压,/src/ 是容器中存放文件的目录,目录不存在会自动创建
ADD apr-1.6..tar.gz apr-util-1.6..tar.gz httpd-2.4..tar.gz php-7.2..tar.gz /src/ # RUN命令会在容器中执行,每次执行都会创建一层新的镜像,这里为了减少层数使用\换行,使用 && 将命令连接
RUN yum -y install gcc make zlib-devel pcre-devel pcre \
#安装apache依赖库apr
&& cd /src && cd apr-1.6. \
&& ./configure --prefix=/usr/local/apr/ && make && make install \
&& cd /src && cd apr-util-1.6. \
# 需要先安装expat-devel,不然安装apr-util会报错
&& yum -y install expat-devel \
&& ./configure --prefix=/usr/local/apr-util/ --with-apr=/usr/local/apr/ \
#安装apache依赖库 apr-util
&& make && make install \
&& cd /src && cd httpd-2.4. \
&& ./configure \
--prefix=/usr/local/apache/ \
#指定刚才安装的apr目录
--with-apr=/usr/local/apr/ \
#指定刚才安装的apr-util目录
--with-apr-util=/usr/local/apr-util/ \
--enable-so \
--enable-deflate=shared \
--enable-expires=shared \
--enable-rewrite=shared \
--enable-static-support \
#编译apache
&& make && make install \
&& cd /src && cd php-7.2. \
&& yum -y install libxml2-devel \
# 安装php依赖
&& yum -y install openssl openssl-devel libcurl-devel perl \
# apxs没有指定perl的路径需要修改这个文件,不然会报错
&& sed -i '1i\#!/usr/bin/perl -w' /usr/local/apache/bin/apxs \
# 扩展可以按需选择,这里只加了常用的,扩展有依赖的需要先使用yum安装对应依赖
&& ./configure \
-prefix=/usr/local/php \
--with-pdo-mysql \
--with-curl \
--enable-bcmath \
--with-openssl \
--enable-mbstring \
--enable-opcache \
# 指定刚才安装的apache位置
--with-apxs2=/usr/local/apache/bin/apxs \
&& make && make install # 将端口暴露出去,注意:这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。要在宿主机中访问这个端口可以在运行时加上 -p : 这样访问宿主机80端口就会映射到容器的80端口
EXPOSE # 启动服务命令
CMD ["/usr/local/apache/bin/httpd", "-DFOREGROUND"]

3、构建镜像

$ docker build -t apache:php .

4、启动容器

$ docker run -it -d -p 80:80 apache:php

浏览器访问,看见出现 It works! ,说明部署成功
http://192.168.121.121

参考:

https://phperzh.com/articles/3175

docker Dockerfile学习---构建apache环境的更多相关文章

  1. docker Dockerfile学习---构建redis环境

    1.创建项目目录并下载包及文件 mkdir centos_redis cd centos_redis wget http://download.redis.io/releases/redis-5.0. ...

  2. docker Dockerfile学习---构建mongodb环境

    1.创建项目目录并上传包 mkdir centos_mongodb cd centos_mongodb .tgz 2.编辑配置文件 vi mongodb.conf dbpath = /data/usr ...

  3. docker Dcokerfile学习---构建nginx环境

    1.创建项目目录并上传包 $ mkdir docker_nginx $ cd docker_nginx 下载nginx包 $ wget http://nginx.org/download/nginx- ...

  4. docker 灵活的构建 php 环境

    地址: https://github.com/ydtg1993/server           使用docker搭建灵活的线上php环境 有时候你可能不太需要一些别人已经集成了的包或者镜像      ...

  5. Dockerfile分离构建LNMP环境部署wordpress

    最近忙着写自己的项目,也把一个站点的bbs论坛打算迁移到Docker中,测试没发现啥大问题.在单台上面的架构如下:(往后我们也是要讲到compose和swarm调度的慢慢来) 1.首先我们先安装一下d ...

  6. docker Dockerfile学习---nginx负载均衡tomcat服务

    1.此过程在nginx的基础上,也就是上篇博客写的内容. 2.创建项目目录并上传包,解压 $ mkdir centos_tomcat $ cd centos_tomcat $ tar zxvf jdk ...

  7. Docker容器学习梳理 - 基础环境安装

    以下是centos系统安装docker的操作记录 1)第一种方法:采用系统自带的docker安装,但是这一般都不是最新版的docker安装epel源[root@docker-server ~]# wg ...

  8. Docker容器学习梳理 - Dockerfile构建镜像

    在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其 ...

  9. 4.Docker容器学习之Dockerfile入门到放弃

    原文地址: 点击直达 0x01 Dockerfile 编写 描述:Dockerfile是一个文本格式的配置文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内 ...

随机推荐

  1. 【java】读写文件

    不要吐槽我为啥不写try,catch. 默认的相对路径是在工作空间的目录下. 如图 import java.io.*; import java.util.*; public class filerw ...

  2. Python之字符串正则匹配

    需求: 正则表达式匹配某个文本模式,但是它找到的是模式的最长可能匹配(因为是贪婪匹配 ). 而你想修改它变成查找最短的可能匹配. import re text2 = 'Computer says &q ...

  3. 1、cmd中检测远程的ip和端口是否处于监听状态

    一.使用 ping 命令测试远程的ip是否可连通 cmd  (右键 管理员角色) ---  ping   IP 二.使用 telnet 测试远程某一个ip的端口是否开放 1.为了安全起见,window ...

  4. php操作redis--集合(set)篇

    常用函数:sAdd,sMembers,sPop,sUnion等 应用场景:与list类型类似,是一个列表的功能,不同的是set可以自动排重,提供了一个判断某一个成员是否存在一个set集合内的重要接口. ...

  5. CentOS下MYSQL数据库的安装

    关于在Centos系统下安装MYSQL数据库,网络上资料有很多,在此主要感谢该文章的博主:http://www.cnblogs.com/zhoulf/archive/2013/01/25/zhoulf ...

  6. bzoj 2631

    lct 基础(' '   ) 就当个纪念吧(' '    )  毕竟写了4h, cut 部分一直naive 总是想找谁是儿子,然后最后发现直接提根就好了啊(' '   ) #include <i ...

  7. 【hihocoder 1554】最短的 Nore0061

    [链接]http://hihocoder.com/problemset/problem/1554 [题意] 中文题 [题解] DP; 设f[i][j][k]表示前i个字符,第一个串已经得到了前j个字符 ...

  8. WebStorm编辑器

    Webstorm的安装和免费使用 IntelliJ IDEA 注册码 (webstorm注册码):http://idea.lanyus.com/ (已经不能获取注册码了,之前的注册码可以重复使用) 安 ...

  9. 提高ASP.NET首页性能的方法

    1.js压缩文件,css压缩文件,引用的越少越好. 2.用 HTTP Module 控制页面的生命周期. 3.自定义生成动态页面的静态内容 . 4.页面用GZIP压缩. 5.OutputCache 编 ...

  10. 其它课程中的python---6、python读取数据

    其它课程中的python---6.python读取数据 一.总结 一句话总结: 记常用和特例:慢慢慢慢的就熟了,不用太着急,慢慢来 库的使用都很简单:就是库的常用函数就这几个,后面用的时候学都来得及. ...