Dockerfile使用教程

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

一、什么是Dockerfile

Dockerfile是创建自定义Docker镜像的描述文件,我们可以在Dockerfile中写出一条条指令来控制镜像需要执行什么操作,下面具体讲讲Dockerfile中的指令。

二、Dockerfile四大功能分区

1. 基础镜像

声明自定义镜像的基础镜像

FROM centos

2. 描述信息

此处可以声明镜像的负责人、版本、构建时间、描述等一系列信息,此处可以声明任何信息

LABEL maintainer=tingtiandadi@360.cn
LABEL version="1.0"
LABEL date="2020/03/08"
LABEL description="RPM软件包制作"

3. 安装镜像执行指令

3.1 USER

执行Dockerfile中shell指令时指定的用户,包括:RUN、CMD、ENTRYPOINT

USER <user>[:<usergroup>]
USER root

3.2 EXPOSE

指定容器运行时的服务端口

EXPOSE 80 443

3.3 WORKDIR

为Dockerfile中执行的指令设置工作目录,包括:ADD、COPY、RUN、CMD、ENTRYPOINT

WORKDIR /root

3.4 ADD

拷贝文件/目录到镜像中

ADD <src>...<dest>
ADD rpmbuild.tar.gz /root/
ADD https://xxx.com/rpmbuild.tar.gz /root/

3.5 COPY

拷贝文件/目录到镜像中,用法与ADD相同,但是不支持自动下载和解压

ADD /home/mysql_cron /etc/cron.d/

3.6 VOLUME

把主机的目录挂载到docker中,类似nfs文件共享,一般很少用,大多在docker run中用-v来进行挂载

VOLUME ["/usr/local/"]

3.7 ARG

在构建镜像时指定的参数

ARG user
USER $user

只需要在docker build时带上user参数即可

docker build --build-arg user=root -f dockerfile_rpmbuild .

3.8 RUN

构建镜像时运行的指令

RUN ["yum", "install", "net-tools", "-y"]
RUN yum install net-tools -y

3.9 ENV

设置当前系统内环境变量

ENV JAVA_HOME /usr/local/jdk1.8.0_231

3.10 HEALTHCHECK

检查容器是否在仍在工作

HEALTHCHECK --interval=5m --timeout=3s --retries=3 \
    CMD curl -f http:/localhost/ || exit 1
  • 选项说明:
    --interval=DURATION (default: 30s):每隔多长时间探测一次,默认30秒

-- timeout= DURATION (default: 30s):服务响应超时时长,默认30秒
--start-period= DURATION (default: 0s):服务启动多久后开始探测,默认0秒
--retries=N (default: 3):认为检测失败几次为宕机,默认3次

  • 返回值说明:
    0:容器成功是健康的,随时可以使用

1:不健康的容器无法正常工作
2:保留不使用此退出代码

4. 容器启动执行指令

4.1 CMD方式

可以编辑多条,每条指令按顺序执行。

CMD ["-C", "/start.sh"] 
CMD ["/usr/sbin/sshd", "-D"] 
CMD /usr/sbin/sshd -D

4.2 ENTRYPOINT方式

同CMD类似,但这种方式执行的命令不会被docker run执行的参数所覆盖,同时docker run执行的参数会传到此方式执行的脚本中。

ENTRYPOINT [ "rpmbuild", "-bb" , "/root/rpmbuild/SPEC/mysql-install.spec"]
ENTRYPOINT [ "dpkg", "-b", "mysql-install", "mysql-install.deb"]

重要提示:ENTRYPOINT可以有多行,但是执行时只有最后一行生效,切记!

三、Dockerfile实例

# 基础镜像
FROM centos

# 描述信息
LABEL maintainer=tingtiandadi@360.cn
LABEL version="1.0"
LABEL date="2020/03/08"
LABEL description="RPM软件包制作"

# 安装镜像执行指令
WORKDIR /root
USER root

RUN rpm -ivh net-tools-2.0-0.51.20160912git.el8.x86_64.rpm
RUN yum install rpm-build-4.14.2-25.el8.x86_64 -y

# 启动容器执行指令
ENTRYPOINT [ "rpmbuild", "-bb", "rpmbuild/SPEC/*.spec"]
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
缓存 安全 Docker
《Docker 简易速速上手小册》第3章 Dockerfile 与镜像构建(2024 最新版)
《Docker 简易速速上手小册》第3章 Dockerfile 与镜像构建(2024 最新版)
102 0
|
存储 安全 Linux
Docker 离线安装与基本使用
Docker 离线安装与基本使用
2100 0
Docker 离线安装与基本使用
|
4月前
|
缓存 Shell Go
dockerfile笔记
dockerfile笔记
65 0
|
23天前
|
Ubuntu Shell Linux
docker快速入门教程
docker快速入门教程
59 0
|
9月前
docker-compose使用教程
docker-compose使用教程
67 0
|
11月前
|
应用服务中间件 Linux Docker
[笔记]docker入门《一》环境安装
[笔记]docker入门《一》环境安装
|
网络协议 Shell Docker
docker compose详细使用教程
docker compose详细使用教程
783 0
|
关系型数据库 MySQL 数据库
探索Chevereto图床:使用Docker Compose快速搭建个人图床
家人们!图片在今天的社交媒体、博客和论坛中扮演着至关重要的角色。然而,随着图片数量的增加,寻找一个可靠的图片托管解决方案变得越来越重要。Chevereto图床是一个备受赞誉的解决方案,而使用Docker Compose搭建它更是一种高效、可维护的方法。本文将介绍Chevereto图床的优势,并指导您如何使用Docker Compose在短时间内搭建自己的图片托管平台。
722 0
探索Chevereto图床:使用Docker Compose快速搭建个人图床
|
Linux 测试技术 Docker
分享一些Dockerfile新手会遇到的坑
分享一些Dockerfile新手会遇到的坑
|
Docker 容器
Dockerfile笔记
照着写就行
107 0
Dockerfile笔记