前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker file的详解

Docker file的详解

作者头像
DevinGeng
发布2019-04-09 16:44:07
4990
发布2019-04-09 16:44:07
举报
文章被收录于专栏:云+技术云+技术

-----------------------------------------------------------Dockerfile------------------------------------------------------ Dockerfile是一个镜像的表示,可以通过Dockerfile来描述构建镜像的步骤,并自动构建一个容器 所有的 Dockerfile 命令格式都是: INSTRUCTION arguments 虽然指令忽略大小写,但是建议使用大写。 FROM 命令 FROM <p_w_picpath> 或 FROM <p_w_picpath>:<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 p_w_picpath command docker commit container_id 注释 使用 # 作为注释 如: # Memcached # # VERSION       1.0 # use the ubuntu base p_w_picpath 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 <name> MAINTAINER命令用来指定维护者的姓名和联系方式 如: MAINTAINER Guillaume J. Charmes, guillaume@dotcloud.com 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 <port> [<port>...] 比如memcached使用端口 11211,可以把这个端口暴露在外,这样容器外可以看到这个端口并与其通信。 EXPOSE 11211 一个完整的例子: # Memcached # # VERSION       2.2 # use the ubuntu base p_w_picpath 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 <key> <value> 设置了后,后续的RUN命令都可以使用 使用此dockerfile生成的p_w_picpath新建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"] 创建一个挂载点用于共享目录 具体参考 Docker 4 -- 总结 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,如果有多个,只有最后一个生效。 The main purpose of a CMD is to provide defaults for an executing container. These defaults can include an executable, or they can omit the executable, in which case you must specify an ENTRYPOINT as well. TODO 还没搞清楚这个的作用

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-11-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档