Docker的Dockerfile脚本基本使用指南
发布时间:2022-11-04 12:42:28
这篇文章主要介绍了Docker的Dockerfile脚本基本使用指南,Docker是当下最火爆的容器集群技术,需要的朋友可以参考下
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。
Dockerfile 语法
在我们深入讨论Dockerfile之前,让我们快速过一下Dockerfile的语法和它们的意义。
什么是语法?
非常简单,在编程中,语法意味着一个调用命令,输入参数去让应用执行程序的文法结构。这些语法被规则或明或暗的约束。程序员遵循语法规范以和计算机 交互。如果一段程序语法不正确,计算机将无法识别。Dockerfile使用简单的,清楚的和干净的语法结构,极为易于使用。这些语法可以自我释义,支持注释。
Dockerfile 语法示例
Dockerfile语法由两部分构成,注释和命令+参数
一个简单的例子:
复制代码代码如下:
# Print "Hello docker!"
RUN echo "Hello docker!"
Dockerfile 命令
Dockerfile有十几条命令可用于构建镜像,下文将简略介绍这些命令。
FROM 命令
复制代码代码如下:
FROM
RUN 命令
RUN命令会在上面FROM指定的镜像里执行任何命令,然后提交(commit)结果,提交的镜像会在后面继续用到。
两种格式:
复制代码代码如下:
RUN(the command is run in a shell - `/bin/sh -c`)
或:
复制代码代码如下:
RUN ["executable", "param1", "param2" ... ] (exec form)
RUN命令等价于:
复制代码代码如下:
docker run image command
docker commit container_id
注释
使用 # 作为注释
如:
复制代码代码如下:
# Memcached
#
# VERSION 1.0
# use the ubuntu base image provided by dotCloud
FROM ubuntu
# make sure the package repository is up to date
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update
# install memcached
RUN apt-get install -y memcached
MAINTAINER 命令
MAINTAINER
ENTRYPOINT 命令
有两种语法格式,一种就是上面的(shell方式):
复制代码代码如下:
ENTRYPOINT cmd param1 param2 ...
第二种是 exec 格式:
复制代码代码如下:
ENTRYPOINT ["cmd", "param1", "param2"...]
如:
复制代码代码如下:
ENTRYPOINT ["echo", "Whale you be my container"]
ENTRYPOINT 命令设置在容器启动时执行命令
复制代码代码如下:
root@tankywoo-docker:~# cat Dockerfile
FROM ubuntu
ENTRYPOINT echo "Welcome!"
root@tankywoo-docker:~# docker run 62fda5e450d5
Welcome!
USER 命令
比如指定 memcached 的运行用户,可以使用上面的 ENTRYPOINT 来实现:
复制代码代码如下:
ENTRYPOINT ["memcached", "-u", "daemon"]
更好的方式是:
复制代码代码如下:
ENTRYPOINT ["memcached"]
USER daemon
EXPOSE 命令
EXPOSE 命令可以设置一个端口在运行的镜像中暴露在外
复制代码代码如下:
EXPOSE
# use the ubuntu base image provided by dotCloud
FROM ubuntu
MAINTAINER Victor Coisne victor.coisne@dotcloud.com
# make sure the package repository is up to date
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update
# install memcached
RUN apt-get install -y memcached
# Launch memcached when launching the container
ENTRYPOINT ["memcached"]
# run memcached as the daemon user
USER daemon
# expose memcached port
EXPOSE 11211
上面是官方例子,国内建议换成163或sohu的源,不然太慢了。
复制代码代码如下:
root@tankywoo-docker:~# docker build -t tankywoo - < dck [38/480]
Uploading context 2.56 kB
Uploading context
Step 0 : FROM ubuntu
---> 99ec81b80c55
Step 1 : MAINTAINER Victor Coisne victor.coisne@dotcloud.com
---> Using cache
---> 2b58110877f6
Step 2 : RUN echo "deb http://mirrors.163.com/ubuntu/ precise main restricted universe multiverse" > /etc/apt/sources.list
---> Running in f55a4a8bb069
---> d48c6a965398
Step 3 : RUN apt-get update
---> Running in da091a1dd6e7
Ign http://mirrors.163.com precise InRelease
Get:1 http://mirrors.163.com precise Release.gpg [198 B]
....
Processing triggers for libc-bin (2.19-0ubuntu6) ...
Processing triggers for ureadahead (0.100.0-16) ...
---> 2886671b5b86
Step 5 : ENTRYPOINT ["memcached"]
---> Running in e8aeeab92cb6
---> 7148293a4053
Step 6 : USER daemon
---> Running in 288766b19606
---> 235e7f630ffa
Step 7 : EXPOSE 11211
---> Running in c6f881b9d51f
---> 666c5d65f396
Successfully built 666c5d65f396
Removing intermediate container f55a4a8bb069
Removing intermediate container da091a1dd6e7
Removing intermediate container f23631d3d45a
Removing intermediate container e8aeeab92cb6
Removing intermediate container 288766b19606
Removing intermediate container c6f881b9d51f
ENV 命令
用于设置环境变量
复制代码代码如下:
ENV
ADD 命令
从src复制文件到container的dest路径:
复制代码代码如下:
ADD
WORKDIR 命令
复制代码代码如下:
WORKDIR /path/to/workdir
配置RUN, CMD, ENTRYPOINT 命令设置当前工作路径
可以设置多次,如果是相对路径,则相对前一个 WORKDIR 命令
比如:
复制代码代码如下:
WORKDIR /a WORKDIR b WORKDIR c RUN pwd
其实是在 /a/b/c 下执行 pwd
CMD 命令
有三种格式:
复制代码代码如下:
CMD ["executable","param1","param2"] (like an exec, preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (as a shell)
一个Dockerfile里只能有一个CMD,如果有多个,只有最后一个生效。


猜你喜欢
- 最新Win10系统升级官方ISO下载工具下载,该工具可用于在线升级Windows10以及下载Win10 TH2(首个重大更新)最新版ISO镜
- 5月24日,苹果正式关闭了iOS 12.2验证通道,这意味着你不再可能从iOS 12.4 Beta、12.3降级到iOS 12.2及以前的i
- 通过设置允许拖放式文字编辑功能,用户可以在Word2010文档中使用鼠标拖动选中文字,以实现移动、复制等文字编辑功能通过设置允许拖放式文字编
- 在使用Word表格时经常会出现Word表格的右侧或左侧甚至是左右框线均出界的情况(即:表格的左右框线出现在纸张的边距以外的灰色部分),该如何
- 当你用wps表格录入大量的数据后,录入了重复的数字,怎样把它们找出来呢?小编整理了一下在wps表格中怎么查找重复数字的方法,需要的小伙伴了解
- 将Word中表格转换为图片,如果只有一两张表格,可以通过截图、屏幕抓取等方法来解决,如果有几百张表格甚至更多,那么只能用批量自动转成图片形式
- Win7系统本地组策略是一个很重要工具,通过组策略可以对系统软件、计算机、用户策略等进行设置,有用户反映,Win7系统打开组策略提示“进行解
- Steam是款全球数量最多、品类最全的游戏平台,近期有用户在使用Steam玩游戏时,想要将自己的精彩时刻截图下来,那么Steam玩游戏怎么截
- 爱剪辑如何制作倒计时字幕效果?最近有小伙伴向我询问想在爱剪辑里制作倒计时字幕效果不知道该怎么做,今天小编就给大家带来爱剪辑制作倒计时字幕效果
- win8屏幕显示比例的调整对于一些新手朋友们确实有一定的难度,为了让喜欢win8的朋友可以更快的适应win8,下面分享一下具体的设置步骤,相
- 怎么屏蔽QQ临时会话?这个话题对于经常隐身的用户来说比较常见,只要没有开启临时会话,陌生人(单向好友和非好友用户)就不能直接和用户对话,如果
- windows 7 各版本序列号收集整理,方便安装win7操作系统的朋友。Windows 7 Home Premium 序列号: VQB3X
- 这篇文章主要介绍了win8隐藏分区的重要作用,需要的朋友可以参考下很多朋友在安装系统的时候总是遇到分区问题,而且很多IT网站也说过如何分区,
- 7 月 2 日消息 Spotify 今日宣布,已推出苹果 macOS 版的最新测试版本,该版本已原生支持苹果 M1 Mac 设备。了解到,该
- 暴雪战网是暴雪公司推出的游戏对战平台,有很多用户都喜欢在上面玩暴雪的游戏,并且目前暴雪战网平台拥有国服和国际服之分,那么我们要将暴雪战网国服
- 很多小伙伴在使用抖音短视频应用软件的时候,想要在软件中开直播但是不知道应该怎么做。那么据小编所知我们可以在软件中找到我的选项,然后点击右上角
- 1、excel高级筛选的用法很简单,首先我们打开一个工资表做演示。 2、在其它单元格中输入筛选条件,注意:筛选条件
- Win10创意者更新之后,都发现打 开文件资源管理器后,看不到任何文本,只显示图标。但是Windows设置和开始菜单都正常,这该怎么办呢Wi
- 先看下图,我要在金门大桥四个字后面放一张金门大桥的图片,这张图片是专门从摄影作品中挑选的,整个大桥以及周边环境拍的非常漂亮。但是
- Win10系统是现在大家大家都在用的电脑办公系统。电脑使用久了以后都会出现各种各样的问题!最近有小伙伴反映在使用Win10系统的过程中遇到了