之前关于Docker的文章
《使用Docker部署LNMP环境 —— 镜像,容器与网络》
《使用Docker部署LNMP环境 —— Dockerfile》
《使用Docker部署LNMP环境 —— Docker-compose》
通过 命令 -> Dockerfile -> docker-compose 这样一个流程来讲解如何更简便地通过Docker搭建项目环境。

但是实际项目中使用Docker,像PHP等软件可能会在构建镜像时,RUN有一大堆更新apt、安装扩展等命令要跑。
而这些命令和操作可能会受网络波动导致各种问题,增加不确定性。

DockerHub

地址: https://hub.docker.com
Docker官方有像gitlab一样提供仓库空间上传自己构建的镜像。
先在本地构建好镜像,然后再上传到DockerHub仓库。
使用时在Dockerfile或docker-compose.yml中指定自己的仓库,然后运行容器即可。

注册、创建仓库、登录

1.到DockerHub注册账号
2.到Repositories里创建一个空仓库my-php
3.接下来需要到宿主机进行登录账号,使用 docker login 命令,按照提示输入账号和密码即可。

本地构建PHP镜像

本次将使用一个新的案例,从头开始。

创建Dockerfile

FROM php:7.1-fpm

WORKDIR /usr/local/bin

RUN cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini \
    && apt-get update \
    && apt update ; yes "" |apt install git \
    && apt-get install -y \
        zip \
        unzip \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
        libxslt1-dev \
    && rm -r /var/lib/apt/lists/* \
    && ./docker-php-ext-install pdo_mysql \
    && ./docker-php-ext-install mysqli \
    && ./docker-php-ext-install bcmath \
    && ./docker-php-ext-install mbstring \
    && ./docker-php-ext-install opcache \
    && ./docker-php-ext-install xsl \
    && ./docker-php-ext-install pcntl \
    && ./docker-php-ext-install -j$(nproc) iconv \
    && ./docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && ./docker-php-ext-install -j$(nproc) gd \
    && pecl install igbinary \
    && docker-php-ext-enable igbinary \
    && yes "" |pecl install lzf \
    && docker-php-ext-enable lzf \
    && yes "" |pecl install redis-4.0.1 \
    && docker-php-ext-enable redis
    && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

在之前文章的Dockerfile上做了一些小的调整,composer在容器内安装。

构建

docker build . -t rob123/my-php

这里需要注意的是,你的-t(tag)需要是DockerHub用户名/仓库名

推送镜像

docker push rob123/my-php

等待上传完成即可。

使用

在本案例的PHP容器,Dockerfile里面的所有操作已经被构建为镜像并上传到DockerHub的仓库中,所以我不再需要Dockerfile了。
只需要创建以下docker-compose.yml:

version: "3.4"

services:

  php-t:
    image: rob123/my-php
    volumes:
      - /var/www/html:/var/www/html
    ports:
      - "9000:9000"
    networks:
      net-t:
        ipv4_address: 172.18.0.3

networks:
   net-t:
      ipam:
         config:
         - subnet: 172.18.0.0/20
      driver: "bridge"

运行容器

docker-compose up -d

另外你也可以搭建属于自己的私有仓库,供局域网内机器使用,免受DockerHub龟速之苦。
详情前往 docker-registry-with-webui
docker-compose一键运行,带Web UI管理仓库、用户,支持公网访问(IP/域名)、HTTPS。

标签: none

添加新评论