前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker实战(三)

Docker实战(三)

作者头像
张乘辉
发布2019-06-20 13:51:14
6800
发布2019-06-20 13:51:14
举报
文章被收录于专栏:后端进阶后端进阶

我们都知道如果用 docker hub 来做仓库会很慢,因为docker hub 服务器在国外,那么现在有必要讲一下如何搭建一个 docker 私有仓库,并进行快速部署。

启动 registry 私有库容器

官方有个镜像叫 「registry」,它可以启动一个私有仓库,获取官方 registry 镜像命令如下:

代码语言:javascript
复制
docker pull registry

将 registry 镜像 pull 到本地后,通过镜像启动一个 registry 私有库容器,私有库地址会在容器内的 /var/lib/registry 路径下,如果需要将私有库挂载在本地路径下,还需要 -v 参数:

代码语言:javascript
复制
docker run -d -it \
    -p 5000:5000 \
    -v /data/registry/:/var/lib/registry \
    --name myregistry registry

push 镜像到私有库

docker镜像名字命名规律:

代码语言:javascript
复制
<仓库地址>/<仓库名字>:<标签>

所以需要将本地镜像改成私有库地址的镜像:

代码语言:javascript
复制
docker tag objcoding/docker-maven-deploy:0.0.4 119.29.xxx.232:5000/docker-maven-deploy:0.0.4

Docker 默认不允许 http 方式 push 镜像,如果要用 http 来推送,则需要在 /etc/docker/ 目录下创建daemon.json,内容如下:

代码语言:javascript
复制
{
  "registry-mirror": [
    "https://registry.docker-cn.com"
  ],
  "insecure-registries": [
    "119.29.xxx.232:5000"
  ]
}

执行 push 命令:

代码语言:javascript
复制
docker push 119.29.xxx.232:5000/docker-maven-deploy:0.0.4

push 过程:

从私有库中 pull 镜像

前面我们已经将私有库挂载在本地目录了,查看一下刚刚 push 的镜像是否存在:

发现刚刚 push 的镜像已经在本地目录了,这时我们需要将它 pull 下来:

代码语言:javascript
复制
docker pull 119.29.xxx.232:5000/docker-maven-deploy:0.0.4

运行镜像:

代码语言:javascript
复制
docker run -d -p 8085:8085 --name docker-maven-deploy 127.0.0.1:5000/docker-maven-deploy:0.0.4

docker-maven-plugin

以前打包 docker 镜像的时候还要手动 docker build,现在利用 docker-maven-plugin 插件打包 docker 镜像,使打包镜像步骤进一步简化。

在 maven pom.xml 中加入 docker-maven-plugin 插件:

代码语言:javascript
复制
<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>0.4.13</version>
  <configuration>
    <!-- objcoding/docker-maven-deploy打包后的名称,0.0.2镜像 TAG -->
    <imageName>objcoding/docker-maven-deploy:0.0.2</imageName>
    <!-- Dockerfile 所在路径 --><dockerDirectory>${project.basedir}/src/main/resources/docker</dockerDirectory>
    <resources>
      <resource>
        <!-- target 所在路径 -->
        <targetPath>/</targetPath>
        <directory>${project.build.directory}</directory>
        <!-- 打包后的 springboot jar 包文件名称 -->
        <include>${project.build.finalName}.jar</include>
      </resource>
    </resources>

    <!-- docker仓库 -->
    <!-- <serverId>my-docker-repository</serverId> -->
  </configuration>
</plugin>

在 src/main/resources/docker/ 中添加 Dockerfile:

代码语言:javascript
复制
From java:8

MAINTAINER zhangchenghui zhangchenghui.dev@gmail.com

ADD docker-maven-sample-1.0-SNAPSHOT.jar /app.jar

EXPOSE 8080

ENTRYPOINT [ "java", "-jar", "app.jar" ]

在项目根目录下执行一下命令:

代码语言:javascript
复制
mvn clean install docker:build

出现以下编译后的信息:

获取 Demo 源码:

docker-deploy-tutorial[1]

References

[1] docker-deploy-tutorial: https://github.com/objcoding/docker-deploy-tutorial

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后端进阶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 启动 registry 私有库容器
  • push 镜像到私有库
  • 从私有库中 pull 镜像
  • docker-maven-plugin
    • References
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档