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

手机网站后台管理厦门建设局官网首页

手机网站后台管理,厦门建设局官网首页,什么是网站主机,域名估价查询文章目录 1、多阶段构建2、ADD 与 COPY 指令示例 3、CMD指令示例 4、ENTRYPOINT指令示例 5、build-arg6、target与cache-from7、onbuild 1、多阶段构建 制作docker镜像时#xff0c;遵循越小越好#xff0c;尽量剔除不需要的内容。比如编译环境#xff0c;程序编译完成之后… 文章目录 1、多阶段构建2、ADD 与 COPY 指令示例 3、CMD指令示例 4、ENTRYPOINT指令示例 5、build-arg6、target与cache-from7、onbuild 1、多阶段构建 制作docker镜像时遵循越小越好尽量剔除不需要的内容。比如编译环境程序编译完成之后就不需要了所以引入多阶段构建剔除不需要的内容。 Docker 17.05版本以后新增了Dockerfile多阶段构建。所谓多阶段构建实际上是允许一个Dockerfile中出现多个 FROM 指令。 多个 FROM 指令的意义 多个 FROM 指令并不是为了生成多根的层关系最后生成的镜像仍以最后一条 FROM 为准之前的FROM 会被抛弃那么之前的FROM 又有什么意义呢 每一条 FROM 指令都是一个构建阶段多条 FROM 就是多阶段构建虽然最后生成的镜像只能是最后一个阶段的结果但是能够将前置阶段中的文件拷贝到后边的阶段中这就是多阶段构建的最大意义。 最大的使用场景是将编译环境和运行环境分离比如之前我们需要构建一个Go语言程序那么就需要用到go命令等编译环境。 1准备工作 # 创建一个目录 mkdir example3 cd example3 # 下载nginx源码包作为素材 curl https://nginx.org/download/nginx-1.21.6.tar.gz ./nginx-1.21.6.tar.gz # 下载app代码 git clone https://gitee.com/nickdemo/helloworld2多阶段构建dockerfile FROM golang:1.18 WORKDIR helloworld COPY ./helloworld ./ RUN go env -w GOPROXYhttps://proxy.golang.com.cn,https://goproxy.cn,direct RUN CGO_ENABLED0 GOOSlinux GOARCHamd64 go build -o app . RUN pwdFROM alpine:latest MAINTAINER fly ENV env1v1 ENV env2v2 LABEL myhello 1.0.0 LABEL env prod COPY --from0 /go/helloworld/app ./ EXPOSE 80 CMD [./app,--param1p1,--param2p2]3也可以通过as关键词为构建阶段指定别名可以提高可读性 FROM golang:1.18 as s0 WORKDIR helloworld COPY ./helloworld ./ RUN go env -w GOPROXYhttps://proxy.golang.com.cn,https://goproxy.cn,direct RUN CGO_ENABLED0 GOOSlinux GOARCHamd64 go build -o app . RUN pwdFROM alpine:latest MAINTAINER fly ENV env1v1 ENV env2v2 LABEL myhello 1.0.0 LABEL env prod COPY --froms0 /go/helloworld/app ./ EXPOSE 80 CMD [./app,--param1p1,--param2p2]4构建镜像 docker build -t hello:1.0.0 -f Dockerfile .执行结果 flyfly:~/workspace/example01$ docker build -t hello:1.0.0 -f Dockerfile . Sending build context to Docker daemon 5.477MB Step 1/15 : FROM golang:1.18 1.18: Pulling from library/golang 32de3c850997: Pull complete fa1d4c8d85a4: Pull complete c796299bbbdd: Pull complete 81283a9569ad: Pull complete c768848b86a2: Pull complete 160a777925fe: Pull complete 1be94824532a: Pull complete Digest: sha256:00d63686b480f6dc866e93ddc4b29efa2db03274a687e6495c2cfbfe615d638e Status: Downloaded newer image for golang:1.18--- fffd0d9a59da Step 2/15 : WORKDIR helloworld--- Running in 9bdebf03ec48 Removing intermediate container 9bdebf03ec48--- 878591379507 Step 3/15 : COPY ./helloworld ./--- 8815ef01802d Step 4/15 : RUN go env -w GOPROXYhttps://proxy.golang.com.cn,https://goproxy.cn,direct--- Running in be7311d25498 Removing intermediate container be7311d25498--- fa13f2963dcd Step 5/15 : RUN CGO_ENABLED0 GOOSlinux GOARCHamd64 go build -o app .--- Running in e21634b2c5d4 go: downloading github.com/gomodule/redigo v1.8.9 go: downloading github.com/spf13/viper v1.12.0 go: downloading github.com/fsnotify/fsnotify v1.5.4 go: downloading github.com/mitchellh/mapstructure v1.5.0 go: downloading github.com/spf13/afero v1.8.2 go: downloading github.com/spf13/cast v1.5.0 go: downloading github.com/spf13/jwalterweatherman v1.1.0 go: downloading github.com/spf13/pflag v1.0.5 go: downloading golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a go: downloading golang.org/x/text v0.3.7 go: downloading github.com/subosito/gotenv v1.3.0 go: downloading github.com/hashicorp/hcl v1.0.0 go: downloading gopkg.in/ini.v1 v1.66.4 go: downloading github.com/magiconair/properties v1.8.6 go: downloading github.com/pelletier/go-toml/v2 v2.0.1 go: downloading gopkg.in/yaml.v3 v3.0.0 go: downloading github.com/pelletier/go-toml v1.9.5 Removing intermediate container e21634b2c5d4--- 6a7e6063f490 Step 6/15 : RUN pwd--- Running in 848c79ebce58 /go/helloworld Removing intermediate container 848c79ebce58--- 608d482ea60f Step 7/15 : FROM alpine:latest latest: Pulling from library/alpine c158987b0551: Downloading latest: Pulling from library/alpine c158987b0551: Pull complete Digest: sha256:8914eb54f968791faf6a8638949e480fef81e697984fba772b3976835194c6d4 Status: Downloaded newer image for alpine:latest--- 49176f190c7e Step 8/15 : MAINTAINER fly--- Running in d565e1cc271a Removing intermediate container d565e1cc271a--- 9e9ec63b551d Step 9/15 : ENV env1v1--- Running in e0a5042b97c3 Removing intermediate container e0a5042b97c3--- 6dee9ea488b0 Step 10/15 : ENV env2v2--- Running in da53cf847942 Removing intermediate container da53cf847942--- ddd5b4d87160 Step 11/15 : LABEL myhello 1.0.0--- Running in bba6401b88f1 Removing intermediate container bba6401b88f1--- e1ac5b88bac8 Step 12/15 : LABEL env prod--- Running in 87c738df9400 Removing intermediate container 87c738df9400--- 7ecca9ec9c29 Step 13/15 : COPY --from0 /go/helloworld/app ./--- ef139abadf70 Step 14/15 : EXPOSE 80--- Running in 47b0d9e3fe01 Removing intermediate container 47b0d9e3fe01--- ca1088ce8cf6 Step 15/15 : CMD [./app,--param1p1,--param2p2]--- Running in f6e3dae8b214 Removing intermediate container f6e3dae8b214--- 429a1b2d8c89 Successfully built 429a1b2d8c89 Successfully tagged hello:1.0.05docker images查看镜像。可以看到生成的镜像只有十几兆不像上一篇中的至少1G多。同时可以看到一个 none 的的中间镜像即s0阶段的镜像这个镜像是多阶段构建抛弃的不需要的内容。 REPOSITORY TAG IMAGE ID CREATED SIZE hello 1.0.0 429a1b2d8c89 4 minutes ago 15.9MB none none 608d482ea60f 4 minutes ago 1.08GB golang 1.18 fffd0d9a59da 2 days ago 965MB alpine latest 49176f190c7e 4 weeks ago 7.05MB6运行镜像 docker run -d -p 81:80 --name myhello hello:1.0.07测试镜像 curl http://localhost:81/ping测试结果 flyfly:~/workspace/example01$ curl http://localhost:81/ping ip 172.17.0.22、ADD 与 COPY 指令 1ADD 与 COPY 不能拷贝上下文以外的文件。 COPY 命令语法格式 COPY src dest //将上下文中源文件拷贝到目标文件 COPY prefix* /destDir/ //将所有prefix 开头的文件拷贝到 destDir 目录下 COPY prefix?.log /destDir/ //支持单个占位符例如 prefix1.log、prefix2.log 等ADD 命令语法 ADD src destADD 命令除了不能用在 multistage 的场景下ADD 命令可以完成 COPY 命令的所有功能并且还可 完成两类的功能 解压压缩文件并把它们添加到镜像中对于宿主机本地压缩文件ADD命令会自动解压并添加到镜像。从 url 拷贝文件到镜像中需要注意url 所在文件如果是压缩包ADD 命令不会自动解压缩。 2对于目录而言COPY 和 ADD 命令具有相同的特点只复制目录中的内容而不包含目录自身。例如 COPY srcDir /destDir/ //只会将源文件夹srcDir下的文件拷贝到 destDir 目录下3COPY 区别于ADD在于Dockerfile中使用multi-stage。 FROM golang:1.18 as stage0 ADD ./helloworld /go/src/helloworld/ WORKDIR /go/src/helloworld RUN go env -w GOPROXYhttps://proxy.golang.com.cn,https://goproxy.cn,direct RUN CGO_ENABLED0 GOOSlinux GOARCHamd64 go build -o app . FROM alpine:latest ENV env1env1value ENV env2env2value MAINTAINER nick LABEL hello 1.0.0 WORKDIR /app/ COPY --fromstage0 /go/src/helloworld/app ./ EXPOSE 80 CMD [./app,--param1p1,--param2p2]示例 1下载nginx tar.gz包作为素材。 curl https://nginx.org/download/nginx-1.21.6.tar.gz ./nginx-1.21.6.tar.gz2编写Dockerfile文件。 FROM golang:1.18 as stage0 # ADD ./helloworld /go/src/helloworld/ COPY ./helloworld /go/src/helloworld/ WORKDIR /go/src/helloworld RUN go env -w GOPROXYhttps://proxy.golang.com.cn,https://goproxy.cn,direct RUN CGO_ENABLED0 GOOSlinux GOARCHamd64 go build -o app . FROM alpine:latest ENV env1env1value ENV env2env2value MAINTAINER nick LABEL hello 1.0.0 ADD https://nginx.org/download/nginx-1.21.6.tar.gz /soft/ COPY nginx-1.21.6.tar.gz /soft/copy/ ADD nginx-1.21.6.tar.gz /soft/add/ WORKDIR /app/ COPY --fromstage0 /go/src/helloworld/app ./ EXPOSE 80 CMD [./app,--param1p1,--param2p2]3构建镜像。 docker build -t hello:1.0.0 -f Dockerfile .4运行容器。 docker run -d --name hello hello:1.0.05查看add和copy的文件。 docker exec -it hello /bin/sh注意目标文件位置要注意路径后面是否带 “/” 带斜杠表示目录不带斜杠表示文件名文件名里带有空格需要再 ADD或COPY指令里用双引号的形式标明 ADD hello world.txt /tmp/hello world.txt3、CMD指令 CMD 指令有三种格式 # shell 格式 CMD command # exec格式推荐格式 CMD [executable,param1,param2] # 为ENTRYPOINT 指令提供参数 CMD [param1,param2]CMD 指令提供容器运行时的默认值这些默认值可以是一条指令也可以是一些参数。一个dockerfile中可以有多条CMD指令但只有最后一条CMD指令有效。CMD参数格式是在CMD指令与ENTRYPOINT指令配合时使用CMD指令中的参数会添加到ENTRYPOINT指令中。一旦dockerfile文件中既存在ENTRYPOINT又存在CMD那么CMD的作用只是为了提供参数而不是为了运行指令的CMD中的参数将作为ENTRYPOINT的默认参数此外如果在docker build的时候指定了参数则ENTRYPOINT最终使用的参数就是docker build指定的参数使用shell 和exec 格式时命令在容器中的运行方式与RUN 指令相同。不同在于RUN指令在构建镜像时执行命令并生成新的镜像。CMD指令在构建镜像时并不执行任何命令而是在容器启动时默认将CMD指令作为第一条执行的命令。如果在命令行界面运行docker run 命令时指定命令参数则会覆盖CMD指令中的命令。 示例 FROM golang:1.18 as stage0 ADD ./helloworld /go/src/helloworld/ WORKDIR /go/src/helloworld RUN go env -w GOPROXYhttps://proxy.golang.com.cn,https://goproxy.cn,direct RUN CGO_ENABLED0 GOOSlinux GOARCHamd64 go build -o app . FROM alpine:latest ENV env1env1value ENV env2env2value MAINTAINER nick LABEL hello 1.0.0 WORKDIR /app/ COPY --fromstage0 /go/src/helloworld/app ./ EXPOSE 80 CMD [./app,--param1p1,--param2p2]构建镜像和运行 docker build -t hello:1.0.0 . # 指定启动命令和参数需要加上./app docker run -d -p 80:80 hello:1.0.0 ./app --param11 --param22 # 指定启动命令为sh docker run -dit -p 80:80 hello:1.0.0 sh说明 如果是使用CMD则在docker run时如果想覆盖dockerfile文件中的参数必须要加上./app来运行程序 访问 curl http://localhost/print/startup执行结果 $ curl http://localhost/print/startup start up params: param1 1 and param2 2 4、ENTRYPOINT指令 ENTRYPOINT指令有两种格式 # shell 格式 ENTRYPOINT command # exec 格式推荐格式 ENTRYPOINT [executable,param1,param2]ENTRYPOINT指令和CMD指令类似都可以让容器每次启动时执行相同的命令但它们之间又有不同。一个Dockerfile中可以有多条ENTRYPOINT指令但只有最后一条ENTRYPOINT指令有效。当使用shell格式时ENTRYPOINT指令会忽略任何CMD指令和docker run 命令的参数并且会运行在bin/sh -c中。推荐使用exec格式使用此格式docker run 传入的命令参数将会覆盖CMD指令的内容并且附加到ENTRYPOINT指令的参数中。CMD可以是参数也可以是指令ENTRYPOINT只能是命令docker run 命令提供的运行命令参数可以覆盖CMD但不能覆盖ENTRYPOINT。一旦dockerfile文件中既存在ENTRYPOINT又存在CMD那么CMD的作用只是为了提供参数而不是为了运行指令的CMD中的参数将作为ENTRYPOINT的默认参数此外如果在docker build的时候指定了参数则ENTRYPOINT最终使用的参数就是docker build指定的参数。NTYRPOINT的使用场景是docker run启动程序时需要带上一些参数使用ENTRYPOINT就不需要在docker run传参数给到ENTRYPOINT时添加./app了。可以通过docker run --entrypoint 替换容器的入口程序。 示例 FROM golang:1.18 as stage0 ADD ./helloworld /go/src/helloworld/ WORKDIR /go/src/helloworld RUN go env -w GOPROXYhttps://proxy.golang.com.cn,https://goproxy.cn,direct RUN CGO_ENABLED0 GOOSlinux GOARCHamd64 go build -o app . FROM alpine:latest ENV env1env1value ENV env2env2value MAINTAINER nick LABEL hello 1.0.0 WORKDIR /app/ COPY --fromstage0 /go/src/helloworld/app ./ EXPOSE 80 ENTRYPOINT [./app,--param1p1,--param2p2]构建和运行 docker build -t hello:1.0.0 . # 指定启动参数不需要加上./app docker run -d -p 80:80 hello:1.0.0 --param11 --param22 # 指定入口程序为sh docker run -dit -p 80:80 --entrypoint sh hello:1.0.05、build-arg dockerfile 预定义参数HTTP_PROXYhttp_proxyHTTPS_PROXYhttps_proxyFTP_PROXYftp_proxyNO_PROXYno_proxyALL_PROXYall_proxy。预定义参数可直接在dockerfile中使用无需使用arg来声明。 FROM golang:1.18 as s0 ADD ./helloworld /go/src/helloworld/ WORKDIR /go/src/helloworld # RUN go env -w GOPROXYhttps://proxy.golang.com.cn,https://goproxy.cn,direct RUN go env -w GOPROXY$http_proxy RUN CGO_ENABLED0 GOOSlinux GOARCHamd64 go build -o app . FROM alpine:latest as s1 ARG wd label tag RUN echo $wd,$label,$tag ENV env1env1value ENV env2env2value MAINTAINER nick LABEL $label $tag WORKDIR $wd COPY --fromstage0 /go/src/helloworld/app ./ EXPOSE 80 ENTRYPOINT [./app,--param1p1,--param2p2]构建 docker build -t hello:1.0.0 --build-arg http_proxyhttps://proxy.golang.com.cn,https://goproxy.cn,direct --build-arg wd/home/app/ --build-arg labelmyhello --build-arg tag1.0.0 --no-cache .6、target与cache-from 对于多阶段构建可以通过–target指定需要重新构建的阶段。–cache-from 可以指定一个镜像作为缓存源当构建过程中dockerfile指令与缓存镜像源指令匹配则直接使用缓存镜像中的镜像层从而加快构建进程。可以将缓存镜像推送到远程注册中心提供给不同的构建过程使用在使用前需要先pull到本地。 FROM golang:1.18 as s0 ADD ./helloworld /go/src/helloworld/ WORKDIR /go/src/helloworld RUN go env -w GOPROXYhttps://proxy.golang.com.cn,https://goproxy.cn,direct RUN CGO_ENABLED0 GOOSlinux GOARCHamd64 go build -o app . FROM alpine:latest as s1 ENV env1env1value ENV env2env2value MAINTAINER nick LABEL hello 1.0.0 WORKDIR /app COPY --froms0 /go/src/helloworld/app ./ EXPOSE 80 ENTRYPOINT [./app,--param1p1,--param2p2]构建 # 重新构建s0阶段的镜像可以将此镜像重新打个tag然后push到远端供多人共享 docker build -t prehello:1.0.0 --target s0 . # 引用s0阶段的镜像并重新构建s1 docker build -t hello:1.0.0 --cache-from prehello:1.0.0 --target s1 .说明 本地如果不存在s0阶段的镜像的话引用s0阶段的镜像重新构建s1的时候每次都会重新构建s0因为本地不存在s0阶段的镜像本地如果存在s0阶段的镜像引用s0阶段的镜像就不需要重新构建s0了 7、onbuild onbuild指令将指令添加到镜像中当镜像作为另一个构建的基础镜像时将触发这些指令执行。触发指令将在下游构建的上下文中执行。注意onbuild指令不会影响当前构建但会影响下游构建。 1生成自定义基础镜像 FROM golang:1.18 ONBUILD ADD ./helloworld /go/src/helloworld/ ONBUILD WORKDIR /go/src/helloworld ONBUILD RUN go env -w GOPROXYhttps://proxy.golang.com.cn,https://goproxy.cn,direct ONBUILD RUN CGO_ENABLED0 GOOSlinux GOARCHamd64 go build -o app .构建 docker build -t mygolang:1.0.0 .2通过自定义基础镜像构建新的镜像 FROM mygolang:1.0.0 as s0 FROM alpine:latest as s1 ENV env1env1value ENV env2env2value MAINTAINER nick LABEL hello 1.0.0 WORKDIR /app COPY --froms0 /go/src/helloworld/app ./ EXPOSE 80 ENTRYPOINT [./app,--param1p1,--param2p2]构建 docker build -t hello:1.0.0 .
http://www.pierceye.com/news/223384/

