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,如果有多个,只有最后一个生效。

标签:Docker,Dockerfile
0
投稿

猜你喜欢

  • 如何添加ppt背景图片

    2023-10-10 12:00:48
  • 太极越狱Mac版发布 Mac终于能iOS 8.4完美越狱 附官方下载

    2022-11-25 09:24:15
  • wps表格如何做折线图

    2022-02-20 21:36:30
  • 酷狗音乐如何去掉原声?酷狗音乐去掉原声的方法

    2022-08-23 13:53:06
  • 电脑如何重装系统Win11?电脑重装Win11系统的方法

    2023-10-11 14:43:42
  • win11蓝牙鼠标经常性掉线怎么解决?蓝牙鼠标经常性掉线的解决方法

    2023-02-21 18:17:45
  • WPS演示中怎么添加自定义播放按钮

    2023-07-31 20:26:58
  • Win10系统电脑显卡驱动安装失败怎么办?Win10系统电脑显卡驱动安装失败解决方法

    2023-11-16 20:41:18
  • Win10的edge浏览器怎么升级?升级edge浏览器版本方法

    2022-09-10 19:58:30
  • wps异常关闭怎么恢复?

    2022-07-21 15:10:36
  • WinXP系统删除打印机提示"无法删除打印机,打印机后台程序服务没有运行"的解决方法

    2022-04-21 18:55:34
  • 巧用Excel让数据对比更加直观

    2023-10-13 18:11:38
  • Win10系统打开命令提示符的绝招

    2023-08-16 19:24:42
  • Win8 64位系统开启Aero Peek桌面预览功能的解决方法

    2023-08-11 09:29:41
  • Windows8系统下以太网已禁用的开启方法

    2022-06-04 16:17:00
  • WPS文字文档怎么对齐文字?

    2023-03-11 10:19:39
  • Win10系统文件夹图标有蓝色箭头标志的解决方法

    2022-03-15 21:53:05
  • 电脑IE浏览器网页打开很慢并且总是崩溃的解决方法

    2023-12-09 07:49:28
  • windows7解决桌面图标大小问题(具体调整方法)

    2022-04-20 05:05:02
  • Word2010快速将内容填写到所有空表格中

    2023-10-11 17:59:09
  • asp之家 电脑教程 m.aspxhome.com