dockerfile


dockerfile介绍

dockerfile是一个用于生成docker镜像组合命令的文件.

docker读取dockerfile配置命令自动生成镜像.

dockerfile结构

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行的指令

FROM指定基础镜像,必须为第一个命令

FROM hyperf/hyperf:7.4-alpine-v3.11-swoole

LABEL用于为镜像添加元数据

MAINTAINER维护者信息

LABEL maintainer="Hyperf Developers <group@hyperf.io>" version="1.0" license="MIT" app.name="Hyperf"

ARG用于指定传递给构建运行时的变量

ARG timezone

ENV设置环境变量

ENV TIMEZONE=${timezone:-"Asia/Shanghai"} \
    APP_ENV=prod

RUN构建镜像时执行的命令

RUN set -ex \
echo "${TIMEZONE}" > /etc/timezone

WORKDIR工作目录,类似于cd命令

WORKDIR /opt/www

COPY复制数据到工作目录

COPY . /opt/www

EXPOSE暴露容器端口

EXPOSE 9501

ENTRYPOINT指令用于设定容器启动时第一个运行的命令及其参数

ENTRYPOINT ["php", "/opt/www/bin/hyperf.php", "start"]

dockerfile相关

# 注释命令
// 当命令发生错误的时候,停止脚本的执行
set -e

php环境

因为要减小docker的大小,所以使用了alpine版进行处理.

仅做测试用,如果要部署环境,直接使用FROM hyperf/hyperf:7.4-alpine-v3.11-swoole即可

docker pull php:7.3-cli-alpine3.13
docker run -dit -p 9500:80 -v ~/php73:/opt/php73 --name=php73 php:7.3-cli-alpine3.13 sh
docker exec -it php73 sh
sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories
apk add --no-cache autoconf g++ libtool make curl-dev libxml2-dev linux-headers
// 将redis下载到~/php73目录里
wget http://pecl.php.net/get/redis-5.3.4.tgz
pecl install /opt/php73/redis-5.3.4.tgz
// /usr/local/etc/php/conf.d/docker-php-ext-redis.ini
docker-php-ext-enable redis
// 将swoole下载到~/php73目录里
wget https://pecl.php.net/get/swoole-4.6.7.tgz
pecl install /opt/php73/swoole-4.6.7.tgz
// /usr/local/etc/php/conf.d/docker-php-ext-swoole.ini
docker-php-ext-enable swoole