前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker(四)——Dockerfile

Docker(四)——Dockerfile

作者头像
羊羽shine
发布2019-05-28 13:31:31
5570
发布2019-05-28 13:31:31
举报
文章被收录于专栏:Golang开发Golang开发

Dockerfile指令

FROM

第一个指令必须是FROM了,用于指定一个构建镜像的基础源镜像,镜像必须是已经存在的,如果本地没有就会从公共库中拉取,没有指定镜像的标签会使用默认的latest标签。

代码语言:javascript
复制
FROM<image>:<tag>
MAITAINER

指定镜像的作者信息,包含镜像的所有者和联系信息

代码语言:javascript
复制
MAINTAINER<name>
RUN

指定当前镜像中运行的命令,一句RUN就是一层,也相当于一个版本。这就是之前说的缓存的原理。我们知道docker是镜像层是只读的,所以你如果第一句安装了软件,用完在后面一句删除是不可能的。所以这种情况要在一句RUN命令中完成,可以通过&符号连接多个RUN语句。 对于复杂的RUN请用反斜线换行,避免无用分分层,合并多条命令成一层。

代码语言:javascript
复制
RUN <command>#shell 模式
RUN ["executable","param1","param2"] #exec模式
EXPOSE

对外映射的容器端口号,在docker run -p的时候生效

代码语言:javascript
复制
EXPOSE <port> [<port>...]
CMD

CMD在Dockerfile中只能出现一次,有多个,只有最后一个会有效。其作用是在容器启动的时候提供默认的命令和参数。如果用户执行docker run的时候提供了命令项,就会覆盖掉这个命令。没提供就会使用构建时的命令。

代码语言:javascript
复制
CMD <command> param1 param2 #shell 模式
CMD ["executable","param1","param2"] #exec模式
CMD ["param1","param2"] # 作为ENTRYPOINT指令的默认参数
ENTRYPOINT

ENTRYPOINT的指令不会被docker run 运行的命令项所覆盖。如果需要覆盖ENTRYPOINT的指令,需要使用docker run --entrypoint

代码语言:javascript
复制
ENTRYPOINT <command> param1 param2 #shell 模式
ENTRYPOINT ["executable","param1","param2"] #exec模式
ENV

设置容器的环境变量

代码语言:javascript
复制
EVN <key> <value> #只能设置一个
EVN <key>=<value>#允许一次设置多个
USER

命令用于设置运行容器的UID。

代码语言:javascript
复制
# Usage: USER [UID]
USER 750
ADD

复制本机文件或目录或远程文件,添加到指定的容器目录,支持GO的正则模糊匹配。路径是绝对路径,不存在会自动创建。如果源是一个目录,只会复制目录下的内容,目录本身不会复制。如果是URL或压缩包会自动下载或自动解压。

代码语言:javascript
复制
ADD <src>   <dest>
COPY

COPY除了不能自动解压,也不能复制网络文件。其它功能和ADD相同。

代码语言:javascript
复制
COPY <src> <dest>
VOLUME

VOLUME命令用于让你的容器访问宿主机上的目录

代码语言:javascript
复制
VOLUME["宿主机目录地址"]
WORKDIR

为RUN、CMD、ENTRYPOINT、COPY和ADD设置工作目录,如果当前目录不存在会自动创建

ONBUILD

ONBUILD 是一个特殊的指令,它后面跟的是其它指令,比如 RUN , COPY 等,而这些指令,在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行。

创建简单的nginx服务

创建文件名是Dockerfile的文本

代码语言:javascript
复制
FROM ubuntu:16.04
MAINTAINER baxiang "yangyucug@gmail.com"
RUN apt-get update
RUN apt-get install -y nginx
COPY index.html /var/www/html/
EXPOSE 80
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]

修改当前nginx首页,copy到nginx 首页目录下面

代码语言:javascript
复制
<html>
        <head><title>hello docker</title></head>
        <body>
                <h1>welcome to baxiang webside</h1>
        </body>
</html>

当前目录下执行docker build

代码语言:javascript
复制
docker build -t='baxiang/nginx' .

运行当前镜像

代码语言:javascript
复制
docker run -d --name nginx_web -p 80 baxiang/nginx 

查看当前镜像

代码语言:javascript
复制
docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
97df2b9ff4a1        baxiang/nginx       "nginx '-gdaemon off…"   7 seconds ago       Up 6 seconds        0.0.0.0:32768->80/tcp   nginx_web

执行curl

代码语言:javascript
复制
curl 127.0.0.1:32768
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.08.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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