Dockerfile实现容器镜像的自定义及生成

2023-05-16

一.Dockerfile介绍

Dockerfile是一种能够被Docker程序解释的剧本。Dockerfile由一条一条指令组成,并且有自己的书写格式和支持的命令。当我们需要在容器镜像中指定自己额外的需求时,只需要在Dockerfile上添加和修改指令,然后通过docker build生成我们自定义的容器镜像(image)

二.Dockerfile指令

1.构建类指令

用于构建image,其指定的操作不会在运行image的容器上运行

FROM MAINTAINER RUN ENV ADD COPY

2. 设置类指令

用于设置image的属性,其指定的指令将在运行的image的容器中执行

CMD ENTRYPOINT USER VOLUME WORKDIR ONBUILD EXPOSE

指令说明

 1.FROM

FROM <image>:<tag>
如FROM centos:latest

2.RUN

RUN指令用于构建镜像中执行命令,有以下两种格式

shell格式

RUN <命令>
如 RUN echo 'kunkun' > /var/www/html/index.html

exec格式

RUN ["可执行文件","参数1","参数2"]
如 RUN ["/bin/bash","-C","echo kubkub > /var/www/html/index.html"]

注意:如果有多条RUN指令,应该用&&连接,方便查看

 3.CMD

CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时索要执行的命令
格式有三种

CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2

一个在物理机中执行,一个在容器中执行

每个Dockerfile只能有一条CMD指令,如果有多条CMD指令,只有最后一条会被执行;

如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令

什么是启动容器时指定运行的命令

docker run -d -p 80:80 镜像名 运行的命令

4.EXPOSE

EXPOSE指令用于指定容器在运行时监听的端口

EXPOSE <port> [<port> ....]
如 EXPOSE 80 3306 8080

上述运行的端口还需要使用docker run运行容器时通过 -p 映射到宿主机的端口

5.ENV

ENV指令用于指定一个环境变量

格式:ENV <key> <value> 或者 ENV <key>=<value>
例: ENV JAVA_HOME /usr/local/jdkxxx/

6.ADD

ADD指令用于把宿主机上的文件拷贝到镜像中

ADD <src> <dest>
<src> 可以是本地文件或本地压缩文件吗,也可以是一个url
<dest>路径填写可以是容器内的绝对路径,也可以是相对于工作路径的相对路径

7.COPY

COPY指令与ADD指令类似,但COPY的源文件只能是本地文件

COPY <src> <dest>

8.ENTRYPOINT

ENTRYPOINT和CMD非常类似

相同点:一个Dockerfile只写一条,如果写了多条,只有最后一条生效;

都是容器启动时才运行

不同点:如果用户启动容器时候指定了运行命令,ENTRYPOINT不会被运行的命令覆盖而CMD会被覆盖

ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1 param2

9.VOLUME

VOLUME指令用于把宿主机里的目录与容器里的目录映射

只指定挂载点,docker宿主机映射的目录为自动生成的

VOLUME ["<mountpoint>"]

10.USER

USER指令设置启动容器的用户(像hadoop需要hadoop用户操作,oracle需要oracle用户操作),可以是用户名或UID

USER daemon
如USER 1001

11.WORKDIR

WORKDIR指令设置工作目录,类似与cd命令。不建议使用 RUN cd /root ,建议使用WORKDIR

WORKDIR /root

三.Dockerfile基本构成

基础镜像信息:如 centos:latest

维护者信息:出问题了该找谁

镜像操作指令:在容器中执行的命令,通常为linux的操作命令

容器启动时执行指令:如CMD

1.Dockerfile生成容器镜像方法

 

 拿到Dokerfile文件后,先build生成image,然后用run根据image生成容器

2.使用dockerfile生成容器镜像案例

第一步:创建一个文件夹

第二步:在文件夹中创建Dockerfile文件及其他文件

第三步:使用docker build命令构建镜像

第四步:使用构建的镜像启动容器

以Dockerfile生成Nginx容器镜像为例

mkdir nginxroot
cd nginxroot
echo "nginx's running" > index.html
vim Dockerfile

Dockerfile文件中的内容 

注意:#先下载wget再使用

FROM centos:centos7

MAINTAINER "www.kubemsb.com"
#先安装wget再使用
RUN yum -y install wget

RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

RUN yum -y install nginx

ADD index.html /usr/share/nginx/html/
#给容器一个进程,使容器处于运行状态
RUN echo "daemon off;" >> /etc/nginx/nginx.conf

EXPOSE 80
#启动nginx
CMD /usr/sbin/nginx

根据Dockerfile生成文件

docker build -t centos7-nginx:v1 .

注意: 如果文件名字不为Dockerfile则命令结尾的 . 应该换成 -f 来指定文件

 根据镜像生成容器

docker run -p 10002:80 -d centos7-nginx:v1

