为什么需要自定义一个基础镜像?
admin
2023-02-23 10:40:14
0

为什么需要自定义一个基础镜像?

开始之前

为什么需要自定义一个PHP基础镜像?

对于使用php (python)等开发的项目,由于是解释型语言并不需要编译代码这个步骤(go或者java将依赖打包到可执行程序或包中),但是往往还需要安装一些依赖的库或者第三方模块。

在项目实践中一般会先在PHP官方镜像之上,添加项目一些必用扩展模块,例如连接 mysql数据库的 mysqlnd 模块,或者连接 redismemcachemongodb 等常用的php扩展模块,以项目实际需求为准。

基础镜像作用是为项目镜像提供支持,准备好php基础镜像之后,以此镜像为基础并添加项目代码,完成项目镜像构建工作,除重大安全更新、添加新的扩展模块之外,基础镜像并不会经常更新和调整

举个栗子

这里使用一个示例来描述php基础镜像,环境及需求如下:

项目基于 `php5 + mysql` 开发。
项目使用 `php-fpm` 运行项目代码。
项目使用 `nginx` 反向代理 php-fpm 并提供'静态资源'服务。
项目需要 `mysqlnd、redis、memcache` 等php扩展模块。

默认情况下 docker 只运行一个进程(docker推崇的理念),但是项目需要两个服务(php-fpm、nginx),所以需要第三方的进程管理软件,在docker中较流行的方案是使用 supervisor 软件管理多个进程

这篇文章重点介绍如何实现一个php基础镜像,将在下一篇文章中介绍 如何使用 supervisor 管理多个进程。

操作步骤
  1. 基于以上的需求,设计 Dockerfile 文件。
cat base/php/5.6/Dockerfile

# 使用 php:5.6-fpm 官方镜像
FROM php:5.6-fpm
MAINTAINER dongnan #<@微信公众号:运维录>

# env
ENV TZ="Asia/Shanghai" \
    LANG="en_US.UTF-8"

# apt
COPY conf/sources.list /etc/apt/sources.list
RUN apt-get update && apt-get install -y \
    supervisor nginx \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libmcrypt-dev \
    libpng-dev \
    libmagickwand-dev \
    libmemcached-dev \
    bzip2 \
    && apt-get clean && rm -r /var/lib/apt/lists/*

# ext
RUN docker-php-ext-install bcmath \
    dba \
    exif \
    mysqli \
    pdo_mysql \
    sysvsem \
    sysvshm \
    bz2 \
    zip \
    mysql

# gd
RUN docker-php-ext-install -j$(nproc) iconv mcrypt \
    && docker-php-ext-configure gd \
    --with-freetype-dir=/usr/include/ \
    --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd 

# pecl
RUN pecl install imagick \
    memcached-2.2.0 \
    redis-4.3.0 \
    && docker-php-ext-enable imagick \
    && docker-php-ext-enable memcached \ 
    && docker-php-ext-enable redis
  1. 构建镜像
cd base/php/5.6/
docker build -t demo-base:0.0.1 .

Sending build context to Docker daemon 3.0 kb
# 省略....
Successfully built cd34135ed904

不明白Dockerfile 文件参数含义,或者 build 命令使用方法,请参考这篇文章《如何使用 Dockerfile自定义镜像? 》

  1. 验证镜像
docker images --format '{{.Repository}} {{.Size}}'

demo-base 723MB

可以使用这个php基础镜像创建一个容器,不过这个容器(镜像)虽然已经安装了nginx 但是并不会运行,目前只有默认的php-fpm在运行,将在下一篇: 《使用supervisor管理Docker容器中多个进程》解决这个问题,敬请期待 公众号每周四 docker专题更新文章。

小结

最后来总结下文章中的知识点

  • 基础镜像作用是为项目镜像提供支持,并在基础镜像之上添加项目代码,完成项目镜像构建工作。
  • 除重大安全更新、添加新的扩展模块之外,基础镜像不会经常更新。
  • 默认情况下 docker只运行一个进程,需要supervisor进程管理软件管理多个进程。

参考文章

doker&k8s Qun [703906133]

相关内容

热门资讯

重磅消息“趣游天水麻将.怎么开... 您好:趣游天水麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款...
今日重大发现“八闽状元郎.究竟... 网上科普关于“八闽状元郎有没有挂”话题很是火热,小编也是针对八闽状元郎作*弊开挂的方法以及开挂对应的...
【第一资讯】“同城乐吧.到底有... 您好:同城乐吧这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款游戏...
今日重大发现“丫丫诗词.辅助开... 您好:丫丫诗词这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这款游戏...
玩家分享攻略“麻友圈2.到底有... 您好:麻友圈2这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这款游戏...
最新引进“阳光巴厘岛.怎么装挂... 有 亲,根据资深记者爆料阳光巴厘岛是可以开挂的,确实有挂(咨询软件无需打...
今日重磅消息“快乐打筒子.有没... 今日重磅消息“快乐打筒子.有没有挂?”太坑了原来有挂您好,快乐打筒子这个游戏其实有挂的,确实是有挂的...
今日重大通报“摇钱树拼三张.怎... 有 亲,根据资深记者爆料摇钱树拼三张是可以开挂的,确实有挂(咨询软件无需...
聚焦功能跃迁 券商竞合开新局 新华社北京12月22日电 《中国证券报》22日刊发文章《聚焦功能跃迁 券商竞合开新局》。文章称,在建...
重磅消息“同乐吧.真的有挂吗?... 重磅消息“同乐吧.真的有挂吗?”必胜开挂神器您好,同乐吧这个游戏其实有挂的,确实是有挂的,需要了解加...