Docker構(gòu)建適合自己的工作鏡像

之前的文章,我們看到的都是一條條命令的執(zhí)行拉取鏡像、創(chuàng)建容器,然后進(jìn)入容器終端,再一條條命令的執(zhí)行安裝一些必要的軟件。如果要為團(tuán)隊(duì)每位成員的機(jī)器都部署一套工作環(huán)境,這么一條條一句句的運(yùn)行命令,也是件煩人的事。

有沒(méi)有一種簡(jiǎn)單高效的方式呢?肯定有,了解一下Dockerfile

示例Dockerfile

下面示例代碼是一個(gè)構(gòu)建php鏡像腳本,將其寫(xiě)入一個(gè)名為Dockerfile的文件里。

FROM php:5.6-fpm AS php5.6
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak \
    && echo 'deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib' >> /etc/apt/sources.list \
    && echo 'deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib' >> /etc/apt/sources.list \
    && echo 'deb http://mirrors.aliyun.com/debian-security stretch/updates main' >> /etc/apt/sources.list \
    && echo 'deb-src http://mirrors.aliyun.com/debian-security stretch/updates main' >> /etc/apt/sources.list \
    && echo 'deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib' >> /etc/apt/sources.list \
    && echo 'deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib' >> /etc/apt/sources.list \
    && apt-get update \
    && apt-get install -y pkg-config libmemcached-dev autoconf gcc make zlib1g zlib1g-dev libssl-dev \
    && docker-php-ext-install mysqli pdo_mysql fileinfo \
    && pecl install redis-4.3.0 \
    && pecl install memcache-2.2.7 \
    && pecl install mongo-1.6.14 \
    && docker-php-ext-enable redis mongo memcache \
    && docker-php-source delete

開(kāi)始構(gòu)建鏡像

在Dockerfile文件的存放目錄下,執(zhí)行構(gòu)建命令。

docker build -t myphp:5.6-mydev .

注意,命令行最后那個(gè)點(diǎn)不要漏了。

鏡像構(gòu)建成功,并看明白Dockerfile文件的就不用再往下看了 ^_^

Dockerfile文件說(shuō)明

FROM:定制的鏡像都是基于 FROM 的鏡像,這里的php:5.6-fpm就是定制需要的基礎(chǔ)鏡像。后續(xù)的操作都是基于這個(gè)鏡像。

RUN:用于執(zhí)行后面跟著的命令,就是平時(shí)在shell終端執(zhí)行的命令。

分解說(shuō)明

第2-8行:修改阿里云的源,加快apt更新速度。注意php:5.6-fpm鏡像是debian9的系統(tǒng)

RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak \
    && echo 'deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib' >> /etc/apt/sources.list \
    && echo 'deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib' >> /etc/apt/sources.list \
    && echo 'deb http://mirrors.aliyun.com/debian-security stretch/updates main' >> /etc/apt/sources.list \
    && echo 'deb-src http://mirrors.aliyun.com/debian-security stretch/updates main' >> /etc/apt/sources.list \
    && echo 'deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib' >> /etc/apt/sources.list \
    && echo 'deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib' >> /etc/apt/sources.list \

第9-10行:修改國(guó)內(nèi)源后,更新緩存,并安裝軟件依賴(lài)。

    && apt-get update \
    && apt-get install -y pkg-config libmemcached-dev autoconf gcc make zlib1g zlib1g-dev \

第11行:利用php容器的特殊命令docker-php-ext-install安裝php源碼中的擴(kuò)展。

    && docker-php-ext-install mysqli pdo pdo_mysql \

第12-14行:利用pecl安裝redis, memcache, mongo擴(kuò)展

    && pecl install redis-4.3.0 \
    && pecl install memcache-2.2.7 \
    && pecl install mongo-1.6.14 \

第15行:?jiǎn)⒂胮ecl安裝的擴(kuò)展

    && docker-php-ext-enable redis mongo memcache 

第16行:刪除php源碼,有助于減小生成的鏡像大小。

    && docker-php-source delete

本文不準(zhǔn)備深入了,當(dāng)然Dockefile不止只有FROM和RUN,更多語(yǔ)法請(qǐng)學(xué)習(xí)官方文檔

什么?構(gòu)建好的鏡像怎么用?好!上代碼:

查看剛構(gòu)建的鏡像

docker images

結(jié)果

REPOSITORY         TAG            IMAGE ID       CREATED         SIZE
php                5.6-mydev      ffaf3d36c6d6   2 hours ago     382MB
php                5.6-fpm        3458979c7744   23 months ago   344MB

創(chuàng)建容器

docker run --name myphp56 -d

不能再寫(xiě)了,磚頭只能拋到這啦!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容