然后就可以访问物理机的10002端口来进行访问容器

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dockerfile实现容器镜像的自定义及生成 的相关文章

  • jsoncpp linux平台编译和arm移植

    0x00 下载 http sourceforge net projects jsoncpp 或者 http download csdn net detail chinaeran 8631141 0x01 Linux平台编译 安装 scons
  • 摩斯密码解码脚本

    摩斯密码解码脚本 解题思路 0010 0100 01 110 1111011 11 11111 010 000 0 001101 1010 111 100 0 001101 01111 000 001101 00 10 1 0 010 0
  • php匹配关键字并跳转页面

    php匹配关键字跳转页面 strstr函数搜索要从目标字符串中搜索的字符串 xff1b strstr函数仅用于检查字符串是否存在 xff1b strstr函数的用法如下 lt php b 61 39 or 39 name 61 GET 39
  • docker常见命令小结

    docker常见命令小结 常见命令 docker ps 查看正在运行的容器 docker exec it 264bb068855e bin bash 进入容器 xff0c 并作出修改 docker commit 3bd0eef03413 l
  • 前端html文件下载,同源与异源下载

    属性说明download下载的资源的名称target打开该连接的方式 self blank href资源的地址 本地 远程地址 a标签跳转 lt DOCTYPE html gt lt html gt lt head gt lt meta c
  • Python图像(字母数字)识别

    本文只针对数字或字母验证码识别 准备工具 tesseract ocr w64 setup v4 1 0 20190314 exepip install pytesseractpip install pillow中文包 tesseract o
  • Python习题

    1 题目 xff1a 编写一个程序 xff0c 使用for循环输出0 10之间的整数 xff1b 代码 xff1a span class token keyword for span i span class token keyword i
  • 面向对象模块和包

    文章目录 1 1 模块1 2 模块的使用2 包 1 1 模块 参考链接 xff1a Python 面向对象 模块和包 来源 xff1a CSDN Python面向对象 模块和包 来源 xff1a CSDN 概念 xff1a 每一个以py为拓
  • SUNDIALS库的编译和使用

    SUNDIALS库的编译和使用 1 简介 SUNDIALS SUite of Nonlinear and DIfferential ALgebraic equation Solvers 是由美国劳伦斯利福摩尔国立实验室 xff08 Lawr
  • 【ing】在Linux虚拟机上安装Sundials库(图文)

    1 Sundials库下载 Sundials下载地址 2 具体步骤 2 1 下载sundials 2 2 0 本次尝试选择sundials 2 2 0进行安装 Sundials文件内容如下 xff1a 2 2 创建安装目录 安装目录名称为
  • 基于docker部署Prometheus

    文章目录 基于Docker搭建Prometheusgitee 介绍Prometheus一 安装运行Prometheus docker版 部署Prometheus1 安装docker联网状态下阿里云离线安装包下载2 下载镜像包3 启动node
  • 程序设计思维与实践 Week11 作业 E 选做题11-1 东东与 ATM

    题目描述 xff1a 一家银行计划安装一台用于提取现金的机器 机器能够按要求的现金量发送适当的账单 机器使用正好N种不同的面额钞票 xff0c 例如D k xff0c k 61 1 2 N xff0c 并且对于每种面额D k xff0c 机
  • kubectl edit

    文章目录 kubectl edit官方文档语法示例 kubectl edit 官方文档 使用默认编辑器 编辑服务器上定义的资源 使用命令行工具获取的任何资源都可以使用edit命令编辑 edit命令会打开使用KUBE EDITOR xff0c
  • kubectl exec

    文章目录 kubectl exec通过bash获得pod中某个容器的TTY xff0c 相当于登录容器 命令行 创建一个test文件 xff1a kubectl exec exec命令同样类似于docker的exec命令 xff0c 为在一
  • kubectl describe

    文章目录 describe语法选项 示例描述一个node详细信息描述一个pod描述calico yaml中的资源类型和名称指定的pod描述所有的pod描述所有包含label k8s app 61 calico kube controller
  • k8s自动化安装脚本(kubeadm-1.21.1)

    文章目录 介绍软件架构安装教程更新内容2023 02 102022 10 202022 08 06准备部署包 操作步骤环境准备结构备注 解压部署包修改host文件初始化环境验证ansible配置 安装k8s集群登录master的节点添加no
  • Shell——docker启动yapi

    文章目录 脚本简介脚本注解执行方式脚本内容 脚本简介 基于运维统一脚本中 17 平台管理下的Yapi管理平台部署系统版本Centos7docker环境 脚本注解 该脚本快速部署yapi平台 xff0c 已通过docker commit把对应
  • Shell——查看基础信息脚本

    文章目录 脚本简介脚本注解安装方式执行方式执行结果 脚本内容新版本旧版本 脚本简介 基于运维统一脚本中 xff0c 19 脚本安装下的检查服务器脚本安装使用yum安装 yum仓库 xff0c 系统版本Centos7 脚本注解 该脚本为了快速
  • k8s自动化安装脚本(kubeadm-1.23.7)

    文章目录 介绍软件架构版本介绍更新内容2023 02 192023 02 152023 02 142023 02 102022 10 202022 08 06准备部署包 操作步骤环境准备结构备注 解压部署包修改host文件脚本使用方式初始化
  • 在VS code中打开网页预览

    在VS code中打开网页预览 在平时进行前端设计的时候 xff0c 你是否会因为无法实时观察到网页的变化而苦恼 xff0c 每一次都要重新打开html文件的过程过于繁琐 xff0c 现在就有一种新的方式能够让你在coding的时候实时观察

随机推荐