20190415 前一次实战 docker PHP 失败教训:

  1. 直接 pull 的 image ,只包含一些基本的 php 扩展
  2. 每一个实际的 php 项目,可能会有一些新的 php 扩展需求
  3. 虽然可以进入到容器再去安装扩展,但是,实践中经常会删除容器再来,然后,刚才安装的扩展就都没有了,还要在安装一次!
  4. 将需要的扩展预先写入 Dockerfile,直接生成所需的镜像,就省事多了!
  5. 想使用Docker,Dockerfile是必须学会的!

直接找了一个 php:5.6.37-fpm-alpine3.7 开始,结果悲剧了!折腾了一大圈!linux 了解不够!按照ubunt 和 centos 命令去操作,抓瞎了!

宿主机环境

visualbox 虚拟机
CentOS 7.6
ip: 192.168.1.187

本机已安装
nginx : nginx version: nginx/1.12.2
php : PHP 7.2.16 (cli) (built: Mar 10 2019 21:22:49) ( NTS )

本次学习目的

  1. 生成一个 Docker php 5.6,并配置许多 php 扩展
    ** 实际不一定需要这么多,根据项目需要进行删减
  2. 正确创建、运行一个 Dockerfile
    ** 原型已经忘记了是从哪里抄写过来的,反正就每一条命令逐个测试
  3. 看到那些高大上的 Dockerfile,有一种高山仰止的感觉,目前我只能在山脚下爬行!

1、背景知识

Alpine 操作系统是一个面向安全的轻型 Linux 发行版

alpine linux官网
https://www.alpinelinux.org/
简介
https://blog.csdn.net/bbwangj/article/details/81088231

2、折腾 Dockerfile

  1. 创建 Dockerfile
    在自己的 dockerfile 目录下,新建一个 Alpine
    mkdir Alpine
    cd Alpine
    touch Dockerfile
    vim Dockerfile
    以下内容:

     FROM php:5.6.37-fpm-alpine3.7RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \&& apk update\&& apk add --no-cache libmcrypt-dev freetype-dev libjpeg-turbo-dev \git \# libfreetype6-dev \# libjpeg62-turbo-dev \libpng-dev \&& docker-php-ext-install mcrypt mysqli pdo pdo_mysql mbstring bcmath zip opcache\&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/ \&& docker-php-ext-install -j$(nproc) gd
    
  2. 生成镜像
    docker build -t myphp5606:v1 .

    最终成功的结果应该是这样的

    OK: 34 MiB in 42 packages
    Removing intermediate container d09f8e2e89d8
    —> fd888a483d00
    Successfully built fd888a483d00
    Successfully tagged myphp5606:v1

3、运行并测试

  1. 查看以上生成的镜像

docker images

REPOSITORY                  TAG                    IMAGE ID            CREATED             SIZE
myphp5606                   v1                     fd888a483d00        About an hour ago   77.4MB
...
  1. 生成一个 php 容器
    ** 因为学习过程中镜像和容器都已经比较多,先找个能用的容器名字和映射端口
    ss -tlnp |grep 9002
    确认没有占用!

     sudo docker run -p 9002:9000 --name  myphp5606 -v /usr/share/nginx/html:/usr/share/nginx/html   -d myphp5606:v1
    
  2. 进入容器查看
    docker exec -it myphp5606 sh

    php -v
    返回结果:
    PHP 5.6.37 (cli) (built: Sep 12 2018 04:00:31)
    Copyright © 1997-2016 The PHP Group
    Zend Engine v2.6.0, Copyright © 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright © 1999-2016, by Zend Technologies

    php -m
    返回结果:
    [PHP Modules]
    bcmath
    Core
    ctype
    curl

    php -m |grep gd
    返回结果:
    gd

  3. 打开 nginx 网站测试
    修改 php 配置
    9000 端口是本机的 php ,版本是 7.2
    9002 端口是刚才安装的 docker PHP,版本是 5.6

vim nginx.conf

            # fastcgi_pass 127.0.0.1:9000;fastcgi_pass 127.0.0.1:9002;

curl 127.0.0.1/index.php

http://192.168.1.187/index.php

