Dockerfile使用

文章目录
[隐藏]
1.Dockerfile怎么写

例子:php官方Docker

1.默认
FROM php:7.2-cli
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
CMD [ "php", "./your-script.php" ]

2. 添加核心插件
FROM php:7.2-fpm
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
    && 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

Dockerfile命令

1.1.FROM
# Usage: FROM [image name]
FROM php:7.2-fpm

设置基础镜像,必须放到首个命令。Docker先本地查找改镜像,本地没有尝试Docker image index下载该镜像。
php:镜像名称 7.2-fpm:镜像版本
1.2.MAINTAINER
# Usage: MAINTAINER [name]
MAINTAINER authors_name 

指定维护者信息,应该放到FROM后面
1.3.RUN
# Usage: RUN [command]
RUN apt-get update 

核心命令,基于基础镜像添加参数生成新的镜像,命令较长可用“/”换行
1.4.USER
# Usage: USER [UID]
USER 751

指定运行容器时的用户名或UID,后续的 RUN 也会使用指定用户。
1.5.VOLUME
# Usage: VOLUME ["/dir_1", "/dir_2" ..]
VOLUME ["/my_files", "/app_files"]

把容器中的目录挂载到宿主主机目录。例如:MySQL:data目录、nginx:config目录、logs目录
1.6.WORKDIR
WORKDIR /usr/src/myapp

用于设置RUN、CMD、ENTRYPOINT指明的命令的运行目录。
1.7.CMD
# Usage 1: CMD application "argument", "argument", ..
CMD "echo" "Hello docker!"

支持三种格式:
CMD [“executable” ,”Param1”, “param2”]使用exec执行,推荐
CMD command param1 param2,在/bin/sh上执行
CMD [“Param1”, “param2”] 提供给ENTRYPOINT做默认参数。
每个容器只能执行一条CMD命令,多个CMD命令时,只最后一条被执行。
1.8.ENV
ENV TZ "Asia/Shanghai"
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8

格式为 ENV 。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。
1.9.ADD
# Usage: ADD [source directory or URL] [destination directory]
ADD /my_app_folder /my_app_folder 

ADD命令有两个参数,源和目标。它的基本作用是从源系统的文件系统上复制文件到目标容器的文件系统。如果源是一个URL,那该URL的内容将被下载并复制到容器中。如果文件是可识别的压缩格式,则docker会帮忙解压缩。
1.10.COPY
COPY <src> <dest>

COPY 将文件从路径 <src复制添加到容器内部路径 <dest>。和ADD相似
1.11.EXPOSE
EXPOSE <port>[<port>...]

指定开放Docker容器的端口
1.12.ENTRYPOINT
两种格式:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2(shell中执行)。
配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。
1.13.ONBUILD
ONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行。
例如:创建包含ONBUILD命令的镜像A,再基于镜像A创建的镜像B会自动执行ONBUILD命令
1.14.ARG
ARG <name>[=<default value>]
ARG user1
ARG buildno

ARG指令定义一个变量,用户可以使用docker build命令使用--build-arg <varname> = <value>标志,在构建时将其传递给构建器。如果用户指定了一个未在Dockerfile中定义的构建参数,构建将输出错误。
2.Dockerfile怎么用
2.1.docker build
docker build [OPTIONS] PATH | URL | -

docker build 从Dockerfile 和上下文构建一个镜像。PATH 是本地构建上下文路径(.)表示当前路径。URL是GIT仓库地址。

OPTIONS说明:
--build-arg=[] :设置镜像创建时的变量;
--cpu-shares :设置 cpu 使用权重;
--cpu-period :限制 CPU CFS周期;
--cpu-quota :限制 CPU CFS配额;
--cpuset-cpus :指定使用的CPU id;
--cpuset-mems :指定使用的内存 id;
--disable-content-trust :忽略校验,默认开启;
-f :指定要使用的Dockerfile路径;
--force-rm :设置镜像过程中删除中间容器;
--isolation :使用容器隔离技术;
--label=[] :设置镜像使用的元数据;
-m :设置内存最大值;
--memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
--no-cache :创建镜像的过程不使用缓存;
--pull :尝试去更新镜像的新版本;
--quiet, -q :安静模式,成功后只输出镜像 ID;
--rm :设置镜像成功后删除中间容器;
--shm-size :设置/dev/shm的大小,默认值是64M;
--ulimit :Ulimit配置。
--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
--network: 默认 default。在构建期间设置RUN指令的网络模式

实例
$ docker build -f /path/to/a/Dockerfile . (指定/path/to/a/Dockerfile路径下的Dockerfile)
$ docker build -t shykes/myapp . (构建成功可以指定shykes/myapp作为标签来保存镜像)
$ docker build -t shykes/myapp:1.0.2 -t shykes/myapp:latest . (指定多个标签保存构建好的镜像)

相关链接

83 人浏览过

发表评论

邮箱地址不会被公开。 必填项已用*标注