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

微信网站建设多少钱wordpress 企业主模板

微信网站建设多少钱,wordpress 企业主模板,棒的网页设计,公共资源交易中心是属于哪个部门3. Dockerfile 定制镜像 从上一节的docker commit的学习中#xff0c;我们可以了解到#xff0c;镜像的定制实际上就是定制每一层所添加的配置、文件等信息#xff0c;但是命令毕竟只是命令#xff0c;每次定制都得去重复执行这个命令#xff0c;而且还不够直观#xff…3. Dockerfile 定制镜像 从上一节的docker commit的学习中我们可以了解到镜像的定制实际上就是定制每一层所添加的配置、文件等信息但是命令毕竟只是命令每次定制都得去重复执行这个命令而且还不够直观如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本用这个脚本来构建、定制镜像那么这些问题不就都可以解决了吗对的这个脚本就是我们说的Dockerfile。 介绍 Dockerfile 是一个文本文件其内包含了一条条的指令(Instruction)每一条指令构建一层因此每一条指令的内容就是描述该层应当如何构建。 还以之前定制 nginx 镜像为例这次我们使用 Dockerfile 来定制。在一个空白目录中建立一个文本文件并命名为 Dockerfile $ mkdir mynginx $ cd mynginx $ touch Dockerfile其内容为 FROM nginx RUN echo h1Hello, Docker!/h1 /usr/share/nginx/html/index.html这个 Dockerfile 很简单一共就两行。涉及到了两条指令FROM 和 RUN。 FROM 指定基础镜像 所谓定制镜像那一定是以一个镜像为基础在其上进行定制。就像我们之前运行了一个 nginx 镜像的容器再进行修改一样基础镜像是必须指定的。而FROM就是指定基础镜像因此一个 Dockerfile 中 FROM 是必备的指令并且必须是第一条指令。 在Docker Store上有非常多的高质量的官方镜像有可以直接拿来使用的服务类的镜像如 nginx、redis、mongo、mysql、httpd、php、tomcat 等也有一些方便开发、构建、运行各种语言应用的镜像如 node、openjdk、python、ruby、golang 等。可以在其中寻找一个最符合我们最终目标的镜像为基础镜像进行定制。 如果没有找到对应服务的镜像官方镜像中还提供了一些更为基础的操作系统镜像如 ubuntu、debian、centos、fedora、alpine 等这些操作系统的软件库为我们提供了更广阔的扩展空间。 除了选择现有镜像为基础镜像外Docker 还存在一个特殊的镜像名为scratch。这个镜像是虚拟的概念并不实际存在它表示一个空白的镜像。 FROM scratch ...如果你以scratch为基础镜像的话意味着你不以任何镜像为基础接下来所写的指令将作为镜像第一层开始存在。有的同学可能感觉很奇怪没有任何基础镜像我怎么去执行我的程序呢其实对于 Linux 下静态编译的程序来说并不需要有操作系统提供运行时支持所需的一切库都已经在可执行文件里了因此直接FROM scratch会让镜像体积更加小巧。使用 Go 语言 开发的应用很多会使用这种方式来制作镜像这也是为什么有人认为 Go 是特别适合容器微服务架构的语言的原因之一。 RUN 执行命令 RUN指令是用来执行命令行命令的。由于命令行的强大能力RUN指令在定制镜像时是最常用的指令之一。其格式有两种 shell 格式RUN 命令就像直接在命令行中输入的命令一样。刚才写的 Dockerfile 中的 RUN 指令就是这种格式。 RUN echo h1Hello, Docker!/h1 /usr/share/nginx/html/index.htmlexec 格式RUN [“可执行文件”, “参数1”, “参数2”]这更像是函数调用中的格式。 既然 RUN 就像 Shell 脚本一样可以执行命令那么我们是否就可以像 Shell 脚本一样把每个命令对应一个 RUN 呢比如这样 FROM debian:jessie RUN apt-get update RUN apt-get install -y gcc libc6-dev make RUN wget -O redis.tar.gz http://download.redis.io/releases/redis-3.2.5.tar.gz RUN mkdir -p /usr/src/redis RUN tar -xzf redis.tar.gz -C /usr/src/redis --strip-components1 RUN make -C /usr/src/redis RUN make -C /usr/src/redis install之前说过Dockerfile 中每一个指令都会建立一层RUN 也不例外。每一个 RUN 的行为就和刚才我们手工建立镜像的过程一样新建立一层在其上执行这些命令执行结束后commit 这一层的修改构成新的镜像。 而上面的这种写法创建了 7 层镜像。这是完全没有意义的而且很多运行时不需要的东西都被装进了镜像里比如编译环境、更新的软件包等等。结果就是产生非常臃肿、非常多层的镜像不仅仅增加了构建部署的时间也很容易出错。 这是很多初学 Docker 的人常犯的一个错误。 Union FS 是有最大层数限制的比如 AUFS曾经是最大不得超过 42 层现在是不得超过 127 层。 上面的 Dockerfile 正确的写法应该是这样 FROM debian:jessie RUN buildDepsgcc libc6-dev make \ apt-get update \ apt-get install -y $buildDeps \ wget -O redis.tar.gz http://download.redis.io/releases/redis-3.2.5.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首先之前所有的命令只有一个目的就是编译、安装 redis 可执行文件。因此没有必要建立很多层这只是一层的事情。因此这里没有使用很多个 RUN 对一一对应不同的命令而是仅仅使用一个 RUN 指令并使用将各个所需命令串联起来。将之前的 7 层简化为了 1 层。在撰写 Dockerfile 的时候要经常提醒自己这并不是在写 Shell 脚本而是在定义每一层该如何构建。 并且这里为了格式化还进行了换行。Dockerfile 支持 Shell 类的行尾添加\的命令换行方式以及行首#进行注释的格式。良好的格式比如换行、缩进、注释等会让维护、排障更为容易这是一个比较好的习惯。 此外还可以看到这一组命令的最后添加了清理工作的命令删除了为了编译构建所需要的软件清理了所有下载、展开的文件并且还清理了 apt 缓存文件。这是很重要的一步我们之前说过镜像是多层存储每一层的东西并不会在下一层被删除会一直跟随着镜像。因此镜像构建时一定要确保每一层只添加真正需要添加的东西任何无关的东西都应该清理掉。 很多人初学 Docker 制作出了很臃肿的镜像的原因之一就是忘记了每一层构建的最后一定要清理掉无关文件。 构建镜像 好了让我们再回到之前定制的 nginx 镜像的 Dockerfile 来。现在我们明白了这个 Dockerfile的内容那么让我们来构建这个镜像吧。在 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从命令的输出结果中我们可以清晰的看到镜像的构建过程。在 Step 2 中如同我们之前所说的那样RUN 指令启动了一个容器 9cdc27646c7b执行了所要求的命令并最后提交了这一层 44aa4490ce2c随后删除了所用到的这个容器 9cdc27646c7b。这里我们使用了 docker build命令进行镜像构建。其格式为 $ docker build [选项] 上下文路径/URL/-在这里我们指定了最终镜像的名称 -t nginx:v3构建成功后我们可以像之前运行 nginx:v2 那样来运行这个镜像其结果会和 nginx:v2 一样。 镜像构建上下文Context 如果注意会看到 docker build 命令最后有一个.。.表示当前目录而 Dockerfile 就在当前目录因此不少初学者以为这个路径是在指定 Dockerfile 所在路径这么理解其实是不准确的。如果对应上面的命令格式你可能会发现这是在指定上下文路径。那么什么是上下文呢 首先我们要理解 docker build 的工作原理。Docker 在运行时分为 Docker 引擎也就是服务端守护进程和客户端工具。Docker 的引擎提供了一组 REST API被称为 Docker Remote API而如 docker 命令这样的客户端工具则是通过这组 API 与 Docker 引擎交互从而完成各种功能。因此虽然表面上我们好像是在本机执行各种 docker 功能但实际上一切都是使用的远程调用形式在服务端Docker 引擎完成。也因为这种 C/S 设计让我们操作远程服务器的 Docker 引擎变得轻而易举。 当我们进行镜像构建的时候并非所有定制都会通过 RUN 指令完成经常会需要将一些本地文件复制进镜像比如通过 COPY 指令、ADD 指令等。而 docker build 命令构建镜像其实并非在本地构建而是在服务端也就是 Docker 引擎中构建的。那么在这种客户端/服务端的架构中如何才能让服务端获得本地文件呢 这就引入了上下文的概念。当构建的时候用户会指定构建镜像上下文的路径docker build 命令得知这个路径后会将路径下的所有内容打包然后上传给 Docker 引擎。这样 Docker 引擎收到这个上下文包后展开就会获得构建镜像所需的一切文件。如果在 Dockerfile 中这么写 COPY ./package.json /app/这并不是要复制执行 docker build 命令所在的目录下的 package.json也不是复制 Dockerfile 所在目录下的 package.json而是复制 上下文context 目录下的 package.json。 因此COPY这类指令中的源文件的路径都是相对路径。这也是初学者经常会问的为什么 COPY …/package.json /app 或者 COPY /opt/xxxx /app 无法工作的原因因为这些路径已经超出了上下文的范围Docker 引擎无法获得这些位置的文件。如果真的需要那些文件应该将它们复制到上下文目录中去。 现在就可以理解刚才的命令docker build -t nginx:v3 .中的这个.实际上是在指定上下文的目录docker build 命令会将该目录下的内容打包交给 Docker 引擎以帮助构建镜像。 如果观察 docker build 输出我们其实已经看到了这个发送上下文的过程 $ docker build -t nginx:v3 . Sending build context to Docker daemon 2.048 kB ...理解构建上下文对于镜像构建是很重要的可以避免犯一些不应该的错误。比如有些初学者在发现 COPY /opt/xxxx /app 不工作后于是干脆将 Dockerfile 放到了硬盘根目录去构建结果发现 docker build 执行后在发送一个几十 GB 的东西极为缓慢而且很容易构建失败。那是因为这种做法是在让 docker build 打包整个硬盘这显然是使用错误。 一般来说应该会将 Dockerfile 置于一个空目录下或者项目根目录下。如果该目录下没有所需文件那么应该把所需文件复制一份过来。如果目录下有些东西确实不希望构建时传给 Docker 引擎那么可以用 .gitignore 一样的语法写一个.dockerignore该文件是用于剔除不需要作为上下文传递给 Docker 引擎的。 那么为什么会有人误以为 . 是指定 Dockerfile 所在目录呢这是因为在默认情况下如果不额外指定 Dockerfile 的话会将上下文目录下的名为 Dockerfile 的文件作为 Dockerfile。 这只是默认行为实际上 Dockerfile 的文件名并不要求必须为 Dockerfile而且并不要求必须位于上下文目录中比如可以用-f ../Dockerfile.php参数指定某个文件作为 Dockerfile。 当然一般大家习惯性的会使用默认的文件名 Dockerfile以及会将其置于镜像构建上下文目录中。 迁移镜像 Docker 还提供了docker load和docker save命令用以将镜像保存为一个 tar 文件然后传输到另一个位置上再加载进来。这是在没有 Docker Registry 时的做法现在已经不推荐镜像迁移应该直接使用 Docker Registry无论是直接使用 Docker Hub 还是使用内网私有 Registry 都可以。 使用docker save命令可以将镜像保存为归档文件。比如我们希望保存这个 alpine 镜像。 $ docker image ls alpine REPOSITORY TAG IMAGE ID CREATED SIZE alpine latest baa5d63471ea 5 weeks ago 4.803 MB保存镜像的命令为 $ docker save alpine | gzip alpine-latest.tar.gz然后我们将 alpine-latest.tar.gz 文件复制到了到了另一个机器上可以用下面这个命令加载镜像 $ docker load -i alpine-latest.tar.gz Loaded image: alpine:latest如果我们结合这两个命令以及 ssh 甚至 pv 的话利用 Linux 强大的管道我们可以写一个命令完成从一个机器将镜像迁移到另一个机器并且带进度条的功能 docker save 镜像名 | bzip2 | pv | ssh 用户名主机名 cat | docker load
http://www.dnsts.com.cn/news/213358.html

