Docker 学习(六)

将微服务运行在Docker上

有了之前的基础,可以将微服务打包之后,利用 Dockerfile 来构建镜像。

打包微服务

首先要把微服务打包成 jar 包。

准备 Dockerfile

创建 Dockerfile 文件,并输入以下内容:

# 基于镜像java:8
FROM java:8

# 将本地文件夹挂载到当前容器
VOLUME /tmp

# 复制文件到容器
COPY microservice-discovery-eureka-0.0.1-SNAPSHOT.jar /app/microservice-discovery-eureka.jar

# 执行命令修改文件的时间为当前时间
RUN bash -c 'touch /app/microservice-discovery-eureka.jar'

# 声明要暴露的端口
EXPOSE 8761

# 配置容器启动后执行的命令,运行jar。`-Djava.security.egd=file:/dev/./urandom` 这个参数的作用是加快随机数产生过程,参考:https://blog.51cto.com/leo01/1795447
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/microservice-discovery-eureka.jar"]

其中相应的参数根据自己的情况作出更改

构建镜像

在 Dockerfile 所在目录执行构建命令:

docker build -t yhcm/microservice-discovery-eureka:0.0.1 .

其中yhcm是仓库名称,这个在后面推送镜像到 Docker Hub 上会用到,其实就是你的 Docker Hub 账号的id

启动容器

docker run -d -p 8761:8761  yhcm/microservice-discovery-eureka:0.0.1

至此已经可以访问运行在 docker 中的微服务了。

使用 Docker Registry 管理 Docker 镜像

Docker Hub 是 Docker 官方维护的 Docker Registry ,上面存放着很多优秀的镜像。不仅如此,Docker Hub 还提供了认证、工作组结构、工作流工具、构建触发器等工具来简化工作。虽然我一个都没有用过。

Docker Hub 给我的感觉就像是 GitHub 一样你可以将自己的镜像上传到 Docker Hub 上进行管理。

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

注册登录,比较简单就不说了,不过需要注册的是,在填写 Docker Hub 的 ID 的时候最好不要用自己的手机号之类的联系方式做为 ID 。

在 Docker 中可以使用 docker login 命令来登录。

创建仓库

直接在 Docker Hub 的主页上点击 Create Repository 按钮,根据提示填写信息,点击 Create 就可以创建一个仓库。

在这里插入图片描述

推送镜像

使用一下命令:

docker push yhcm/microservice-discovery-eureka:0.0.1

网速过慢,直接超时也不稀奇,推送之前需要先使用docker login登录。

使用私有 Docker Registry 来管理镜像

虽然书中用仓库来称呼 Docker Hub ,但是我觉得 Docker Registry 本来就是Docker 注册中心的意思。而且称呼为仓库,容易和在Docker Hub 上创建的那个仓库的概念混淆,所以我会用注册中心来称呼Docker Registry。

相比 Docker Hub 私有的 Docker Registry 自然有其优势:

  • 节省宽带,速度快。毕竟访问自己搭建的 Docker Registry 要比访问 Docker Hub 要快的多
  • 更加安全
  • 便于内部镜像的统一管理

下面将使用 Docker Regisrty 2.0 搭建一个私有注册中心,然后将 Docker 镜像推送到私有注册中心上。

搭建私有注册中心

因为 Docker Registry 2.0 也是用 Docker 进行管理的,所以只需要执行以下命令就可以启动一个 Docker Registry 2.0 的容器。

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

将镜像推送到私有注册中心

之前是通过命令docker push yhcm/microservice-discovery-eureka:0.0.1 来推送到 注册中心上的,其默认的注册中心就是 Docker Hub。如果需要推送到私有的注册中心上就需要手动指定其地址。

修改镜像:

docker tag yhcm/microservice-discovery-eureka:0.0.1  192.168.99.101:5000/yhcm/microservice-discovery-eureka

其中192.168.99.101就是运行 registry2 的宿主机的ip地址。

然后执行命令:

docker push 192.168.99.101:5000/yhcm/microservice-discovery-eureka

到了这一步就会报错,内容如下:

The push refers to repository [192.168.99.101:5000/yhcm/microservice-discovery-eureka]
Get https://192.168.99.101:5000/v2/: http: server gave HTTP response to HTTPS client

原因是以为与 Docker Registry 的交互默认是 Https,但是搭建私有的注册中心默认使用的是Http服务。

解决办法就是,进入Docker Registry 的宿主机,在 /etc/docker 文件夹下,创建文件daemon.json并增加内容:

{"insecure-registries": ["192.168.99.101:5000"]}

然后重启 Docker 即可。

Docker Registry 2.0 能够满足大部分场景下的需求,但是它不包含界面、用户管理、权限控制等功能。如果想使用这些功能,可使用Docker Trusted Registry。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值