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


    一个完整的应用系统可能包含上百个微服务,并可能对应上百个镜像,如果考虑各个微服务的版本,那么可能会构建更多的镜像,那么如何管理这些镜像呢?

    使用Docker Registry管理Docker镜像

    Docker Hub是Docker官方维护的Docker Registry,有很多优秀镜像,此外,还提供认证、工作组结构、工作流工具、构建触发器等工具来简化工作。

    可使用docker search搜索存放在Docker Hub中的镜像。

    1.使用Docker Hub管理镜像

    也可使用docker login命令登录Docker Hub。输入该命令并按照提示输入账号和密码,即可完成登录。

    1.1注册与登录

    Docker Hub的使用非常简单,只需注册一个Docker Hub账号,就可正常使用了。

    网站地址:https://hub.docker.com

    1.2创建仓库

    单机Docker Hub主页上的Create Repository按钮,按照提示填入信息即可创建一个仓库。

    1.3推送镜像

    如何将构建的镜像推送的Docker Hub呢?使用以下命令即可,例如:

    docker push discovery-eureka:0.0.1
    

    经过一段时间的等待,就可推送成功。

    2. 使用私有仓库管理镜像

    相比Docker Hub,私有仓库有以下优势:

    • 节省带宽,对于私有仓库中的镜像,无需从Docker Hub下载。
    • 更加安全
    • 便于内部镜像统一管理。

    2.1 搭建私有仓库

    Docker Registry2.0的搭建,只需执行以下命令即可新建并启动一个Docker Registry2.0.

    docker run -d -p 5000:5000 -restart=always --name registry2 registry:2
    

    2.2 将镜像推送到私有仓库

    只需指定私有仓库的地址,即可将镜像推送到私有仓库。

    docker push localhost:5000/itmuch/discovery-eureka:0.0.1
    

    执行此命令,发现没成功,且提示以下内容:

    The push refers to a repository [docker push localhost:5000/itmuch/discovery-eureka:0.0.1]
    An image does not exist locally with the tag :  localhost:5000/itmuch/discovery-eureka
    

    Docker Hub是默认的Docker Registry,所以/itmuch/discovery-eureka:0.0.1相当于docker.io/itmuch/discovery-eureka:0.0.1。因此,要想将镜像推到到私有仓库,需要修改镜像标签,

    docker tag itmuch/discovery-eureka:0.0.1  localhost:5000/itmuch/discovery-eureka:0.0.1
    

    修改镜像标签后,在执行以下命令,即可将镜像推送到私有仓库。

    docker push localhost:5000/itmuch/discovery-eureka:0.0.1
    

    3.使用Maven插件构建Docker镜像

    以discovery-eureka为例。

    首先,在pom.xml中添加Maven的Docker插件。

    <build>
        <plugins>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                <configuration>
                    <imageName>itmuch/discovery-eureka:0.0.1</imageName>
                    <baseImage>java</baseImage>
                    <entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
                    <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    配置说明:

    • imageName用于指定镜像名称,其中itmuch是仓库名称,discovery-eureka是镜像名称,0.0.1是标签名称。
    • baseImage:用于指定基础镜像,类似于Dockerfile中的FROM指令。
    • entrypoint:类似于Dock而file的ENTRYPOINT指令。
    • resources.resource.directory:用于指定需要复制的根目录,${project.build.directory}表示target目录。
    • resources.resouce.include:用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar文件。

    2:执行以下命令,构建Docker镜像

    mvn clean package docker:build
    

    3:执行docker images ,即可查看刚刚构建的镜像。

    4:启动镜像:

    docker run -d -p 8761:8761 itmuch/discovery-eureka0.0.1
    

    5:访问测试。

    插件读取Dockerfile进行构建

    1:首先在/discovery-eureka/src/main/docker目录下,新建一个Dockerfile文件,例如:

    FROM java:8
    VOLUME /tmp
    ADD discovery-eureka0.0.1-SNAPSHOT.jar app.jar
    RUN bash -c 'touch /app.jar'
    EXPOSE 9000
    ENTRYPOINT ["java","Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
    

    2:修改pom.xml

    <build>
        <plugins>
             <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                <configuration>
                    <imageName>itmuch/discovery-eureka0.0.2</imageName>
                    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory> <!-- 指定 Dockerfile 路径-->
                    <!-- 这里是复制 jar 包到 docker 容器指定目录配置,也可以写到 Docokerfile 中 -->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>   
        </plugins>
    </build>
    

    可以看到,不再指定baseImage和entrypoint,而是使用dockerDirectory指定Dockerfile所在的路径。

  • 相关阅读:
    防火墙透明模式
    HP管理工具System Management Homepage安装配置
    kbmmw 中JSON 中使用SQL 查询
    kbmmw 中JSON 操作入门
    第一个kbmmw for Linux 服务器
    kbmmw 5.02发布
    kbmmw 5.01 发布
    使用delphi 10.2 开发linux 上的Daemon
    使用unidac 在linux 上无驱动直接访问MS SQL SERVER
    使用delphi 10.2 开发linux 上的webservice
  • 原文地址:https://www.cnblogs.com/aixing/p/13327489.html
Copyright © 2011-2022 走看看