后记:

  1. build 过程中总是会看到一些 红色 错误 ,但是最终发现还是正确 build 了
  2. Dockfile 应该怎么调试?
    在启动容器之后, exec 进入容器的shell,将 Dockfile 里的脚本中值得怀疑的命令 cp 出来,单独执行!
    就可以找出来时那一条执行 build 的时候错误了!
  3. 我主要是怀疑那些 php 扩展没有安装上
    同样进入容器 shell , php -m |grep XXX 确认!

Dockerfile 学习:Docker Alpine PHP 安装扩展相关推荐

  1. 在centos8上手动安装docker,避免安装moby

    先说环境: 阿里云主机,2核4G 5M带宽 [root@petrichor ~]# lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarc ...

  2. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  3. alpine linux 源码安装,关于docker:如何安装Go in alpine linux

    我试图在一个Alpine Docker图像中安装Go. 为此,我从我的alpine docker图像中下载了tar文件,使用以下命令解压缩它: tar -C /usr/local -xzf go1.1 ...

  4. docker php安装gd扩展_Docker php安装扩展步骤

    演示docker-php-source , docker-php-ext-install ,docker-php-enable-docker-configure 这四个命令到底是用来干嘛的,它们在PH ...

  5. Docker php安装扩展步骤详解

    前言 此篇,主要是演示docker-php-source , docker-php-ext-install ,docker-php-enable-docker-configure 这四个命令到底是用来 ...

  6. docker php安装扩展

    Docker php安装扩展步骤详解 前言 此篇,主要是演示docker-php-source , docker-php-ext-install ,docker-php-enable-docker-c ...

  7. Docker学习一:Docker简介与安装

    前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...

  8. python安装扩展库常用的工具是什么和conda_python习题01——董付国学习系列

    一.简答题 1.python程序的__name__的作用是什么? 每一个python程序都有一个__name__变量,用来表示程序的运行方式,当作为模块导入时,__name__变量的值等于程序文件名, ...

  9. Docker的安装部署及优化详解(汇总版,学习docker这一篇就够了)

    目录 一.部署20版本的docker 1.1 安装依赖包 1.2 设置阿里云镜像 1.3 安装docker社区版 1.4 关闭增强机制 1.5 前体准备(开启服务) 1.6 设置镜像加速 1.6-1 ...

  10. [297]从零开始学习Docker

    这篇文章是我学习 Docker 的记录,大部分内容摘抄自 <<Docker - 从入门到实践>> 一书,并非本人原创. 学习过程中整理成适合我自己的笔记,其中也包含了我自己的实 ...

最新文章

  1. 未来,大脑扫描背包将神经科学带入现实世界
  2. 计算机的发展知识点,计算机一级MsOffice考试知识点:计算机的发展
  3. 嵌入式笔录(6)单管收音机电路分析
  4. ultra96-v2通过网线连接PC传输文件
  5. 使用jsPlumb插件实现动态连线功能
  6. 若依微服务部署遇到问题
  7. flink globalwindow_《从0到1学习Flink》—— 介绍Flink中的Stream Windows
  8. Spring源码解析
  9. 黑马程序员最新Python教程——第一阶段(2)
  10. (四十七) 蓝牙自拍杆原理学习
  11. AD19快速制作多管脚元件符号
  12. (转)gzip文件格式详解
  13. CountDownLatch并发编程
  14. stm32跑web服务器和协议栈的区别,STM32与LAN9252构建EtherCAT从站(二):使用SSC生成协议栈和XML文件——丁丁的个人网站...
  15. ★「C++游戏」BattleOfPhantom:大乱斗游戏升级版
  16. JavaScript之显示和隐藏图片
  17. 关于photoshop软件的177个小技巧
  18. 【线性代数】一、行列式和矩阵
  19. android图形动画
  20. 基于飞桨复现图像分类模型TNT,实现肺炎CT分类

热门文章

  1. bzoj千题计划315:bzoj3172: [Tjoi2013]单词(AC自动机)
  2. Selenium 高阶应用之WebDriverWait 和 expected_conditions
  3. 团队项目-个人博客-4.27
  4. 电脑是个神奇的东西!
  5. hive-server 启动失败问题小记
  6. Linux 设置系统时间和时区2.Ubuntu
  7. OAUI前台设计(二)
  8. ArrayList和LinkedList
  9. 11.9 noip模拟试题
  10. 为什么「margin:auto」可以让块级元素水平居中?