前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Dockerfile命令(上)

Dockerfile命令(上)

作者头像
清风穆云
发布2021-08-09 11:30:40
发布2021-08-09 11:30:40
35400
代码可运行
举报
文章被收录于专栏:QA一隅QA一隅
运行总次数:0
代码可运行

Dockerfile简介

  • Dockerfile 是一个文本文件,其内包含了一条条的指令Instruction,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
  • 我们可以使用Dockerfile定制镜像,镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。

Dockerfile制作

这里我们以制作nginx镜像为例子,首先我们创建一个自定义nginx目录,然后创建Dockerfile文件。

代码语言:javascript
代码运行次数:0
复制
mkdir mynginx 
cd mynginx 
touch Dockerfile

然后在Dockerfile进行编辑,替换原始的nginx页面内容

代码语言:javascript
代码运行次数:0
复制
FROM nginx 
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

关于上面中的命令FROMRUN 后面我们会进行详细讲解。

编译Dockerfile

代码语言:javascript
代码运行次数:0
复制
mgtv@ubuntu:~/mynginx$ sudo docker build -t nginx:V1 .
[sudo] password for mgtv: 
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM nginx
 ---> 62f816a209e6
Step 2/2 : RUN echo '<h1>hello,Dcoker!</h1>' >  /usr/share/nginx/html/index.html
 ---> Running in 24c99f45946b
Removing intermediate container 24c99f45946b
 ---> 2010f87c2c59
Successfully built 2010f87c2c59
Successfully tagged nginx:V1
  • -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
  • 最后的.号,其实是在指定镜像构建过程中的上下文环境的目录

查看制作好的ngnix镜像

代码语言:javascript
代码运行次数:0
复制
mgtv@ubuntu:~/mynginx$ sudo docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
nginx                V1                  2010f87c2c59        2 minutes ago       109MB
ubuntu               latest              4c108a37151f        3 weeks ago         64.2MB

运行新的镜像,打开地址:ip:8081即可看到最新修改之后的效果

代码语言:javascript
代码运行次数:0
复制
sudo docker run --name ngnix_v1 -d -p 8081:80 nginx:V1

Dockerfile 命令

FROM 指定基础镜像

所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。就像我们之前运行 了一个 nginx 镜像的容器,再进行修改一样,基础镜像是必须指定的。而 FROM 就是指定基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并 且必须是第一条指令。

代码语言:javascript
代码运行次数:0
复制
FROM nginx

Docker 还存在一个特殊的镜像,名为 scratch 。这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像。

代码语言:javascript
代码运行次数:0
复制
FROM scratch

MAINTAINER 设置镜像作者

我们设置了镜像的作者后,可以通过 docker inspect 命令查看镜像的信息,里面包含有作者信息。

命令格式如下:

代码语言:javascript
代码运行次数:0
复制
MAINTAINER  <name>

例如我们创建Dockerfile内容如下:

代码语言:javascript
代码运行次数:0
复制
FROM nginx
MAINTAINER sutune@qq.com

编译之后查看镜像信息

代码语言:javascript
代码运行次数:0
复制
docker@default:~/mynginx$ docker build -t nginx:sutune . #编译镜像
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM nginx
 ---> 98ebf73aba75
Step 2/2 : MAINTAINER sutune@qq.com
 ---> Running in 23ebc293468b
Removing intermediate container 23ebc293468b
 ---> 4aaf6df34e72
Successfully built 4aaf6df34e72
Successfully tagged nginx:sutune
docker@default:~/mynginx$ docker inspect nginx:sutune #查看镜像信息

返回内容会比较多,我们截取部分查看,从返回的内容中找到Author对应的值,我们可以看到设置的作者信息已经生效。

代码语言:javascript
代码运行次数:0
复制
"DockerVersion": "18.06.1-ce",
"Author": "sutune@qq.com",
        

LABEL 镜像标签

用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看,命令格式如下:

代码语言:javascript
代码运行次数:0
复制
LABEL <key>=<value> <key>=<value> <key>=<value> ...
LABEL version="1.0" description="nginx服务定制"  #示例

使用LABEL指定元数据时,一条LABEL指定可以指定一或多条元数据,指定多条元数据时不同元数据之间通过空格分隔。推荐将所有的元数据通过一条LABEL指令指定,以免生成过多的中间镜像。

RUN

RUN 指令是用来执行命令行命令的。由于命令行的强大能力, RUN 指令在定制 镜像时是最常用的指令之一。其格式有两种:

  • shell 格式: RUN <命令> ,就像直接在命令行中输入的命令一样。刚才写的 Dockrfile 中的 RUN 指令就是这种格式。
代码语言:javascript
代码运行次数:0
复制
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
  • exec 格式: RUN ["可执行文件", "参数1", "参数2"] ,这更像是函数调用中 的格式。
  • 如果需要执行多个命令可以使用&&将命令串联起来,
代码语言:javascript
代码运行次数:0
复制
FROM debian:jessie
RUN buildDeps='gcc libc6-dev make' \
&& apt-get update \
&& apt-get install -y $buildDeps \
&& wget -O redis.tar.gz "http://download.redis.io/releases/r
edis-3.2.5.tar.gz" \
&& mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-component
s=1 \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps

命令的最后--auto-remove $buildDeps添加了清理工作的命令,删除了为了编译构建 所需要的软件,清理了所有下载、展开的文件,并且还清理了 apt 缓存文件。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 QA一隅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Dockerfile简介
  • Dockerfile制作
  • Dockerfile 命令
    • FROM 指定基础镜像
    • MAINTAINER 设置镜像作者
    • LABEL 镜像标签
    • RUN
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档