Docker 入门私人笔记(六)使用 Dockerfile 自动构建镜像

1. 什么是 dockerfile ?

Dockerfile 是一个用来实现自动构建镜像的文本文件,它包含一些固定的参数,当定义好参数的值,就可以使用它自动构建你想要的镜像。

包含四要素:

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行指令

dockerfile 参数解释:

  • FROM
    准备基于哪个镜像构建新镜像
  • MAINTAINER
    镜像维护者信息,例如姓名或邮箱
  • RUN
    构建镜像时运行的指令
  • VOLUME
    指定容器挂载点
  • USER
    为RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户
  • WORKDIR
    设置 dockerfile 的工作目录,dockerfile 定义的指令都基于这个目录工作,默认为 dockerfile 所在的路径
  • HEALTHCHECH
    健康检查
  • ARG
    构建镜像时自定义的一些参数
  • EXPOSE
    声明容器对外的服务端口
  • ENV
    设置容器的环境变量
  • ADD
    从宿主机拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压
  • COPY
    从宿主机拷贝文件或目录到容器中,类似ADD,但无法自动下载或解压的功能
  • ENTRYPOINT
    运行容器时执行的shell命令
  • CMD
    容器启动后要干的事情

2. 尝试编写一个 Dockerfile

2.1 创建一个目录存放 dockerfile

mkdir /data/dockerfile/mynginx

2.2 编辑 dockerfile

如下示例中的操作,是使用 centos 作为基础镜像,在系统内用 yum 的方式安装 nginx。使用该镜像运行的容器,启动之后直接运行 nginx。

编辑 dockerfile,使用命令:vim Dockerfile
注意:首字母 D 大写是硬性规矩,必须遵守!

Dockerfile 文件内容如下:

#Base Image 指定基础镜像。一个dockerfile 的第一个指令必须是 FROM!
FROM centos

#Maintainer 镜像维护者的信息:关键字 MAINTAINER [维护者姓名] [维护者邮箱]
MAINTAINER lu 13510182959@126.com

#RUN 想让该镜像做什么
#RUN 后面跟的是制作容器镜像时运行的命令
#ADD 后面分别跟两个参数,宿主机文件和镜像中的文件。即从宿主机复制一个文件到镜像中。本示例中给出的 “/usr/share/nginx/html/index.html” 是 yum 方式安装 nginx 的 index 默认路径。
#EXPOSE 是容器对外的端口
#CMD 是使用该镜像启动的容器要运行的命令
RUN rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum install -y nginx --enablerepo=epel
RUN yum clean all
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
ADD index.html /usr/share/nginx/html/index.html
EXPOSE 80
CMD ["nginx"]

image.png

3. 使用 Dockerfile 构建一个镜像

docker build -t mynginx:v2 .

命令解释:

  • -t 是打标签。
  • 命令最后面的点 . 是指要在当前目录下找 Dockerfile。

提示构建成功后,使用命令 docker images 查看镜像,出现名为 mynginx:v2 的镜像:
image.png

4. 使用新构建的镜像启动一个容器

docker run -d -p 99:80 --name mynginx-auto mynginx:v2

docker 创建成功后访问宿主机 99 端口,页面如果显示“nginx in docker”则说明前面的操作均正确。
image.png

终身学习,向上生长~

7 声望
5 粉丝
0 条评论
推荐阅读
K8S 笔记 - Pod 的 DNS 策略中的“坑”
ClusterFirst: 与配置的集群域后缀不匹配的任何 DNS 查询(例如 "www.kubernetes.io") 都将转发到从节点继承的上游名称服务器。集群管理员可能配置了额外的存根域和上游 DNS 服务器。

逆熵流1阅读 460

使用kubeasz部署高可用kubernetes集群
本实验采用kubeasz作为kubernetes环境部署工具,它是一个基于二进制方式部署和利用ansible-playbook实现自动化来快速部署高可用kubernetes集群的工具,详细介绍请查看kubeasz官方。本实验用到的所有虚拟机默认软...

李朝阳4阅读 786

制作容器镜像的最佳实践
这篇文章主要是我日常工作中的制作镜像的实践, 同时结合我学习到的关于镜像制作的相关文章总结出来的. 包括通用的容器最佳实践, java, nginx, python 容器最佳实践. 最佳实践的目的一方面保证镜像是可复用的, 提...

东风微鸣云原生2阅读 643

K8S 生态周报| containerd 存在 bug 会导致 Pod 被重启,建议升级
这是 2023 年的第一篇『K8S 生态周报』,在上个月的月中之后我因为阳了就停止更新了,一直在修养身体。生病相关的内容我在上一篇文章 张晋涛:我的 2022 总结 | MoeLove有做介绍。愿大家都注意身体,保持健康。

张晋涛1阅读 741

封面图
容器在公有云上的落地姿势
容器(container),并不是一种虚拟化(virtualization)技术,而是一种进程隔离(isolation)技术,从内核空间、资源和安全等方面对进程做隔离。

亚马逊云开发者1阅读 470

封面图
Cert Manager 申请SSL证书流程及相关概念-三
Issuers 和 ClusterIssuers 是 Kubernetes CRD,代表证书颁发机构(CA),能够通过兑现证书签名请求来生成签名证书。所有 cert-manager 证书都需要一个被引用的签发者,该签发者处于准备就绪的状态,可以尝试兑现...

东风微鸣云原生阅读 1.3k

使用 Bitnami Helm 安装 Kafka
服务器端 K3S 上部署 Kafka ServerKafka 安装📚️ Quote:charts/bitnami/kafka at master · bitnami/charts (github.com)输入如下命令添加 Helm 仓库: {代码...} 🔥 Tip:tkemarket 镜像没有及时更新,建议使用 bitn...

东风微鸣云原生阅读 1.3k

终身学习,向上生长~

7 声望
5 粉丝
宣传栏