记一次IDE的Docker插件实战(Dockfile篇)

   日期:2024-12-28     作者:jsvle       评论:0    移动:http://qyn41e.riyuangf.com/mobile/news/7762.html
核心提示:本部分主要根据IDEA的Docker插件实战(Dockerfile篇)_程序员欣宸的博客-CSDN博客_idea编写dockerfile一文所述内容进行实践,

本部分主要根据IDEA的Docker插件实战(Dockerfile篇)_程序员欣宸的博客-CSDN博客_idea编写dockerfile一文所述内容进行实践,并对其中遇到的问题进行解答,从而串接多个知识点。

在Intellij中,Dockfile只能自己创建并编写,并没有什么工具会帮你自动生成,这一点和.NET平台下的工具不同,需要注意。Dockfile的编写主要是了解语法,还需要选择合适的基础镜像。语法课参考这篇文章

Docker Dockerfile | 菜鸟教程 (runoob.com)

镜像选择需要自行前往Dockerhub进行镜像查找,网址为

Docker Hub Container Image Library | App Containerization

docker image是什么,存储在什么位置。 - chinaxuzw的日志 About云开发-梭伦科技 - (aboutyun.com)

Docker镜像分层 - 知乎 (zhihu.com)

在上述文章中详细解释了Docker中镜像是如何分层、如何构建的,理解了这些也就明白了为什么Dockfile中要尽可能少些语句或多条语句合并成一条语句,都是为了降低打包后的镜像大小。

如果按照前言中文章的指南一步步操作,应该不会有其他问题,除了显示的时区不对。时区不对的根源是容器中的时区为UTC,宿主机时间为CST,相差了8小时。具体方法参考

Docker容器时间与宿主机时间不一致的问题 - 人艰不拆_zmc - 博客园 (cnblogs.com)

这里边可能会涉及进入容器的问题,因为本文使用的基础镜像为alpine,进入容器不是正常的,而是进入。

VS对Docker的支持仅限于.NET Core项目,这一点需要留意。VS中的Docker插件功能和IDEA中完全不一样:VS要求当前主机必须安装Docker,制作的镜像只推送到本机的Docker。而VS的使用者大多数都用的是Windows系统,这就意味着当前主机得开启一套虚拟环境以运行Windows版本的Docker,大概需要2G的内存占用。IDEA充分利用了Docker的远程访问功能,所以对本机的要求很低。VS中也可以把镜像打包后推送到远程Docker服务器,但是需要开启服务器Docker的Registry功能,相当于得部署一套私有的Docker仓库。

在创建.NET Core工程时,如果勾选了Docker支持,那么VS会自动创建Dockfile。当然如果项目创建初期没有添加,后面也可以通过右击工程,选择“添加”,再选择“添加Docker”支持来创建(如果没有该选项,大概率是安装VS的时候少勾选了相关容器组件)。如果对Docker很熟悉,也可以完全自行创建,当然最好是先利用VS创建一个基础的Dockfile,然后自行添加或删除一些内容。

所谓的Registry功能就是在服务器上使用Docker官方提供的Registry镜像创建一个容器,外部程序通过HTTP/HTTPS协议和Registry容器交互,从而推送或拉取镜像。创建步骤可以参考该链接

部署注册表服务器| Docker文档 (xy2401.com)

上步所述的操作可以让本机的应用程序推送镜像,但如果希望外部系统也能操作,那么就需要进行相关配置。如果是有域名证书的伙伴,那么配置外部访问非常容易,直接参照上节的链接描述来做就行。但是很多情况下我们是局域网操作,只想通过HTTP协议访问Registry,那么我们在远程服务器上创建容器时就不能指定证书,同时客户端的机器上需要添加对该远程Docker的信任,具体可参考

测试不安全的注册表| Docker文档 (xy2401.com)

配置HTTP访问

以上内容简单解释一下。先使用下述指令创建Registry服务

 

运行此条指令后创建的registry容器就是不指定证书的,此时外部系统可以通过访问http://192.168.x.x:5000来操作该容器,而且无需用户名和密码。

配置HTTPS访问

那么如果我想要添加用户名和密码呢?这时候就需要配置TLS,开启服务器认证

 

通过以上操作,服务端算是配置好了,所有的访问请求必须通过HTTPS协议,服务端收到请求后把自签名证书发给客户端。

客户端配置以信任服务端证书

这时候问题就来了,因为是自签名证书,客户端不认,会报错,所以需要客户端信任该证书。

如果客户端是Windows系统,信任证书很容易操作:将服务器上的domain.crt文件拷贝到客户端,直接双击安装证书,下面贴几张安装证书的图。

请务必按照上图的方式导入到“根证书颁发机构”,否则客户端还是无法进行证书认证!此时通过下述指令便可登陆成功

 

如果客户端是Linux主机,需要将服务器的证书文件服务到当前主机的目录下,在这里就是192.168.x.x。

服务端启用用户名密码验证

服务端启用用户名密码验证的前提是已经配置了HTTPS访问,所以这一步写在最后

 

和上一节相比,本节创建容器的过程多了3个变量用于开启访问认证。这里有必要解释下第一步创建认证文件的意图。

是一个创建认证文件的组件,可以在宿主机上直接安装该组件,也可以像Docker官方提供的文档中介绍的那样,通过创建一个的容器并运行来创建认证文件。注意这里传入的参数是,也就是使用bcrypt加密,加密强度更高。如果不加,默认就是MD5加密。Registry组件内部使用的是bcrypt加密方式,所以创建认证文件必须传入参数。

有了认证文件,在创建容器时就需要指定认证文件的地址,因此需要将宿主机的带有认证文件的目录挂载到容器上。此时再登陆Docker,就需要以下指令

 
 

以上扯了那么多的主要原因还是VS下的Docker插件不好用,而且使用发布功能推送镜像时必须通过HTTPS访问。那下面来看看如何推送镜像

  1. 右击项目,选择“发布”
  2. 发布目标选择“Docker容器注册表”
  3. 特定目标选择“其他Docker容器注册表”。这里插一句,如果不要求私密性,只是为了学习,那么直接发布到DockerHub就好了,上述内容统统不用关心。我们这里主要谈的是发布到私有仓库,所以才需要配置那么多。
  4. 注册表URL输入:192.168.x.x:443
  5. 输入用户名(如果设置
  6. 输入密码(如果设置
  7. 点击完成

顺利的话,我们会看到VS提示镜像已上传成功。如何确认服务器上的确有镜像呢

 
标签: 创建 镜像 容器
特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

举报收藏 0打赏 0评论 0
 
更多>同类最新资讯
0相关评论

相关文章
最新文章
推荐文章
推荐图文
最新资讯
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号