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

使用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所在的路径。

最新文章

  1. 通过ip查询对方位置
  2. 树链剖分+线段树 BZOJ 1036 [ZJOI2008]树的统计Count
  3. System.Linq.Dynamic的使用
  4. C#设计模式 - 观察者模式(使用委托)
  5. python中的__init__ 、__new__、__call__小结
  6. js 自动下载函数
  7. 【leetcode❤python】Move Zeroes
  8. OC4_XML文件解析
  9. Android -- 利用Broadcast开启Service(转)
  10. 1 &amp; 167. Two Sum I &amp; II ( Input array is sorted )
  11. linux学习 建立静态库,动态库,写简单的makefile
  12. 添加 hexo yilia 主题的文章阅读量
  13. js关闭子页面刷新父页面
  14. [国嵌攻略][097][U-Boot新手入门]
  15. FineUIPro v4.0.0 发布了,全新 CSS3 动画惊艳登场!
  16. day8.python文件操作
  17. C++进阶--placement new/delete
  18. lendinghome oa 准备
  19. 针对LDAP安装web接口,进行管理
  20. JERSEY中文翻译(第一章、Getting Started、1.1.7)

热门文章

  1. C语言中一维数组
  2. Java常用类学习笔记总结
  3. Linux下docker中安装宝塔面板教程
  4. 在mapper.xml映射文件中添加中文注释报错
  5. PHP curl爬取数据 加入cookie值
  6. .netcore利用perf分析高cpu使用率
  7. 常见大中型网络WLAN基本业务实例
  8. python virtualenv 基本使用
  9. 【C++】《C++ Primer 》第二章
  10. 主题模型值LDA