如何将自己的应用生成 docker 镜像,并跑起来
四个部分
基础镜像
FROM 指定基础镜像,可以多个指定
FORM <image> FORM <image>:<tag>
维护者信息
MAINTAINER \
LABEL maintainer="name" 最新版本是这个样子.
镜像操作指令
RUN: 每条run指令将在当前镜像基础上执行指定命令,并提交为新的镜像.
RUN <command> # 在shell终端运行命令 /bin/sh -c RUN ["executable","",""] # 使用exec执行. 指定使用其他终端
容器启动时执行的指令,每个dockerfile只执行最后一条cmd命令. 如果启动时指定,将覆盖cmd命令
CMD: 指定运行容器时的操作命令
CMD ["executble","param1","param2"] # 使用exec 执行, 推荐 CMD command param1 params2 # 在 /bin/sh 中执行,提供给需要交互的应用 CMD ["param1","param2"] # 提供给 entrypoint 的默认参数
最后
docker build 创建镜像
docker build [option] path # 读取指定路径下的dockerfile,并将该路径下的所有内容发送给docker服务端,由服务端来创建镜像.
可以通过 .dockerignore 文件来让docker 忽略路径下的目录和文件.
docker build -t <imagename> <path> # 将路径下的文件生成镜像 imagename
其他的
EXPOSE docker容器需要暴露的端口号. 在启动容器时,需要通过-P 自动分配.
EXPOSE <port> [<port>...]
ENV 指定一个环境变量,会被后续的run指令使用,并在容器运行时保持.
ENV <key> <value> # 简单理解,就是申明变量,后续的run命令会 $key 调用
ADD 将\
复制到指定容器\ 里. ADD <src> <dest> # <src>可以是dockerfile所在目录的一个相对路径;可以是一个url,可以是一个tar文件,可以自动解压.
COPY 将本地 \
复制到容器的\ 里. COPY <src> <dest> # 如果不解压不外链,就用这个.
ENTRYPOINT 配置容器启动后执行的命令,不会被docker run 的参数覆盖. dockerfile里,只对最后一个有效
ENTRYPOINT ["executable","param1","param2"] ENTRYPOINT command param1 param2 # shell在中执行
VOLUME 在本地主机或者其他容器挂载创建挂载点. 一个用了存放数据库和需要保持的数据等.
VOLUME ["/data"]
USER 指定运行容器时的用户名或uid,获取的run也会使用指定的用户. 不需要管理员权限时,该命令指定.并且可以在之前创建所需要的用户.
USER daemon
WORKDIR 为后续的 run cmd entrypoint 配置工作目录. 可以使用多个.
WORKDIR /path/to/workdir
ONBUILD 配置当所创建的
镜像作为其他新创建镜像的基础
时,所执行的操作指令.ONBUILD [INSTRUCTION]