相关文章:

  • 公司怎样建自己网站h5类型的网站是怎么做的
  • 朔州做网站网站改版专题页
  • ps如何做网站免费做网站公司哪家好
  • 农家乐网站开发项目背景线上编程哪家比较好
  • 中徽园林建设有限公司网站受欢迎的建网站公司
  • 网站建设中的html合肥今天发现了一例病例吗
  • 哪类公司做网站的最多关于电商网站建设与管理的书籍
  • wordpress如何从网站登录后台网站建设包含内容
  • 网站开发大概多久本地wordpress 外网访问
  • 免费做推广的网站揭阳新站seo方案
  • 网站排名查询平台摄影作品
  • 网站建设的主要产品个人网站有什么缺点
  • 深圳网站建设服务平台陕西建设集团招聘信息网站
  • 星沙网站制作wordpress 微信发布文章
  • 中国空间站建造历程nodejs搭建wordpress
  • 网站建设与软件开发哪个好赚钱广州网站建设性价比
  • 中山网站建设文化大学生做家教比较好的网站
  • 免费网站app哪个最好外贸网址
  • 手机网站要备案吗wordpress的数据库有多大?
  • 老年夫妻做爰视频网站宝应seo优化公司
  • 本地网站开发怎么自己做网站表白
  • 开发一个网站要多久做化工贸易要用那些网站推广
  • 网站开发常见问题微信代运营合作方案
  • dw网站建设讨论总结深圳seo网站建设
  • 哈尔滨门户网站是什么如何做一家门户网站
  • 网站建设公司86215网盟推广费用
  • 怎样做电影网站如何做好一个网站的推广
  • 政务服务网站建设如何解决网站图片打开慢
  • 网站关键词在哪里设置沈阳三好街做网站公司
  • 网站增加网页建设报名系统是正规网站吗