当前位置: 首页 > news >正文

Docker基础之十一: 镜像操作(Dockerfile)

Docker镜像(Dockerfile)

对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者群组里面。

https://docs.docker.com/engine/reference/builder/

Docker可以通过Dockerfile的指令来编译Image,Dockerfile的主要好处是可以通过极少的空间来动态构建一个镜像,但是对国内用户而言,通常是比较通过的,因为下载国外的资源都比较慢。

1 Dockerfile 参考手册

1.1 如何使用

建立了Dockerfile之后,进入到所在目录,然后执行docker build.

通过-f选项,可以指定 Dockerfile:

$ docker build -f /path/to/a/Dockerfile .

通过-t选项可以为镜像添加一个tag:

$ docker build -t shykes/myapp .

build过程中,会一条一条的执行语句,比如:

$ docker build -t svendowideit/ambassador .
Sending build context to Docker daemon 15.36 kB
Step 0 : FROM alpine:3.2
 ---> 31f630c65071
Step 1 : MAINTAINER SvenDowideit@home.org.au
 ---> Using cache
 ---> 2a1c91448f5f
Step 2 : RUN apk update &&      apk add socat &&        rm -r /var/cache/
 ---> Using cache
 ---> 21ed6e7fbb73
Step 3 : CMD env | grep _TCP= | sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat -t 100000000 TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \& wait/' | sh
 ---> Using cache
 ---> 7ea8aef582cc
Successfully built 7ea8aef582cc

1.2 Dockerfile格式

# Comment
INSTRUCTION arguments

指令是不区分大小写的,不过一般都使用大写来区分指令和参数。Dockerfile的第一句指令,必须是'FROM',这个后面紧跟的是基础镜像名称。#可以用来注释。

1.3 环境变量替换指令

环境变量指令是ENV,这个类似于编程语言的变量,只能在Dockerfile中使用。例如:

FROM busybox
ENV foo /bar
WORKDIR ${foo}   # WORKDIR /bar
ADD . $foo       # ADD . /bar
COPY \$foo /quux # COPY $foo /quux

其中支持变量应用的指令包括:

ADD
COPY
ENV
EXPOSE
LABEL
USER
WORKDIR
VOLUME
STOPSIGNAL
ONBUILD

1.4 dockerignoe file

如果你的编译目录下有一些文件是不需要打包进Image的,你可以使用该文件进行过滤。重要涉及的指令是ADD和COPY。

1.5 FROM

FROM <image>

或者

FROM <image>:<tag>

或者

FROM <image>@<digest>

FROM指令指定了目标Image的基础镜像。tag是某个特定版本的镜像, digest是最新引入的一种ID,类似于唯一标示符。

1.6 MAINTAINER

MAINTAINER <name>

这个字段一目了然,就是设置作者。

1.7 RUN

RUN包含两种格式:

  • RUN (shell格式,这种命令运行在shell中 /bin/sh -c)
  • RUN ["executable", "arg1", "arg2"] (exec格式) RUN指令可以执行任何命令,并在当前image的顶层添加一个文件层,并提交到新的image中。由此我们可以看出,每一个RUN指令都会新加一层文件系统,虽然这个并不占多少空间,不过还是推荐尽可能多的减少指令。因此我们可以使用\来做换行处理。
    RUN /bin/bash -c 'source $HOME/.bashrc ;\
    echo $HOME'
    
    不换行形式:
    RUN /bin/bash -c 'source $HOME/.bashrc ; echo $HOME'
    
    exec模式:
    RUN apt-get dist-upgrade -y

相关文章:

  • ArrayBuffer简析
  • [macOS] Mojave10.14 夜神安卓模拟器启动问题
  • 老李分享:测试金字塔,懂开发的测试工程师更有竞争力
  • solidity智能合约[41]-structdeep
  • ElasticSearch 基础一
  • PPT图表分享一:组织结构图
  • 面向对象(Java中普通代码块,构造代码块,静态代码块区别及代码示例)
  • 内聚性是模块之所以成为模块的原因--一个中心、单一职责
  • ThreadPoolExecutor之一:使用基本介绍
  • HashMap 详解四
  • SQL 拆分含逗号字段
  • Confluence 6 空间
  • 静态Include和动态Include测试并总结
  • zookeeper入门及使用(二)- 状态查看
  • Meteor的表单提交:Form
  • 自己简单写的 事件订阅机制
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Docker: 容器互访的三种方式
  • IndexedDB
  • iOS 系统授权开发
  • Java编程基础24——递归练习
  • mongodb--安装和初步使用教程
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • php面试题 汇集2
  • python学习笔记 - ThreadLocal
  • SOFAMosn配置模型
  • SpriteKit 技巧之添加背景图片
  • Vim 折腾记
  • 编写高质量JavaScript代码之并发
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 动态规划入门(以爬楼梯为例)
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 王永庆:技术创新改变教育未来
  • 微信小程序--------语音识别(前端自己也能玩)
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​LeetCode解法汇总518. 零钱兑换 II
  • !!java web学习笔记(一到五)
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (02)vite环境变量配置
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (HAL库版)freeRTOS移植STMF103
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (七)c52学习之旅-中断
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (转)Android学习笔记 --- android任务栈和启动模式
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET Reactor简单使用教程
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值