Dockerfile 学习:Docker Alpine PHP 安装扩展

傷城~ 2022-01-16 08:09 791阅读 0赞

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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 以下内容:

    1. FROM php:5.6.37-fpm-alpine3.7
    2. RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
    3. && apk update\
    4. && apk add --no-cache libmcrypt-dev freetype-dev libjpeg-turbo-dev \
    5. git \
    6. # libfreetype6-dev \
    7. # libjpeg62-turbo-dev \
    8. libpng-dev \
    9. && docker-php-ext-install mcrypt mysqli pdo pdo_mysql mbstring bcmath zip opcache\
    10. && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/ \
    11. && 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

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

    1. 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 (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 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

  1. # fastcgi_pass 127.0.0.1:9000;
  2. fastcgi_pass 127.0.0.1:9002;

curl 127.0.0.1/index.php

http://192.168.1.187/index.php

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA5NTM2MDk_size_16_color_FFFFFF_t_70

转载于:https://my.oschina.net/u/1440971/blog/3037957

发表评论

表情:
评论列表 (有 0 条评论,791人围观)

还没有评论,来说两句吧...

相关阅读