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

湖南建设监理工程网站百度云加速

湖南建设监理工程网站,百度云加速,做网站为什么要用源码,电脑配件经营网站的建设论文Dockerfile详解 Dockerfile是一个组合映像命令的文本#xff1b;可以使用在命令行中调用任何命令#xff1b;Docker通过dockerfile中的指令自动生成镜像。 通过docker build -t repository:tag ./ 即可构建#xff0c;要求#xff1a;./下存在Dockerfile文件 之前我们聊的…Dockerfile详解 Dockerfile是一个组合映像命令的文本可以使用在命令行中调用任何命令Docker通过dockerfile中的指令自动生成镜像。 通过docker build -t repository:tag ./ 即可构建要求./下存在Dockerfile文件 之前我们聊的镜像分层这个层怎么分的就是由Dockerfile中的每一条指令构成 编写规则 文件名必须是 DockerfileDockerfile中所用的所有文件一定要和Dockerfile文件在同一级父目录下Dockerfile中相对路径默认都是Dockerfile所在的目录Dockerfile中一能写到一行的指令一定要写到一行因为每条指令都被视为一层层多了执行效率就慢Dockerfile中指令大小写不敏感但指令都用大写约定俗成Dockerfile 非注释行第一行必须是 FROMDockerfile 工作空间目录下支持隐藏文件(.dockeringore)类似于git的.gitingore 原文链接 作者以九为书 链接https://www.jianshu.com/p/4508784f6ddc 指令详解 FROM基础镜像 FROM image:tag [as other_name] # tag可选不写默认是latest版FROM是Dockerfile文件开篇第一个非注释行代码用于为镜像文件构建过程指定基础镜像后续的指令都基于该基础镜像环境运行基础镜像可以是任何一个镜像文件as other_name是可选的通常用于多阶段构建有利于减少镜像大小使用是通过--from other_name使用,例如COPY --from other_name LABEL镜像描述信息 LABEL authorzp wang testqq.com LABEL describetest image# 或 LABEL authorzp wang testqq.com describetest image# 或 LABEL authorzp wang testqq.com \describetest imageLABEL指令用来给镜像以键值对的形式添加一些元数据信息可以替代MAINTAINER指令会集成基础镜像中的LABELkey相同会被覆盖 MAINTAINER添加作者信息 MAINTAINER zp wang test163.com慢慢废弃 COPY从构建主机复制文件到镜像中 COPY src destCOPY [src, src, ... dest]src要复制的源文件或目录支持通配符src必须在build所在路径或子路径下不能是其父目录src是目录。其内部的文件和子目录都会递归复制但src目录本身不会被复制如果指定了多个src或使用了通配符这dest必须是一个目录且必须以/结尾 #-----------------------------------------分割线--------------------------------------------#dest目标路径即镜像中文件系统的路径dest如果不存在会自动创建包含其父目录路径也会被创建 # 拷贝一个文件 COPY testFile /opt/# 拷贝一个目录 COPY testDir /opt/testDirtestDir下所有文件和目录都会被递归复制 目标路径要写testDir否则会复制到/opt下 ADD从构建宿主机复制文件到镜像中 类似于COPY指令但ADD支持tar文件还让URL路径 ADD src destADD [src,src... dest]src如果是一个压缩文件(tar)被被解压为一个目录如果是通过URL下载一个文件不会被解压src如果是多个或使用了通配符则dest必须是以/结尾的目录否则src会被作为一个普通文件src的内容将被写入到dest WORKDIR设置工作目录 类似于cd命令为了改变当前的目录域 此后RUN、CMD、ENTRYPOINT、COPY、ADD等命令都在此目录下作为当前工作目录 WORKDIR /opt如果设置的目录不存在会自动创建包括他的父目录一个Dockerfile中WORKDIR可以出现多次其路径也可以为相对路径,相对路径是基于前一个WORKDIR路径WORKDIR也可以调用ENV指定的变量 ENV设置镜像中的环境变量 # 一次设置一个 ENV key value# 一次设置多个 ENV keyvalue key1value1 key2value2 .....使用环境变量的方式 $varname ${varname} ${varname:-default value} # 设置一个默认值如果varname未被设置值为默认值 ${varname:default value} # 设置默认值不管值存不存在都使用默认值USER设置启动容器的用户 # 使用用户名 USER testuser# 使用用户的UID USER UIDRUN镜像构建时执行的命令 # 语法1shell 形式 RUN command1 command2# 语法2exec 形式 RUN [executable,param1,[aram2]]# 示例 RUN echo 1 echo 2 RUN echo 1 echo 2 \echo 3 echo 4RUN [/bin/bash,-c,echo hello world]RUN 在下一次建构期间会优先查找本地缓存若不想使用缓存可以通过--no-cache解除 docker build --no-cacheRUN 指令指定的命令是否可以执行取决于 基础镜像shell形式默认使用/bin/sh -c 执行后面的command 可以使用 或 \ 连接多个命令exec形式exec形式被解析为JSON序列这意味着必须使用双引号 与 shell 形式不同exec 形式不会调用shell解析。但exec形式可以运行在不包含shell命令的基础镜像中 例如RUN [echo,$HOME] ;这样的指令 $HOME并不会被解析必须RUN [/bin/sh,-c,echo $HOME] EXPOSE为容器打开指定的监听端口以实现与外部通信 EXPOSE port/protocolEXPOSE 80 EXPOSE 80/http EXPOSE 2379/tcpport端口号 protocol协议类型默认TCP协议tcp/udp/http/https 并不会直接暴露出去docker run时还需要-P指定才可以这里更像是一个说明VOLUME实现挂载功能将宿主机目录挂载到容器中 VOLUME [/data] # [“/data”]可以是一个JsonArray 也可以是多个值VOLUME /var/log VOLUME /var/log /opt三种写法都是正确的 VOLUME类似于docker run -v /host_data /container_data 。 一般不需要在Dockerfile中写明且在Kubernetes场景几乎没用CMD为容器设置默认启动命令或参数 # 语法1shell形式 CMD command param1 param2 ...# 语法2exec形式 CMD [executable,param1,param2]# 语法3,还是exec形式不过仅设置参数 CMD [param1,param2]CMD运行结束后容器将终止CMD可以被docker run后面的命令覆盖 一个Dockerfile只有顺序向下的最后一个CMD生效语法1shell形式默认/bin/sh -c此时运行为shell的子进程能使用shell的操作符(if、环境变量、? *通配符等) 注意进程在容器中的 PID ! 1这意味着该进程并不能接受到外部传入的停止信号docker stop语法2exec形式CMD [executable,param1,param2]不会以/bin/sh -c运行非shell子进程因此不支持shell的操作符 若运行的命令依赖shell特性可以手动启动CMD [/bin/sh,-c,executable,param1...]语法3exec形式CMD [param1,param2]一般结合ENTRYPOINT指令使用ENTRYPOINT用于为容器指定默认运行程序或命令 与CMD类似但存在区别主要用于指定启动的父进程PID1 # 语法1shell形式 ENTRYPOINT command# 语法2exec形式 ENTRYPOINT [/bin/bash,param1,param2]ENTRYPOINT设置默认命令不会被docker run命令行指定的参数覆盖指定的命令行会被当做参数传递给ENTRYPOINT指定的程序。 docker run命令的 --entrypoint选项可以覆盖ENTRYPOINT指令指定的程序 一个Dockerfile中可以有多个ENTRYPOINT但只有最后一个生效 ENTRYPOINT主要用于启动父进程后面跟的参数被当做子进程来启动 ARG指定环境变量用于构建过程 ARG name[default value]ARG test_name ARG nother_namewzpARG指令定义的参数在构建过程以docker build --build-arg test_nametest 形式赋值若ARG中没有设置默认值构建时将抛出警告[Warning] One or more build-args..were not consumedDocker默认存在的ARG 参数可以在--build-arg时直接使用HTTP_PROXY/http_proxy/HTTPS_PROXY/https_proxy/FTP_PROXY/ftp_proxy/NO_PROXY/no_proxyONBUILD为镜像添加触发器 ONBUILD可以为镜像添加一个触发器其参数可以是任意一个Dockerfile指令。 ONBUILD dockerfile_exec param1 param2ONBUILD RUN mkdir mydir该指令对于使用该Dockerfile构建的镜像并不会生效只有当其他Dockerfile以当前镜像作为基础镜像时被触发 例如Dockfile A 构建了镜像ADockfile B中设置FROM A此时构建镜像B是会运行ONBUILD设置的指令STOPSINGAL设置停止时要发送给PID1进程的信号 主要的目的是为了让容器内的应用程序在接收到signal之后可以先做一些事情实现容器的平滑退出如果不做任何处理容器将在一段时间之后强制退出会造成业务的强制中断这个时间默认是10s。 STOPSIGNAL signal默认的停止信号为SIGTERM也可以通过docker run -s指定 HEALTHCHECK指定容器健康检查命令 当在一个镜像指定了 HEALTHCHECK 指令后用其启动容器初始状态会为 starting在 HEALTHCHECK 指令检查成功后变为 healthy如果连续一定次数失败则会变为 unhealthy HEALTHCHECK [OPTIONS] CMD command# 示例 HEALTHCHECK --interval5s --timeout3s \CMD curl -fs http://localhost/ || exit 1 # 如果执行不成功返回1出现多次只有最后一次生效 OPTIONS选项 --interval30两次健康检查的间隔默认为 30 秒 --timeout30健康检查命令运行的超时时间超过视为失败默认30秒 --retries3指定失败多少次视为unhealth默认3次 返回值 0成功 1失败 2保留 SHELL指定shell形式的默认值 SHELL 指令可以指定 RUN、ENTRYPOINT、CMD 指令的 shellLinux 中默认为[“/bin/sh”, “-c”] Windows默认[“CMD”,“/S”,“/C”] 通常用于构建Windows用的镜像 SHELL [/bin/bash,-c]SHELL [powershell, -command]# 示例比如在Windows时默认shell是[CMD,/S,/C] RUN powershell -command Execute-MyCmdlet -param1 c:\foo.txt # docker调用的是cmd /S /C powershell -command Execute-MyCmdlet -param1 c:\foo.txt RUN [powershell, -command, Execute-MyCmdlet, -param1 \c:\\foo.txt\] # 这样虽然没有调用cmd.exe 但写起来比较麻烦所以可以通过SHELL [powershell, -command] 这样省去前边的powershell -command构建一个运行在一个我自己剪裁过的基础系统二进制包 上的 Java8 镜像 # 通过centos7的二进制包假设是我自己做了系统裁剪移植 FROM scratch ADD centos-7-x86_64-docker.tar.xz /RUN yum install -y wget \yum clean all \ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \echo Asia/Shanghai /etc/timezoneENV JAVA_VERSION jdk1.8.0_271 ENV JAVA_HOME /usr/lib/${JAVA_VERSION} ENV PATH ${JAVA_HOME}/bin:$PATH# 涉及改变镜像大小的指令尽量放到同一行这样构建过程中的删除指令对减小体积才能生效 RUN wget --no-cookies --no-check-certificate --header Cookie: gpw_e24http%3A%2F%2Fwww.oracle.com%2F; oraclelicenseaccept-securebackup-cookie \http://download.oracle.com/otn-pub/java/jdk/8u271-b09/61ae65e088624f5aaa0b1d2d801acb16/jdk-8u271-linux-x64.tar.gz -O /usr/lib/jdk-8u271-linux-x64.tar.gz \tar -xf /usr/lib/jdk-8u271-linux-x64.tar.gz -C /usr/lib/ \rm -rf /usr/lib/jdk-8u271-linux-x64.tar.gz \rm -rf ${JAVA_HOME}/src.zip \${JAVA_HOME}/lib/visualvm \${JAVA_HOME}/jre/lib/plugin.jar \${JAVA_HOME}/jre/bin/javaws \${JAVA_HOME}/jre/lib/desktop \${JAVA_HOME}/jre/plugin \${JAVA_HOME}/jre/lib/deploy* \${JAVA_HOME}/jre/lib/amd64/libglass.so \${JAVA_HOME}/jre/lib/amd64/libgstreamer-lite.so \${JAVA_HOME}/jre/lib/amd64/libjavafx*.so \${JAVA_HOME}/jre/lib/amd64/libjfx*.soCMD [/bin/bash]选⽤最⼩化基础镜像 编写 Dockerfile 时通常使⽤⼀个通⽤的容器镜像作为基础镜像例如 eclipse-temurin:8-alpine 选⽤最 ⼩化基础镜像即只包含项⽬确实需要的系统⼯具和库的镜像较⼩的基础镜像可以确保在⼀个新节点上拉起容器 时有更快的启动时间节省了从镜像仓库拉取镜像的⽹络请求时间并且能够最⼩化系统的攻击⾯确保所⽤的 操作系统是安全的⼀般推荐采⽤以 alpine 系统为基础的基础镜像。 # 举一些例子 golang:1.11-alpine3.9 golang:1.15 openjdk:8 adoptopenjdk:8u242-b08-jdk-hotspot-bionic node:10-alpine node:16.14.0 node:12-buster-slim python:3.7-stretch python:3.7-slim python:3.7-alpine nginx:alpine busybox:alpine centos:alpineDockerfile生产示例 # Build the manager binary FROM golang:1.16 as builder WORKDIR /workspaceARG go_proxyhttps://goproxy.cn ENV GO111MODULEon \GOPROXY${go_proxy} \CGO_ENABLED0# Copy the Go Modules manifests COPY go.mod go.mod COPY go.sum go.sum # cache deps before building and copying source so that we dont need to re-download as much # and so that source changes dont invalidate our downloaded layer # ENV GOPROXY https://goproxy.cn/ RUN go mod download# Copy the go source COPY main.go main.go#COPY api/ api/ COPY controllers/ controllers/ COPY pkg/ pkg/# Build RUN go build -ldflags -w -s -a -o manager main.go# Use distroless as minimal base image to package the manager binary # Refer to https://github.com/GoogleContainerTools/distroless for more details # FROM gcr.azk8s.cn/distroless/static:latest FROM alpine:3.14RUN sed -i s/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g /etc/apk/repositories apk update apk add subversionWORKDIR / COPY --frombuilder /workspace/manager . # USER nonroot:nonrootENTRYPOINT [/manager]FROM golang:1.15-alpine as builder WORKDIR /app COPY test.go /app RUN go build -o test test.goFROM alpine:3.16RUN apk --no-cache --update add \python3 cmd:pip3 vim curl python3-dev gcc musl-dev openssh skopeo openjdk8 zip makeCOPY requirements.txt . COPY test.zip . RUN pip3 install --upgrade pip pip3 install -r /requirements.txt \ unzip -o -d . /test.zip rm -f test.zipCOPY --frombuilder /app/test /usr/local/bin/testWORKDIR /app COPY . /app RUN rm -f /app/test.zipCMD [/app/docker-run-cmd.sh]FROM golang:1.15-alpine as builder WORKDIR /app COPY test.go /app RUN go build -o test test.goFROM alpine:3.16RUN apk --no-cache --update add \python3 cmd:pip3 vim curl python3-dev gcc musl-dev openssh skopeo openjdk8 zip makeCOPY requirements.txt . COPY test.zip . RUN pip3 install --upgrade pip pip3 install -r /requirements.txt \ unzip -o -d . /test.zip rm -f test.zipCOPY --frombuilder /app/test /usr/local/bin/testWORKDIR /app COPY . /app RUN rm -f /app/test.zipCMD [/app/docker-run-cmd.sh]
http://www.zqtcl.cn/news/18067/

