DockerFile介绍
DockerFile到底是什么?
Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。
DockerFile的构建过程
- 创建dockerfile文件并写入脚本语言
- 通过
docker build
命令运行脚本文件形成镜像 docker run
命令运行我们这个镜像- 可以通过
docker push
命令将我们创建的镜像推送到Docker Hub
或阿里云镜像仓库
。
这是官方提供的centos的dockerfile文件
FROM scratch
ADD centos-8-x86_64.tar.xz /
LABEL org.label-schema.schema-version="1.0" org.label-schema.name="CentOS Base Image" org.label-schema.vendor="CentOS" org.label-schema.license="GPLv2" org.label-schema.build-date="20200809"
CMD ["/bin/bash"]
DockerFile的常用指令
FROM #基础镜像 centos/scratch
MAINTAINER #镜像创建者信息 姓名+邮箱
RUN #镜像构建时需要运行的命令
ADD #将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源
COPY #功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
WORKDIR #进入容器后的路径
VOLUME #挂载的目录
EXPOSE #暴露端口
CMD #构建容器后调用,也就是在容器启动时才进行调用
ENTRYPOINT # 配置容器,使其可执行化
LABEL #为镜像添加元数据
ENV #设置环境变量
CMD和ENTRYPOINT的区别与联系
相同点
- 用法相似,都可以指定shell或exec函数调用的方式执行命令;
- 当存在多个CMD指令或ENTRYPOINT指令时,只有最后一个生效
不同点
- 容器启动时,CMD指令指定的启动命令可以被docker run指定的命令覆盖,而ENTRYPOINT指令指定的启动命令不能被覆盖,而是将docker run指定的参数当做ENTRYPOINT指定命令的参数;
- CMD指令可以作为ENTRYPOINT指令的默认参数。

DockerFile实战
一、创建一个自己的centos
1、创建dockerfile文件并编写构建脚本
[root@izbp1edp201fgcgj4xb1trz dockerfile]# cat mycentos-dockerfile
FROM centos
MAINTAINER zhixin<2042551085@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "-----end-----"
CMD /bin/bash
2、通过这个文件构建镜像
docker build -f mycentos-dockerfile -t mycentos:0.1 .
此时通过docker images
命令我们可以看到镜像已经构建成功了

3、运行这个镜像并查看新添加的功能命令
docker run -it mycentos:0.1

这些都是在官方镜像的基础上添加的新功能,还可以通过docker history
命令来查看一个镜像的历史信息。
[root@izbp1edp201fgcgj4xb1trz ~]# docker history 21cf55f079dd
IMAGE CREATED CREATED BY SIZE COMMENT
21cf55f079dd 21 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin… 0B
4b7bd63c2862 21 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
761886d154c1 21 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
70e7afbbd5d5 21 minutes ago /bin/sh -c #(nop) EXPOSE 80 0B
6205a00dbc93 21 minutes ago /bin/sh -c yum -y install net-tools 14.3MB
b5abf48c5031 22 minutes ago /bin/sh -c yum -y install vim 57.2MB
1df72aed490c 22 minutes ago /bin/sh -c #(nop) WORKDIR /usr/local 0B
6844bea962b3 22 minutes ago /bin/sh -c #(nop) ENV MYPATH=/usr/local 0B
7524c78a75cb 22 minutes ago /bin/sh -c #(nop) MAINTAINER zhixin<2042551… 0B
831691599b88 4 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 4 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 4 months ago /bin/sh -c #(nop) ADD file:84700c11fcc969ac0… 215MB
4、将镜像上传到阿里云镜像厂库
# 1、登录远程厂库
$ sudo docker login --username=是鹿白川呀 registry.cn-hangzhou.aliyuncs.com
# 2、将镜像推送到Registry
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/speeding_docker/docker:[镜像版本号]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/speeding_docker/docker:[镜像版本号]
具体可以根据自己阿里云服务器的描述进行操作
镜像容器服务操作地址
