zoukankan      html  css  js  c++  java
  • Dockerfile 的常用参数注解和范例

    一、 docker hello world

    • 1.1 Dockerfile
    FROM centos:7.5.1804
    MAINTAINER 11@qq.com
    CMD echo "hello world"
    
    • 1.2 注解
    FROM centos:7.5.1804
    # 指定源于一个基础镜像 centos:7.5.1804
    # FROM <image>[:<tag>] [AS <name>]
    
    MAINTAINER 11@qq.com
    # 维护者/拥有者
    # MAINTAINER <name>
    
    CMD echo "hello world"
    # 运行命令
    # CMD <command>   or CMD [<command>]
    # 整个Dockerfile 中只能有一个,多个会被覆盖的
    
    • 1.3 构建
    // 在Dockerfile 所在的目录下
    docker build -t hello .
    

    二、Dockerfile 构建go程序镜像

    • 1、Dockerfile
    FROM golang:1.12 as build
    
    ENV GOPROXY https://goproxy.cn
    ENV GO111MODULE on
    
    WORKDIR /go/cache
    
    ADD go.mod .
    ADD go.sum .
    RUN go mod download
    
    WORKDIR /go/release
    
    ADD . .
    
    RUN GOOS=linux CGO_ENABLED=0 go build -ldflags="-s -w" -installsuffix cgo -o app
    
    FROM alpine as prod
    ARG MODE="debug"
    COPY --from=build /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
    COPY --from=build /go/release /go/release/ /home/ 
    
    WORKDIR /home
    
    
    ENV MODE ${MODE}
    
    CMD ["./app"]
    
    
    • 2、注解
    FROM golang:1.12 as build
    # 指定源于一个基础镜像 golang:1.12  并起一个别名 build
    # FROM <image>[:<tag>] [AS <name>]
    
    
    ENV GOPROXY http://goproxy.cn
    ENV GO111MODULE on
    # ENV 在镜像内设置环境变量
    # ENV <key> <value>
    
    WORKDIR /go/cache
    # 指定接下来的参数工作目录  你可以理解为 cd /go/cache   ,目录不存在时会自动创建
    # WORKDIR <dir>
    
    ADD go.mod .
    ADD go.sum .
    # 这里的意思是 go.mod 和go.sum  添加到 镜像的工作目录下即/go/cache 下
    # ADD [--chown=<user>:<group>] <src>... <dest>
    
    
    RUN go mod download
    # 运行 go mod download
    # RUN <command>
    
    
    COPY . .
    # 将当前目录的所以文件及文件夹 copy 到 工作目录下
    # copy <src> <desc>
    
    RUN GOOS=linux CGO_ENABLED=0 go build -ldflags="-s -w" -installsuffix cgo -o app
    # 编译go 程序
    
    FROM alpine as prod
    # 再指定一个基础镜像alpine 并起别名 prod
    
    
    ARG MODE="debug"
    # 通过docker构建镜像时, 外部传参, 默认参数debug 
    # --build-arg MODE=release  外部docker build 时添加这个参数,意思是设置MODE=release
    # ARG <key>[=<value>] 
    
    
    COPY --from=build /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
    COPY --from=build /go/release /go/release/ /home/ 
    # 将来自build(go:1.12) 镜像下的 /usr/share/zoneinfo/Asia/Shanghai  /etc/ssl/certs/ca-certificates.crt  /go/release /go/release/ 
    # 复制到 prod 镜像的 /etc/localtime  /etc/ssl/certs/ca-certificates.crt  home/   
    # COPY [--from=<image_alias>] <src>...<desc>
    
    
    WORKDIR /home
    # 指定工作目录 可以理解为 cd /home
    
    
    ENV MODE ${MODE}
    # 设置环境变量 ${MODE} 使用的是ARG 里面的MODE
    
    CMD ["./app"]
    # CMD 执行命令
    
    • 1.3 构建
    docker build --build-arg MODE=release -t app .
    // --build-arg 外部传传参数,  多个参数就添加多个--build-arg
    

    refer

    dockerfile 官方文档

  • 相关阅读:
    mitmproxy抓包工具
    java基础|int和Integer的区别
    Vue|退出功能
    Vue|分页处理
    apt-get本地软件源搭建
    rqt_plot报错
    创建ROS 工作空间时出现:程序“catkin_init_workspace”尚未安装,程序“catkin_make”尚未安装。
    ubuntu16.04安装ROS
    debian及Ubuntu各版本下载地址获取
    解决sudo rosdep init和rosdep update的错误
  • 原文地址:https://www.cnblogs.com/xiaobaiskill/p/12046363.html
Copyright © 2011-2022 走看看