[系统技巧] Docker的Dockerfile脚本基本使用指南
作者:CC下载站 日期:2022-09-11 06:03:54 浏览:151 分类:玩电脑
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。
Dockerfile 语法
在我们深入讨论Dockerfile之前,让我们快速过一下Dockerfile的语法和它们的意义。
什么是语法?
非常简单,在编程中,语法意味着一个调用命令,输入参数去让应用执行程序的文法结构。这些语法被规则或明或暗的约束。程序员遵循语法规范以和计算机 交互。如果一段程序语法不正确,计算机将无法识别。Dockerfile使用简单的,清楚的和干净的语法结构,极为易于使用。这些语法可以自我释义,支持注释。
Dockerfile 语法示例
Dockerfile语法由两部分构成,注释和命令+参数
一个简单的例子:
复制代码代码如下:
# Print "Hello docker!"
RUN echo "Hello docker!"
Dockerfile 命令
Dockerfile有十几条命令可用于构建镜像,下文将简略介绍这些命令。
FROM 命令
复制代码代码如下:
FROM <image>
或
复制代码代码如下:
FROM <image>:<tag>
这个设置基本的镜像,为后续的命令使用,所以应该作为Dockerfile的第一条指令。
比如:
复制代码代码如下:
FROM ubuntu
如果没有指定 tag ,则默认tag是latest,如果都没有则会报错。
RUN 命令
RUN命令会在上面FROM指定的镜像里执行任何命令,然后提交(commit)结果,提交的镜像会在后面继续用到。
两种格式:
复制代码代码如下:
RUN <command> (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</p>
<p># use the ubuntu base image provided by dotCloud
FROM ubuntu</p>
<p># 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</p>
<p># install memcached
RUN apt-get install -y memcached
MAINTAINER 命令
MAINTAINER <name>
MAINTAINER命令用来指定维护者的姓名和联系方式
如:
复制代码代码如下:
MAINTAINER Guillaume J. Charmes, [email protected]
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!"</p>
<p>root@tankywoo-docker:~# docker run 62fda5e450d5
Welcome!
USER 命令
比如指定 memcached 的运行用户,可以使用上面的 ENTRYPOINT 来实现:
复制代码代码如下:
ENTRYPOINT ["memcached", "-u", "daemon"]
更好的方式是:
复制代码代码如下:
ENTRYPOINT ["memcached"]
USER daemon
EXPOSE 命令
EXPOSE 命令可以设置一个端口在运行的镜像中暴露在外
复制代码代码如下:
EXPOSE <port> [<port>...]
比如memcached使用端口 11211,可以把这个端口暴露在外,这样容器外可以看到这个端口并与其通信。
复制代码代码如下:
EXPOSE 11211
一个完整的例子:
复制代码代码如下:
# Memcached
#
# VERSION 2.2</p>
<p># use the ubuntu base image provided by dotCloud
FROM ubuntu</p>
<p>MAINTAINER Victor Coisne [email protected]</p>
<p># 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</p>
<p># install memcached
RUN apt-get install -y memcached</p>
<p># Launch memcached when launching the container
ENTRYPOINT ["memcached"]</p>
<p># run memcached as the daemon user
USER daemon</p>
<p># 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 [email protected]
---> 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]</p>
<p>....</p>
<p>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 <key> <value>
设置了后,后续的RUN命令都可以使用。
使用此dockerfile生成的image新建container,可以通过 docker inspect 看到这个环境变量:
复制代码代码如下:
root@tankywoo-docker:~# docker inspect 49bfc7a9817f
...
"Env": [
"name=tanky",
"HOME=/",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
...
里面的name=tanky就是设置的。
也可以通过在docker run时设置或修改环境变量:
复制代码代码如下:
docker run -i -t --env name="tanky" ubuntu:newtest /bin/bash
ADD 命令
从src复制文件到container的dest路径:
复制代码代码如下:
ADD <src> <dest>
<src> 是相对被构建的源目录的相对路径,可以是文件或目录的路径,也可以是一个远程的文件url
<dest> 是container中的绝对路径
VOLUME 命令
复制代码代码如下:
VOLUME ["<mountpoint>"]
如:
复制代码代码如下:
VOLUME ["/data"]
创建一个挂载点用于共享目录
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,如果有多个,只有最后一个生效。
猜你还喜欢
- 03-23 [教程]Docker视频教程
- 09-11 [系统技巧] 全面讲解Docker容器技术的基本概念
- 09-11 [系统技巧] 使用Device Mapper插件改变Docker容器大小的方法详解
- 09-11 [系统技巧] 在Docker中安装Kali Linux的教程
- 09-11 [系统技巧] Docker的镜像理解以及容器的备份、恢复和迁移操作
- 09-11 [系统技巧] 搭建Docker私有仓库的详细教程
- 09-11 [系统技巧] 记录一次博客迁移到Docker上的操作
- 09-11 [系统技巧] Docker中MySQL容器的创建和连接教程
- 09-11 [系统技巧] 简易的Docker版本升级方法
- 09-11 [系统技巧] 对于Docker使用的一些安全配置建议
- 09-11 [系统技巧] 在Windows系统上安装Docker的教程
- 09-11 [系统技巧] Docker的一些基础的网络命令小结
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[电影] 《环太平洋两部合集》 4K REMUX原盘 [杜比视界] 国英双语音轨 [内封特效字幕] [133.8G]
[电影] 异人之下 The Traveller 2024✨【影版】【4K正式版/HQ超高码/DDP5.1】✚【1080高码】无水印/无压缩
[动漫] 头文字D 动漫 (1998) S01-S06季 1080P 国粤日音轨 续作 剧场版 电影
[小说] 知轩藏书全站7667册txt小说合集精心校对版
[杂志] 电脑爱好者杂志14年 超全 [PDF]
[电影] 西游记全部版本-4K高清修复-总计384G-1986+1996+1998+2002+2010浙版+西游记后传
[纪录片] 【国家地理百年纪念典藏】超经典100集全 MP4格式 (绝佳学习资料)27GB
[纪录片] B站食贫道收费纪录片 *迷失东京* [1080P] 揭露日本大家感兴趣却不为人知的秘密
[网络线报] 城通网盘福利线报解析器 - 获取直连下载地址
[福利线报] 一个「脚本」搞定六大网盘(百度/阿里/天翼/迅雷/夸克/移动)
[游戏] 《黑神话悟空》免安装学习版【全dlc整合完整版】+Steam游戏解锁+游戏修改工具!
[动画] 《名侦探柯南》名侦探柯南百万美元的五菱星 [TC] [MP4]
[电视剧集] [BT下载][黑暗城市- 清扫魔 Dark City: The Cleaner 第一季][全06集][英语无字][MKV][720P/1080P][WEB-RAW]
[涨点姿势] 男性性技宝典:14招实战驭女术——爱抚、按摩、催情、姿势、高潮全攻略
[动画] 2002《火影忍者》720集全【4K典藏版】+11部剧场版+OVA+漫画 内嵌简日字幕
[剧集] 《斯巴达克斯》1-4季合集 无删减版 1080P 内嵌简英特效字幕
[CG剧情] 《黑神话:悟空》158分钟CG完整剧情合集 4K120帧最高画质
[短剧] 被下架·禁播的羞羞短剧·午夜短剧合集
[游戏] 黑神话悟空离线完整版+修改器
[图像处理] 光影魔术手v4.6.0.578绿色版
[影视] 美国内战 4K蓝光原盘下载+高清MKV版/内战/帝国浩劫:美国内战(台)/美帝崩裂(港) 2024 Civil War 63.86G
[影视] 一命 3D 蓝光高清MKV版/切腹 / 切腹:武士之死 / Hara-Kiri: Death of a Samurai / Ichimei 2011 一命 13.6G
[影视] 爱情我你他 蓝光原盘下载+高清MKV版/你、我、他她他 2005 Me and You and Everyone We Know 23.2G
[影视] 穿越美国 蓝光原盘下载+高清MKV版/窈窕老爸 / 寻找他妈…的故事 2005 Transamerica 20.8G
[电影] 《黄飞鸿》全系列合集
[Android] 开罗游戏 ▎像素风格的模拟经营的游戏厂商安卓游戏大合集
[游戏合集] 要战便战 v0.9.107 免安装绿色中文版
[资源] 精整2023年知识星球付费文合集136篇【PDF格式】
[系统]【黑果小兵】macOS Big Sur 11.0.1 20B50 正式版 with Clover 5126 黑苹果系统镜像下载
[美图] 【经典收藏美图集合】1500多张韩国美女高清图片让你的收藏夹更加丰富多彩
- 最新评论
-
有靳东!嘻嘻奥古斯都.凯撒 评论于:10-28 流星花园是F4处女作也是4人集体搭配的唯一一部!奥古斯都.凯撒 评论于:10-28 找了好久的资源,终于在这里找到了。感谢本站的资源和分享。谢谢AAAAA 评论于:10-26 找了好久的资源,终于在这里找到了。感谢本站的资源和分享。谢谢password63 评论于:10-26 找了好久的资源,终于在这里找齐了!!!!blog001 评论于:10-21 找了好久的资源,终于在这里找齐了!!!!blog001 评论于:10-21 找了好久的资源,终于在这里找到了。感谢本站的资源和分享。谢谢WillKwok 评论于:10-09 感谢分享1234123 评论于:10-07 太好了终于找到了谢谢Tom 评论于:10-07 谢谢分享loonghd 评论于:09-30
- 热门tag