zoukankan      html  css  js  c++  java
  • Docker 镜像管理

    一、镜像仓库

      镜像存储中的核心概念仓库(Repository)是镜像存储的位置。Docker 注册服务器(Registry)是仓库存储的位置。每个仓库包含不同的镜像。Docker Hub 是Docker官方提供公共仓库,提供大量的常用镜像,由于国内网络原因经常连接Docker Hub会比较慢,所以我们也可以选择一些国内提供类似Docker Hub镜像服务站点。

    镜像搜索:

    root@ryj:/home/wuh151# docker search mysql
    NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    mysql                             MySQL is a widely used, open-source relation…   10247               [OK]                
    mariadb                           MariaDB is a community-developed fork of MyS…   3785                [OK]                
    mysql/mysql-server                Optimized MySQL Server Docker images. Create…   749                                     [OK]
    percona                           Percona Server is a fork of the MySQL relati…   514                 [OK]                
    centos/mysql-57-centos7           MySQL 5.7 SQL database server                   86                                      

    镜像拉取:

    root@ryj:/home/wuh151# docker pull mysql
    Using default tag: latest
    latest: Pulling from library/mysql
    6ec7b7d162b2: Pull complete 
    fedd960d3481: Pull complete 
    7ab947313861: Pull complete

    本地镜像展示:

    root@ryj:/home/wuh151# docker image ls
    REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
    mysql                                       latest              ab2f358b8612        2 days ago          545MB
    harbor.lingda.com/common/java               8-jre-alpine        fdc893b19a14        3 years ago         108MB

    二、Docker image 指令

    root@ryj:/home/wuh151# docker image --help
    
    Usage:	docker image COMMAND
    
    Manage images
    
    Commands:
      build       Build an image from a Dockerfile
      history     Show the history of an image
      import      Import the contents from a tarball to create a filesystem image
      inspect     Display detailed information on one or more images
      load        Load an image from a tar archive or STDIN
      ls          List images
      prune       Remove unused images
      pull        Pull an image or a repository from a registry
      push        Push an image or a repository to a registry
      rm          Remove one or more images
      save        Save one or more images to a tar archive (streamed to STDOUT by default)
      tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
    镜像构建:
    docker build -t registry/server-name:1.0 .
    (仓库) (名称) (tag)(路径)

    三、Dockerfile 创建镜像

      Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令。Dockerfile的指令是忽略大小写的,建议使用大写,使用#作为注释,每一行只支持一条指令,每条指令可以携带多个参数。
      Dockerfile的指令根据作用可以分为两种,构建指令和设置指令。构建指令用于构建image,其指定的操作不会在运行image的容器上执行;设置指令用于设置image的属性,其指定的操作将在运行image的容器中执行

          Dockerfile文件示例:

    FROM harbor.lingda.com/common/java:8-jre-alpine
    
    ARG version
    ARG RUN_USER=genius
    ARG RUN_GROUP=genius
    
    # 通常需要修改的参数instanceHost,zkStr
    # javaOpts,configRoot。可以根据运行情况修改。
    # 构建带进来的参数version,appName。通常不需要修改。
    # 服务运行的端口:instancePort。非特殊情况,不需要修改。
    
    ENV	MAIN_CLASS="uupm-service-user.jar"
    ENV	JAVA_OPTS=" -server -Xms512M -Xmx1024M -XX:CompressedClassSpaceSize=512M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=1024M"
    ENV	NACOS_HOST="http://nacos.lingda.com"
    ENV	NACOS_PORT="80"
    ENV	NACOS_CONTEXT_PATH="nacos"
    ENV	NACOS_USER="nacos"
    ENV	NACOS_PASSWD="nacos"
    ENV	NACOS_NAMESPACE_ID="dev-nacos"
    ENV	VERSION="dev-nacos"
    ENV	INSTANCE_HOST=192.168.101.39
    ENV	INSTANCE_PORT=11002
    ENV TZ=Asia/Shanghai
    
    
    LABEL app=uupm-service-user
    
    WORKDIR /opt
    
    RUN set -eux; 
        addgroup -g 1000 ${RUN_GROUP}; 
        adduser -D -u 1000 -G ${RUN_GROUP} ${RUN_USER}; 
        mkdir logs && chown ${RUN_USER}:${RUN_GROUP} logs
    
    USER ${RUN_USER}
    
    COPY *.jar application.properties logback.xml bootstrap.properties /opt/
    VOLUME ["/opt/logs"]
    
    ENTRYPOINT java ${javaOpts} -jar *.jar --logging.config=logback.xml
    EXPOSE $instancePort
    View Code

          Dockerfile指令示例:

    指令 语法 描述

    FROM

    FROM < image>[:< tag> | @< digest>]

    示例:FROM mysql:5.6

    设置基础镜像。镜像都是从一个基础镜像(操作系统或其他镜像)生成,可以在一个Dockerfile中添加多条FROM指令,一次生成多个镜像   注意:如果忽略tag选项,会使用latest镜像

    MAINTAINER

    MAINTAINER < name> 

    示例:MAINTAINER yj Rao

    设置镜像作者

    RUN

    RUN < command>

    示例:RUN apk update

    RUN ["executable", "param1", "param2"]

    示例:RUN ["./test.php", "dev", "offline"]

    RUN指令会生成容器,在容器中执行脚本,容器使用当前镜像,脚本指令完成后,Docker Daemon会将该容器提交为一个中间镜像,供后面的指令使用。Dockerfile 的指令每执行一次都会在docker上新建一层。所以过多无意义的层,会造成镜像膨胀过大。

    RUN指令第一种方式为shell方式,使用/bin/sh -c < command>运行脚本,可以在其中使用将脚本分为多行

    RUN指令第二种方式为exec方式,镜像中没有/bin/sh或者要使用其他shell时使用该方式,其不会调用shell命令

    等价于 RUN ./test.php dev offline

    CMD

    CMD < command>

    CMD ["executable", "param1", "param2"]

    设置容器的启动命令。如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。 CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。CMD ["<param1>","<param2>",...] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

    LABEL 

    LABEL < key>=< value> < key>=< value> …

    设置镜像的标签,不同标签之间通过空格隔开。每条指令都会生成一个镜像层

    示例:LABEL version="1.0" description="这是一个Web服务器" by="IT笔录"

    EXPOSE

    EXPOSE < port> < port> …

    EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

    ENV

    ENV <key> <value>

    ENV <key1>=<value1> <key2>=<value2>...

    设置镜像中的环境变量。通过${变量名}或者 $变量名使用变量

    COPY

    COPY <src>... <dest>

    复制指令,从上下文目录中复制文件或者目录到容器里指定路径。

    ADD

    ADD <src>... <dest>

    与copy类似,但是src为压缩文件,并且压缩方式为gzip,bzip2或xz时,指令会将其解压为目录 

    ENTRYPOINT

    ENTRYPOINT [“executable”,”param1”,”param2”]

    ENTRYPOINT command param1 param2

    设置容器的入口程序,入口程序是容器启动时执行的程序。每个Dockerfile只能够包含一个entrypoint,多个entrypoint只有最后一个有效,当定义了entrypoint以后,CMD只能够作为参数进行传递。

    VOLUME

    VOLUME ["/path/to/dir"]

    用来创建一个在image之外的mount point,用来在多个container之间实现数据共享

    USER

    USER < name> 

    使用USER指定用户后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT都将使用该用户。

    WORKDIR

    WORKDIR < Path>

    设置RUN CMD ENTRYPOINT ADD COPY指令的工作目录

    ONBUILD

    ONBUILD [INSTRUCTION]

    用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。当有新的 Dockerfile 使用了之前构建的镜像FROM test-build ,这是执行新镜像的 Dockerfile 构建时候,会执行 test-build 的 Dockerfile 里的 ONBUILD 指定的命令。
  • 相关阅读:
    PHPCMS模型
    SQL 根据中文分词组件来搜索表
    初识wordpress
    session_set_save_handler
    使用Sharepoint 中Webservice得到用户列表
    鸡蛋里挑骨头PHPCMS
    Type: FileNotFoundException, Exception Message: 未能加载文件或程序集
    很实用的Jquery验证插件
    CSS link media属性
    OCS (错误代码: 01492)
  • 原文地址:https://www.cnblogs.com/ryjJava/p/14134100.html
Copyright © 2011-2022 走看看