zoukankan      html  css  js  c++  java
  • docker 创建镜像及运行容器

    一、打包镜像并运行

    1、项目代码打包上传服务器及相关配置文件ip设置

    2、编写dockerfile

    Docker通过读取Dockerfile中的指令自动生成映像

    Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释

    FROM:指定基础镜像,必须为第一个命令

    格式:
      FROM <image>
      FROM <image>:<tag>
      FROM <image>@<digest>
    示例:
      FROM golang:latest
    注:
      tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像
     

    MAINTAINER: 维护者信息

    格式:
        MAINTAINER <name>
    示例:
        MAINTAINER Jasper Xu
        MAINTAINER sorex@163.com
        MAINTAINER Jasper Xu <sorex@163.com>

    WORKDIR:工作目录,类似于cd命令

    格式:
        WORKDIR /path/to/workdir
    示例:
        WORKDIR /a  (这时工作目录为/a)
        WORKDIR b  (这时工作目录为/a/b)
        WORKDIR c  (这时工作目录为/a/b/c)
    注:
      通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行

    ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

    格式:
        ADD <src>... <dest>
        ADD ["<src>",... "<dest>"] 用于支持包含空格的路径
    示例:
        ADD hom* /mydir/          # 添加所有以"hom"开头的文件
        ADD hom?.txt /mydir/      # ? 替代一个单字符,例如:"home.txt"
        ADD test relativeDir/     # 添加 "test" 到 `WORKDIR`/relativeDir/
        ADD test /absoluteDir/    # 添加 "test" 到 /absoluteDir/

    RUN:构建镜像时执行的命令

    RUN用于在镜像容器中执行命令,其有以下两种命令执行方式:
    shell执行
    格式:
        RUN <command>
    exec执行
    格式:
        RUN ["executable", "param1", "param2"]
    示例:
        RUN ["executable", "param1", "param2"]
        RUN apk update
        RUN ["/etc/execfile", "arg1", "arg1"]
    注:
      RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache参数,如:docker build --no-cache

    EXPOSE:指定于外界交互的端口

    格式:
        EXPOSE <port> [<port>...]
    示例:
        EXPOSE 80 443
        EXPOSE 8080
    EXPOSE 11211/tcp 11211/udp
    注:
      EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,或通过-P参数来发布EXPOSE导出的所有端口

    ENV:设置环境变量

    格式:
        ENV <key> <value>  #<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量
        ENV <key>=<value> ...  #可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果<key>中包含空格,可以使用来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行
    示例:
        ENV myName John Doe
        ENV myDog Rex The Dog
        ENV myCat=fluffy

    ENTRYPOINT: 的目的和 CMD 一样,都是在指定容器启动程序及参数

    示例:

    FROM golang:latest
    MAINTAINER jili "jilitest@gmail.com"
    # docker中的工作目录
    WORKDIR $GOPATH/testdocker
    # 将当前目录同步到docker工作目录下,也可以只配置需要的目录和文件(配置目录、编译后的程序等)
    ADD . ./
    # 由于所周知的原因,某些包会出现下载超时。这里在docker里也使用go module的代理服务
    ENV GO111MODULE=on
    ENV GOPROXY="https://goproxy.io"
    # 指定编译完成后的文件名,可以不设置使用默认的,最后一步要执行该文件名
    RUN go build -o testdocker .
    EXPOSE 80
    # 设置时区为上海
    ENV TZ=Asia/Shanghai
    # 这里跟编译完的文件名一致
    ENTRYPOINT  ["./testdocker"]

  • 相关阅读:
    AcWing 1135. 新年好 图论 枚举
    uva 10196 将军 模拟
    LeetCode 120. 三角形最小路径和 dp
    LeetCode 350. 两个数组的交集 II 哈希
    LeetCode 174. 地下城游戏 dp
    LeetCode 面试题 16.11.. 跳水板 模拟
    LeetCode 112. 路径总和 递归 树的遍历
    AcWing 1129. 热浪 spfa
    Thymeleaf Javascript 取值
    Thymeleaf Javascript 取值
  • 原文地址:https://www.cnblogs.com/forgo/p/14866959.html
Copyright © 2011-2022 走看看