DockerFile介绍
构建步骤
- 编写一个 DockerFile 文件
- docker build 构建称为一个镜像
- docker run 运行镜像
docker push 发布镜像(DockerHub,阿里云镜像仓库)
DockerFile构建过程
基础知识
每个保留字都是大写字母
- 从上往下顺序执行
表示注释
- 每一行指令都会创建提交一个新的镜像层
指令
FROM
基于在什么基础上构建镜像。FROM scratch # 制作 base image
FROM centos # 使用 base image
MAINTAINER
镜像是谁写的,名字+邮箱CMD
容器启动时运行指定的命令。可以有多个 CMD 命令,但只有最后一个生效。CMD 可以被 docker run 之后的参数替换ENTRYPOINT
指定这个容器启动时运行的命令,但只有最后一个生效。CMD 或 docker run 之后的参数会被当做参数传递给 ENTRYPOINT。ONBUILD
当构建一个被继承的 DockerFile,这时就会运行 ONBUILD 指令,相当于触发指令。LABEL
标签。LABLE maintainer="xiaodeng"
LABLE version="1.0"
RUN
在容器中运行指定命令。执行命令并创建新的镜像层,经常用于安装软件包。
自动换行的 RUN 需要用 反斜线\换行。RUN yum update && yum install -y vim \python-dev # 反斜线换行
WORKDIR
设置工作目录位置,进入容器内的默认目录。
不要使用RUN cd,尽量使用绝对目录。
输出结果:WORKDIR /testWORKDIR demoRUN pwd
/test/demo
ADD
将文件从 build context 复制到镜像,并解压。ADD hello /
ADD test.tar.gz /
COPY
将文件从 build context 复制到镜像。WORKDIR /COPY hello test/
ENV
构建的时候设置环境变量。ENV MYSQL_VERSION 5.6 # 定义常量RUN apt-get install -y mysql-server= "${MYSQL_VERSION}" \&& rm -rf /var/lib/apt/lists/* # 引用常量
EXPOSE
暴露容器可访问的端口
暴露 5000 端口EXPOSE 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
使用构建命令进行构建,注意最后有一个 `.`。它指明了 build context 为当前目录。```powershelldocker build -f .\mydockerfile-centos -t mycentos:1.0 .[+] Building 85.2s (8/8) FINISHED=> [internal] load build definition from mydockerfile-centos 0.1s=> => transferring dockerfile: 263B 0.0s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [internal] load metadata for docker.io/library/centos:latest 0.0s=> [1/4] FROM docker.io/library/centos 0.0s=> [2/4] WORKDIR /usr/local 0.0s=> [3/4] RUN yum -y install vim 81.9s=> [4/4] RUN yum -y install net-tools 2.7s=> exporting to image 0.4s=> => exporting layers 0.4s=> => writing image sha256:50693f31a71fbbe4c2a1f341752b9730304cbaca2fdca8dac22c0c13702fee1f 0.0s=> => naming to docker.io/library/mycentos:1.0
从上面代码的第三行开始就是它的构建日志。
得到这个镜像后,我们去运行它:
docker run -it mycentos:1.0
查看运行结果,发现我们直接进入了工作目录:
再检查一下 net-tools 是否被安装:
至此,我们构建了属于我们自己的centos镜像。
发布自己的镜像
发布到dockerhub
- 在 https://hub.docker.com/ 注册自己的账号
- 在自己的机器上登录,提交自己的镜像。先查看一下如何登录: ```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.
```powershelldocker login -u beiguoqutuikai
PS D:\temp\dockerfile> docker login -u beiguoqutuikaiPassword:Login Succeeded
提交命令:
docker push 登录名/镜像名:版本号
发布到阿里云
- 登录阿里云
- 找到容器镜像服务


- 创建命名空间
- 创建容器镜像
- 查看如何上传

- 登录成功后push到远程仓库
docker tag 50693f31a71f registry.cn-hangzhou.aliyuncs.com/dengjia/dj-test:1.0docker push registry.cn-hangzhou.aliyuncs.com/dengjia/dj-test:1.0

提交镜像文件到远程后,如果想拉取这个镜像,使用下面的命令:docker pull registry.cn-hangzhou.aliyuncs.com/dengjia/dj-test:[镜像版本号]
参考:
https://blog.csdn.net/qq_29999343/article/details/78318397
