当前位置: 首页 > news >正文

推广单页网站免费制作江苏城乡建设学校网站

推广单页网站免费制作,江苏城乡建设学校网站,洛南网站建设,网站建设免费维护内容如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本#xff0c;用这个脚本来构建、定制镜像#xff0c;那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。 Dockerfile 是一个文本文件#xff0c;其内包…如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本用这个脚本来构建、定制镜像那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。 Dockerfile 是一个文本文件其内包含了一条条的 指令(Instruction)每一条指令构建一层因此每一条指令的内容就是描述该层应当如何构建。 以之前定制 nginx 镜像为例这次我们使用 Dockerfile 来定制。 在一个空白目录中建立一个文本文件并命名为 Dockerfile其内容为 FROM nginx RUN echo h1Hello, Docker!/h1 /usr/share/nginx/html/index.htmlFROM指定基础镜像 以 scratch 为基础镜像的话意味着你不以任何镜像为基础接下来所写的指令将作为镜像第一层开始存在。 定制镜像那一定是以一个镜像为基础在其上进行定制。就像我们之前运行了一个 nginx 镜像的容器再进行修改一样基础镜像是必须指定的。 RUN执行命令 shell 格式RUN 命令就像直接在命令行中输入的命令一样。刚才写的 Dockerfile 中的 RUN 指令就是这种格式。 exec 格式RUN [可执行文件, 参数1, 参数2]这更像是函数调用中的格式。 在撰写 Dockerfile 的时候要经常提醒自己这并不是在写 Shell 脚本而是在定义每一层该如何构建。 Dockerfile 正确的写法应该是这样 FROM debian:stretchRUN set -x; buildDepsgcc libc6-dev make wget \ apt-get update \ apt-get install -y $buildDeps \ wget -O redis.tar.gz http://download.redis.io/releases/redis-5.0.3.tar.gz \ mkdir -p /usr/src/redis \ tar -xzf redis.tar.gz -C /usr/src/redis --strip-components1 \ make -C /usr/src/redis \ make -C /usr/src/redis install \ rm -rf /var/lib/apt/lists/* \ rm redis.tar.gz \ rm -r /usr/src/redis \ apt-get purge -y --auto-remove $buildDeps这一组命令的最后添加了清理工作的命令删除了为了编译构建所需要的软件清理了所有下载、展开的文件并且还清理了 apt 缓存文件。这是很重要的一步我们之前说过镜像是多层存储每一层的东西并不会在下一层被删除会一直跟随着镜像。因此镜像构建时一定要确保每一层只添加真正需要添加的东西任何无关的东西都应该清理掉。 构建镜像 在 Dockerfile 文件所在目录执行 $ docker build -t nginx:v3 . Sending build context to Docker daemon 2.048 kB Step 1 : FROM nginx--- e43d811ce2f4 Step 2 : RUN echo h1Hello, Docker!/h1 /usr/share/nginx/html/index.html--- Running in 9cdc27646c7b--- 44aa4490ce2c Removing intermediate container 9cdc27646c7b Successfully built 44aa4490ce2c镜像构建上下文 当构建的时候用户会指定构建镜像上下文的路径docker build 命令得知这个路径后会将路径下的所有内容打包然后上传给 Docker 引擎。这样 Docker 引擎收到这个上下文包后展开就会获得构建镜像所需的一切文件。 在默认情况下如果不额外指定 Dockerfile 的话会将上下文目录下的名为 Dockerfile 的文件作为 Dockerfile。 COPY复制文件 COPY [--chownuser:group] 源路径... 目标路径 COPY [--chownuser:group] [源路径1,... 目标路径] COPY 指令将从构建上下文目录中 源路径 的文件/目录复制到新的一层的镜像内的 目标路径 位置。比如 COPY package.json /usr/src/app/源路径 可以是多个甚至可以是通配符其通配符规则要满足 Go 的 [filepath.Match](https://golang.org/pkg/path/filepath/#Match) 规则 目标路径 可以是容器内的绝对路径也可以是相对于工作目录的相对路径工作目录可以用 WORKDIR 指令来指定 使用 COPY 指令源文件的各种元数据都会保留。比如读、写、执行权限、文件变更时间等。这个特性对于镜像定制很有用。特别是构建相关文件都在使用 Git 进行管理的时候。 在使用该指令的时候还可以加上 --chownuser:group 选项来改变文件的所属用户及所属组。 COPY --chown55:mygroup files* /mydir/ COPY --chownbin files* /mydir/ COPY --chown1 files* /mydir/ COPY --chown10:11 files* /mydir/ADD更高级的复制文件 源路径 可以是一个 URL 下载后的文件权限自动设置为 600 压缩格式为 gzip, bzip2 以及 xz 的情况下ADD 指令将会自动解压缩这个压缩文件到 目标路径 去。 CMD容器启动命令 Docker 不是虚拟机容器就是进程。既然是进程那么在启动容器的时候需要指定所运行的程序及参数。CMD 指令就是用于指定默认的容器主进程的启动命令的。 ubuntu 镜像默认的 CMD 是 /bin/bash如果我们直接 docker run -it ubuntu 的话会直接进入 bash。我们也可以在运行时指定运行别的命令如 docker run -it ubuntu cat /etc/os-release。这就是用 cat /etc/os-release 命令替换了默认的 /bin/bash 命令了输出了系统版本信息。 ENTRYPOINT入口点 ENTRYPOINT 的目的和 CMD 一样都是在指定容器启动程序及参数 需要通过 docker run 的参数 --entrypoint 来指定。 指定了 ENTRYPOINT 后CMD 的含义就发生了改变不再是直接的运行其命令而是将 CMD 的内容作为参数传给 ENTRYPOINT 指令换句话说实际执行时将变为 ENTRYPOINT CMDENV设置环境变量 格式有两种 ENV key value ENV key1value1 key2value2... 这个指令很简单就是设置环境变量而已无论是后面的其它指令如 RUN还是运行时的应用都可以直接使用这里定义的环境变量。 下列指令可以支持环境变量展开 ADD、COPY、ENV、EXPOSE、FROM、LABEL、USER、WORKDIR、VOLUME、STOPSIGNAL、ONBUILD、RUN。 ARG构建参数 构建参数和 ENV 的效果一样都是设置环境变量。所不同的是ARG 所设置的构建环境的环境变量在将来容器运行时是不会存在这些环境变量的。但是不要因此就使用 ARG 保存密码之类的信息因为 docker history 还是可以看到所有值的。 Dockerfile 中的 ARG 指令是定义参数名称以及定义其默认值。该默认值可以在构建命令 docker build 中用 --build-arg 参数名值 来覆盖。 灵活的使用 ARG 指令能够在不修改 Dockerfile 的情况下构建出不同的镜像。 ARG 指令有生效范围如果在 FROM 指令之前指定那么只能用于 FROM 指令中。 ARG DOCKER_USERNAMElibraryFROM ${DOCKER_USERNAME}/alpineRUN set -x ; echo ${DOCKER_USERNAME}使用上述 Dockerfile 会发现无法输出 ${DOCKER_USERNAME} 变量的值要想正常输出你必须在 FROM 之后再次指定 ARG # 只在 FROM 中生效 ARG DOCKER_USERNAMElibraryFROM ${DOCKER_USERNAME}/alpine# 要想在 FROM 之后使用必须再次指定 ARG DOCKER_USERNAMElibraryRUN set -x ; echo ${DOCKER_USERNAME}对于上述 Dockerfile 两个 FROM 指令都可以使用 ${DOCKER_USERNAME}对于在各个阶段中使用的变量都必须在每个阶段分别指定 VOLUME定义匿名卷 容器运行时应该尽量保持容器存储层不发生写操作对于数据库类需要保存动态数据的应用其数据库文件应该保存于卷(volume)中 为了防止运行时用户忘记将动态文件所保存目录挂载为卷在 Dockerfile 中我们可以事先指定某些目录挂载为匿名卷这样在运行时如果用户不指定挂载其应用也可以正常运行不会向容器存储层写入大量数据。 VOLUME /data这里的 /data 目录就会在容器运行时自动挂载为匿名卷任何向 /data 中写入的信息都不会记录进容器存储层从而保证了容器存储层的无状态化。当然运行容器时可以覆盖这个挂载设置。比如 $ docker run -d -v mydata:/data xxxxEXPOSE暴露端口 EXPOSE 指令是声明容器运行时提供服务的端口这只是一个声明在容器运行时并不会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处一个是帮助镜像使用者理解这个镜像服务的守护端口以方便配置映射另一个用处则是在运行时使用随机端口映射时也就是 docker run -P 时会自动随机映射 EXPOSE 的端口。 WORKDIR指定工作目录 使用 WORKDIR 指令可以来指定工作目录或者称为当前目录以后各层的当前目录就被改为指定的目录如该目录不存在WORKDIR 会帮你建立目录。 如果需要改变以后各层的工作目录的位置那么应该使用 WORKDIR 指令。 WORKDIR /appRUN echo hello world.txt如果你的 WORKDIR 指令使用的相对路径那么所切换的路径与之前的 WORKDIR 有关 WORKDIR /a WORKDIR b WORKDIR cRUN pwdRUN pwd 的工作目录为 /a/b/c。 USER指定当前用户 USER 指令和 WORKDIR 相似都是改变环境状态并影响以后的层。WORKDIR 是改变工作目录USER 则是改变之后层的执行 RUN, CMD 以及 ENTRYPOINT 这类命令的身份。 USER 只是帮助你切换到指定用户而已这个用户必须是事先建立好的否则无法切换。 RUN groupadd -r redis useradd -r -g redis redis USER redis RUN [ redis-server ]HEALTHCHECK健康检查 HEALTHCHECK 指令是告诉 Docker 应该如何进行判断容器的状态是否正常这是 Docker 1.12 引入的新指令。 假设我们有个镜像是个最简单的 Web 服务我们希望增加健康检查来判断其 Web 服务是否在正常工作我们可以用 curl 来帮助判断其 Dockerfile 的 HEALTHCHECK 可以这么写 FROM nginx RUN apt-get update apt-get install -y curl rm -rf /var/lib/apt/lists/* HEALTHCHECK --interval5s --timeout3s \CMD curl -fs http://localhost/ || exit 1这里我们设置了每 5 秒检查一次这里为了试验所以间隔非常短实际应该相对较长如果健康检查命令超过 3 秒没响应就视为失败并且使用 curl -fs http://localhost/ || exit 1 作为健康检查命令。 为了帮助排障健康检查命令的输出包括 stdout 以及 stderr都会被存储于健康状态里可以用 docker inspect 来查看。 $ docker inspect --format {{json .State.Health}} web | python -m json.tool {FailingStreak: 0,Log: [{End: 2016-11-25T14:35:37.940957051Z,ExitCode: 0,Output: !DOCTYPE html\nhtml\nhead\ntitleWelcome to nginx!/title\nstyle\n body {\n width: 35em;\n margin: 0 auto;\n font-family: Tahoma, Verdana, Arial, sans-serif;\n }\n/style\n/head\nbody\nh1Welcome to nginx!/h1\npIf you see this page, the nginx web server is successfully installed and\nworking. Further configuration is required./p\n\npFor online documentation and support please refer to\na href\http://nginx.org/\nginx.org/a.br/\nCommercial support is available at\na href\http://nginx.com/\nginx.com/a./p\n\npemThank you for using nginx./em/p\n/body\n/html\n,Start: 2016-11-25T14:35:37.780192565Z}],Status: healthy }ONBUILD为他人做嫁衣裳 ONBUILD 是一个特殊的指令它后面跟的是其它指令比如 RUN, COPY 等而这些指令在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像去构建下一级镜像的时候才会被执行。 LABEL为镜像添加元数据 LABEL 指令用来给镜像以键值对的形式添加一些元数据metadata。 SHELL指令 SHELL 指令可以指定 RUN ENTRYPOINT CMD 指令的 shellLinux 中默认为 [/bin/sh, -c]
http://www.zqtcl.cn/news/350660/

