Skip to content

Dockerfile

  • Dockerfile:是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
  • 作用:一次性构建镜像所需的环境
  • 命名:必须为Dockerfile 大写D
  • 官方文档

主要指令

  • FROM 基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是FROM
  • LABEL dockerfile的维护者信息
  • RUN 容器构建时需要运行的命令
    • shell格式 [执行命令] RUN yum -y install yum
    • exec格式 ["可执行文件","执行参数1","执行参数2"] RUN ["./test.php","dev","ok"] 相当于 RUN ./test.php dev ok
    • 是在docker build时执行
  • WORKDIR 指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
  • USER 指定该镜像以什么样的用户去执行,如果都不指定,默认是root. 一般不用指定
  • ENV 配置环境变量
  • ADD 将宿主机目录下的文件拷贝进镜像且会自动处理UL和解压tar压缩包,是Dockerfile相对路径
  • COPY 类似ADD 复制宿主机文件到容器
  • VOLUME 容器卷 宿主机与容器映射 用于数据保存和持久化
  • CMD 容器运行时需要运行的命令
    • shell格式 [执行命令] RUN yum -y install yum
    • exec格式 ["可执行文件","执行参数1","执行参数2"] RUN ["./test.php","dev","ok"] 相当于 RUN ./test.php dev ok
    • 是在docker build后容器启动完毕后执行
    • cmd 可以有多个指令,但是只有最后一个生效
  • ENTRYPOINT 类似于CMD指令,但是ENTRYPOINT不会被docker run.后面的命令覆盖,而且这些命令行参数会被当作参数送给ENTRYPOINT指令指定的程序
dockerfile
FROM ubuntu
LABEL name="value"
ENV MYPATH /usr/local
WORKDIR $MYPATH
EXPOSE 80
RUN echo "Welcome to....."
CMD /bin/bash

构建镜像

bash
# 格式
docker build -t [用户名]/[镜像名]:[版本号] .
# 打包默认Dockerfile文件  “.”必须有
docker build -t admin:v1 .
# 打包指定dockerfile “.”必须有
docker build -t admin:v2 -f Dockerfile-Admin .
  • 参数说明
    • -f :指定要使用的Dockerfile路径;
    • -m :设置内存最大值;
    • --tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

PHP构建示例

dockerfile
# 如果拉去镜像失败可以 docker pull 镜像然后 docker-compose
FROM php:8.2-fpm
# 编译安装核心扩展
RUN apt-get update && apt-get install -y \
		libfreetype-dev \
		libjpeg62-turbo-dev \
		libpng-dev \
	&& docker-php-ext-configure gd --with-freetype --with-jpeg \
	&& docker-php-ext-install -j$(nproc) gd

# pecl 安装扩展
RUN pecl install redis \
    && pecl install swoole \
    && docker-php-ext-enable redis swoole
# 安装composer
RUN curl -sS URL_ADDRESSRUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer