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

简介: Docker镜像(Dockerfile) https://docs.docker.com/engine/reference/builder/ Docker可以通过Dockerfile的指令来编译Image,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
目录
相关文章
|
1月前
|
Docker 容器 Perl
云效flow构建docker镜像更换apt源为阿里镜像源
在 Dockerfile 中添加命令以更换 Debian 源为阿里云镜像,加速容器内软件包下载。核心命令通过 `sed` 实现源地址替换,并更新 apt 软件源。其中 `cat` 命令用于验证替换是否成功,实际使用中可删除该行。
243 32
|
13天前
|
缓存 Shell 网络安全
将应用程序打包成Docker镜像时可能遇到哪些问题?
将应用程序打包成Docker镜像时可能遇到哪些问题?
155 77
|
20天前
|
Shell 应用服务中间件 nginx
docker 镜像的部分常用命令
docker镜像常用命令
59 16
|
22天前
|
关系型数据库 MySQL Docker
|
1月前
|
Ubuntu Linux 网络安全
Ubuntu Docker镜像:支持systemctl、SSH、VNC
总的来说,创建一个支持systemctl、SSH和VNC的Ubuntu Docker镜像需要一些技术知识,但是通过学习和实践,我们可以掌握这些技术。这将使我们能够更有效地使用Docker,更好地管理我们的应用程序和服务。CentOS系统中的日志文件位置和管理
77 17
|
1月前
|
Ubuntu 安全 网络安全
Docker镜像:Ubuntu支持systemctl、SSH和VNC
总的来说,Docker提供了一个灵活且强大的方式来创建和运行自定义的Ubuntu镜像。通过理解和使用Dockerfile,你可以轻松地创建一个支持systemctl、SSH和VNC的Ubuntu镜像。
139 21
|
NoSQL 关系型数据库 MySQL
Docker基础使用教程,零基础一小时入门
Docker基础知识总结,一文让你读懂Docker是什么
216 0
Docker基础使用教程,零基础一小时入门
|
Ubuntu Shell Docker
Docker基础之四: Docker入门
Docker入门 首先我们检查docker是否安装成功: root@gctest:~# docker info Containers: 3 Images: 18 Server Version: 1.9.0 Storage Driver: aufs Root Dir: /var/lib
13295 2
|
Ubuntu Linux Docker
docker基础入门之二
一、docker文件系统:   linuxFS包括boot file system 和 root file system   boot file system (bootfs),包含bootloader和kernel,在系统启动完成后,kernel滞留内存,bootfs解除挂载;   root...
1182 0