相关文章:

  • 移动应用网站开发阶段作业信息型网站有哪些
  • 监控直播网站开发网站建设与管理总结
  • 青岛城阳网站设计免费网站成品
  • 做服装外贸的网站ghost wordpress
  • 建设银行的网站为什么这么卡网页设计用啥软件
  • 电子商务 网站开发南阳网网站建设
  • 中小型企业网络拓扑图及配置株洲seo网站推广
  • 中国镇江网站如何搭建自己的网址
  • wordpress 自动广告seo搜索引擎优化原理
  • 区块链网站用vue.js做怎么样长春站建筑
  • 集团公司门户网站建设adsl做网站
  • 山东建设监理协会官方网站茂名建站公司模板
  • 烟台做网站案例创业网站推广怎么做
  • php项目网站建设方案书专做药材的网站有哪些
  • 网站表单模板营销型网站建设的5大技巧
  • html手机版网站网站备案后怎么做实名认证
  • 第五冶金建设公司职工大学网站大连工业
  • 网站的基础服务html网站地图生成器
  • 网站开发学徒工作如何设计师培训哪家好
  • 做网站多少钱西宁君博正规株洲在线论坛招聘求职
  • 抚州营销型网站建设殡葬类网站建设
  • 公司网站制作汇报会合肥品牌设计
  • 网站推广策划书怎么说网站建设公司中企动力强
  • php网站源码架构阿里巴巴运营技巧
  • 如何帮助网站吸引流量宁波市网站集约化建设通知
  • 从域名角度看网站建设注意事项河北邯郸seo网站建设网站优化
  • 网站推广策划评估工具7wordpress菜单新连接
  • 网站创建asp电影网站源码
  • 大朗网站建设培训淘宝客cms网站建设
  • 广西建设厅网站在线服务徐州设计网站