相关文章:

  • 代码怎么做网站网站建设合同 简单
  • 耐克官网网站设计做一个企业网站需要多少钱
  • 动易手机网站自己开发小程序要多少钱
  • 英迈思做的网站怎么样网站做m版
  • 通州设计网站建设城市宣传片制作公司
  • 南安网站设计网站创意
  • 建设部网站造价注册seo优化易下拉霸屏
  • 西安网站外包上海网站被查
  • 建简单网站高端建筑铝型材
  • wordpress 网站访问量高端建筑物图片
  • seo网站推广目的WordPress灯箱效果移动适配
  • 梅州正规的免费建站微信应用开发公司
  • 百度做网站教程网站建设与维护ppt
  • 化妆品网站建设方案做咩有D网站响网吧上不了
  • 网站 迁移房地产销售基础知识大全
  • 门户网站建设汇报材料网站开发与制作中期报告
  • 网站建设可以自己弄吗知乎做网站必须要服务器吗
  • 怎么制作自己的小程序专业seo整站优化
  • 做网站是干什么用的苏宁易购网站上的营销页面
  • 浪网站制作网站开发是无形资产
  • 做阿里巴巴网站可以贷款吗seo如何快速排名百度首页
  • 公司做网站都咨询哪些问题网站平台建设视频教学
  • 西安电子商务网站建设网站里面的链接怎么做
  • 郑州陆港开发建设有限公司网站58招商加盟项目
  • 徐州高端网站建设个人网站设计首页界面
  • 山西企业建站系统平台关键词 优化 网站
  • 地板网站建设方案有什么做美食的网站
  • 网站建设丶金手指专业网站幻灯片 字段
  • 网站开发技术总结干完房产中介整个人废了
  • iis建站安装wordpress对网站建设的评价语