Dockerfile 學習:Docker Alpine PHP安裝擴展

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.187php

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

本次學習目的

  1. 生成一個 Docker php 5.6,並配置許多 php 擴展 ** 實際不必定須要這麼多,根據項目須要進行刪減
  2. 正確建立、運行一個 Dockerfile ** 原型已經忘記了是從哪裏抄寫過來的,反正就每一條命令逐個測試
  3. 看到那些高大上的 Dockerfile,有一種高山仰止的感受,目前我只能在山腳下爬行!

一、背景知識

Alpine 操做系統是一個面向安全的輕型 Linux 發行版mysql

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

二、折騰 Dockerfile

  1. 建立 Dockerfile 在本身的 dockerfile 目錄下,新建一個 Alpine mkdir Alpine cd Alpine touch Dockerfile vim Dockerfile 如下內容:nginx

    FROM php:5.6.37-fpm-alpine3.7
     RUN 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 .git

    最終成功的結果應該是這樣的 ..... OK: 34 MiB in 42 packages Removing intermediate container d09f8e2e89d8 ---> fd888a483d00 Successfully built fd888a483d00 Successfully tagged myphp5606:v1sql

三、運行並測試

  1. 查看以上生成的鏡像

docker imagesdocker

REPOSITORY                  TAG                    IMAGE ID            CREATED             SIZE
myphp5606                   v1                     fd888a483d00        About an hour ago   77.4MB
...
  1. 生成一個 php 容器 ** 由於學習過程當中鏡像和容器都已經比較多,先找個能用的容器名字和映射端口 ss -tlnp |grep 9002 確認沒有佔用!vim

    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 shcentos

    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

# 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

相關文章
相關標籤/搜索