DockerFile介绍

用于构建docker镜像的构建文件。类似于命令脚本。

构建步骤

  1. 编写一个 DockerFile 文件
  2. docker build 构建称为一个镜像
  3. docker run 运行镜像
  4. docker push 发布镜像(DockerHub,阿里云镜像仓库)

    DockerFile构建过程

    基础知识

  5. 每个保留字都是大写字母

  6. 从上往下顺序执行
  7. 表示注释

  8. 每一行指令都会创建提交一个新的镜像层

    指令

    Dockerfile - 图1

    FROM

    基于在什么基础上构建镜像。
    1. FROM scratch # 制作 base image
    1. FROM centos # 使用 base image

    MAINTAINER

    镜像是谁写的,名字+邮箱

    CMD

    容器启动时运行指定的命令。可以有多个 CMD 命令,但只有最后一个生效。CMD 可以被 docker run 之后的参数替换

    ENTRYPOINT

    指定这个容器启动时运行的命令,但只有最后一个生效。CMD 或 docker run 之后的参数会被当做参数传递给 ENTRYPOINT。

    ONBUILD

    当构建一个被继承的 DockerFile,这时就会运行 ONBUILD 指令,相当于触发指令。

    LABEL

    标签。
    1. LABLE maintainer="xiaodeng"
    1. LABLE version="1.0"

    RUN

    在容器中运行指定命令。执行命令并创建新的镜像层,经常用于安装软件包。
    自动换行的 RUN 需要用 反斜线 \ 换行。
    1. RUN yum update && yum install -y vim \
    2. python-dev # 反斜线换行

    WORKDIR

    设置工作目录位置,进入容器内的默认目录。
    不要使用 RUN cd ,尽量使用绝对目录。
    1. WORKDIR /test
    2. WORKDIR demo
    3. RUN pwd
    输出结果:
    1. /test/demo

    ADD

    将文件从 build context 复制到镜像,并解压
    1. ADD hello /
    1. ADD test.tar.gz /

    COPY

    将文件从 build context 复制到镜像。
    1. WORKDIR /
    2. COPY hello test/

    ENV

    构建的时候设置环境变量。
    1. ENV MYSQL_VERSION 5.6 # 定义常量
    2. RUN apt-get install -y mysql-server= "${MYSQL_VERSION}" \
    3. && rm -rf /var/lib/apt/lists/* # 引用常量

    EXPOSE

    暴露容器可访问的端口
    1. EXPOSE 5000
    暴露 5000 端口

    构建一个带net-tools的centos

    编写dockerfile,文件命名为mydockerfile-centos。如果命名为 DockerFile,那么构建的时候就不用加 -f 参数制定文件名,docker会自动在目录内寻找DockerFile文件。简单来说,-f 参数指定了 DockerFile 文件位置。 ``` FROM centos MAINTAINER dj278016981@qq.com

ENV MYPATH /usr/local WORKDIR $MYPATH

RUN yum -y install vim RUN yum -y install net-tools

EXPOSE 80

CMD echo $PATH CMD echo “——-END———“ CMD /bin/bash

  1. 使用构建命令进行构建,注意最后有一个 `.`。它指明了 build context 为当前目录。
  2. ```powershell
  3. docker build -f .\mydockerfile-centos -t mycentos:1.0 .
  4. [+] Building 85.2s (8/8) FINISHED
  5. => [internal] load build definition from mydockerfile-centos 0.1s
  6. => => transferring dockerfile: 263B 0.0s
  7. => [internal] load .dockerignore 0.0s
  8. => => transferring context: 2B 0.0s
  9. => [internal] load metadata for docker.io/library/centos:latest 0.0s
  10. => [1/4] FROM docker.io/library/centos 0.0s
  11. => [2/4] WORKDIR /usr/local 0.0s
  12. => [3/4] RUN yum -y install vim 81.9s
  13. => [4/4] RUN yum -y install net-tools 2.7s
  14. => exporting to image 0.4s
  15. => => exporting layers 0.4s
  16. => => writing image sha256:50693f31a71fbbe4c2a1f341752b9730304cbaca2fdca8dac22c0c13702fee1f 0.0s
  17. => => naming to docker.io/library/mycentos:1.0

从上面代码的第三行开始就是它的构建日志。
得到这个镜像后,我们去运行它:

  1. docker run -it mycentos:1.0

查看运行结果,发现我们直接进入了工作目录:
image.png
再检查一下 net-tools 是否被安装:
image.png
至此,我们构建了属于我们自己的centos镜像。

发布自己的镜像

发布到dockerhub

  1. https://hub.docker.com/ 注册自己的账号
  2. 在自己的机器上登录,提交自己的镜像。先查看一下如何登录: ```powershell PS D:\temp\dockerfile> docker login —help Log in to a Docker registry or cloud backend. If no registry server is specified, the default is defined by the daemon.

Usage: docker login [OPTIONS] [SERVER] [flags] docker login [command]

Available Commands: azure Log in to azure

Flags: -h, —help Help for login -p, —password string password —password-stdin Take the password from stdin -u, —username string username

Use “docker login [command] —help” for more information about a command.

  1. ```powershell
  2. docker login -u beiguoqutuikai
  1. PS D:\temp\dockerfile> docker login -u beiguoqutuikai
  2. Password:
  3. Login Succeeded

提交命令:

  1. docker push 登录名/镜像名:版本号

发布到阿里云

  1. 登录阿里云
  2. 找到容器镜像服务

image.png
image.png

  1. 创建命名空间
  2. 创建容器镜像
  3. 查看如何上传

image.png

  1. 登录成功后push到远程仓库
    1. docker tag 50693f31a71f registry.cn-hangzhou.aliyuncs.com/dengjia/dj-test:1.0
    2. docker push registry.cn-hangzhou.aliyuncs.com/dengjia/dj-test:1.0
    image.png
    提交镜像文件到远程后,如果想拉取这个镜像,使用下面的命令:
    1. docker pull registry.cn-hangzhou.aliyuncs.com/dengjia/dj-test:[镜像版本号]

参考:
https://blog.csdn.net/qq_29999343/article/details/78318397