相关文章:

  • 如何宣传商务网站从化手机网站建设
  • 铁道部网上订票网站素材服务器个人买能干什么
  • 做网站付款方式公司网站建设费计入哪个科目
  • 丽江市建设局网站wordpress主题两边空白区域怎么添加图案
  • 个人做购物商城网站会罚款吗番禺卫生人才网
  • 网站备案可以强制撤销吗中国菲律宾直播
  • 武强营销型网站建设费用基本的网站建设知识
  • 汕头企业网站建设设计济南网站技术
  • 可以做问答的网站百度地图嵌入wordpress
  • 山西科技网站建设多媒体网站建设
  • 学校网站模板代码学校网站建设计划书
  • 网上学学网站开发工程师网站建设中常用的音频格式和视频格式
  • 阿里云wordpress建站教程wordpress选择模板没
  • 在线crm网站建站如何防止网站挂马
  • 如何修改网站底部观看床做视频网站
  • 青岛建筑模板福州搜索优化网站
  • 网站页脚的制作杭州企业建站模板
  • 合适的网站建设的公司怎么找wordpress统计在线人数
  • 百度收录排名好的网站网站通知做文献的格式
  • 公司建网站搭建服务器免费网站正能量入口下载
  • 罗湖附近公司做网站建设哪家好域名跟空间都有了怎么做网站
  • 网站查询访问域名调用wordpress数据
  • 微网站开发公司h5网页版制作
  • 手机网站模板cms泸州中泸集团建设有限公司网站
  • 电子商务网站的建站目标东莞做网站dgjcwl
  • asp网站的配置wordpress强制分享代码
  • 怎么给餐饮店做网站做个购物网站
  • 怎样手机做网站教程什么软件可以搜索关键词精准
  • 网站建设1影响力公司wordpress无法用ftp
  • 网站设计的硬件邢台招聘网最新招聘信息