作者 | 菜菜

责编 | 郭芮

YY妹:菜菜哥,我看了一下Docker相关的内容,但是还是有点迷糊。

菜菜:还有哪不明白呢?

YY妹:如果我想用Docker实现所谓的云原生,我的项目该怎么发布呢?

菜菜:这还是要详细介绍一下Docker了。

Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

正如以上所说,Docker诞生的意义不仅仅实现了类似虚拟机的隔离性,最主要的是它可以把应用程序以及应用程序的运行环境整个打包在一起。注意:是整个环境哦,不仅仅是一些依赖库。这个划时代的进步,直接把docker镜像和宿主分离开来,使得docker镜像只要公布出来,就能使任何人在任何地方任何时间都可以随意运行,换句话说,docker镜像可以被分发到任何运行docker的服务器上。

Docker 架构

在Docker的架构中,主要有三个主要概念:

镜像

Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

docker镜像由多层组成,不同的镜像都能使用相同的父镜像作为他们的基础镜像,这些相同的基础镜像在docker的角度来看就是完全相同的层。在docker镜像的传输过程中,当某些相同的层已经存在的时候,就完全不需要重新传输了,这大大提高了镜像在网络上的传输效率。

分层的设计不仅使镜像分发更高效,也有利于减少镜像的存储空间。每一层仅仅被存储一次,就算基于相同基础层的镜像被创建两个容器的时候,这两个容器也是互相隔离的,虽然他们能读到相同的文件,但是却看不到对方文件的修改。一个容器被创建的时候,会创建一个新的可写层,容器中的修改会反应到这个新的可写层中。就算了容器修改了底层的文件,此文件的修改内容会copy到顶层,底层依然不会发生变化。

容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。docker的容器通常是一个linux容器,它是运行在宿主机上的一个进程,但是和其他宿主进程是隔离的,并且所用的资源是受限的(只能访问特定的资源,比如网络接口,文件系统)

镜像仓库

镜像仓库和它的字面意思一致,是很多镜像的集合,它的作用就是把镜像共享给每个人,当然这里顺便提一下,镜像仓库也可以有私人仓库。当你的应用程序被打包之后,如果想在另外一个机器上运行,你就可以把你的应用镜像上传到镜像仓库,然后开放这个仓库,这样网络上的任何机器都能够下载你的镜像,然后运行。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。我们可以通过:的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签.。

仓库又可以分为两种形式:

  • public(公有仓库)

  • private(私有仓库)

Docker Registry 公有仓库是开放给用户使用、允许用户管理镜像的 Registry 服务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。

除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry 。Docker 官方提供了 Docker Registry镜像,可以直接使用做为私有 Registry 服务。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

构建分发运行镜像

开发人员首先构建一个镜像,然后把镜像推到镜像仓库中。因此,任何可以访问镜像仓库的人都可以使用该镜像。然后,他们可以将镜像拉取到任何运行着Docker的机器上并运行镜像。Docker会基于镜像创建一个独立的容器,并运行二进制可执行文件指定其作为镜像的一部分。

docker的缺陷

就像所有的技术解决方案,docker也不是完美的。docker的缺陷在于运行的内核,由于它直接运行在宿主机的内核之上,所以如果docker容器的运行内核版本和宿主机的内核不匹配就会出现问题。追根到底,还是硬件架构设计上的差异,不仅仅是docker容器,几乎所有的软件都会有内核架构不同而不能运行的问题。除此之外,由于docker是基于linux的容器技术,所以在windows下运行并不令人满意,虽然这些年docker在windows上也进步了很多。

docker镜像发布

docker镜像的仓库有很多,这里以官方网站https://hub.docker.com/ 为例,首先你要在官网创建一个账号,然后可以在Account Settings=》Security中设置一个AccessToken ,这里为了演示,没有在官网显示创建仓库。因为我是本身是C#出身,这里利用vs2019来做演示。

打开vs2019新建一个netcore的项目,我这里创建一个控制台程序,程序很简单:

static void Main(string[] args){Console.WriteLine("Hello World!");while (true){Console.WriteLine("Hello World22222!");System.Threading.Thread.Sleep(1000);}}

然后在项目右键 添加=》docker支持,会根据当前项目自动生成dockerfile文件。就算没有ide的支持,也可以自己手撸一个dockerfile文件,然后利用docker的命令打包,当然语法和以下是一样的:

FROM mcr.microsoft.com/dotnet/core/runtime:3.0-buster-slim AS baseWORKDIR /app

FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS buildWORKDIR /srcCOPY ["netcoretest/netcoretest.csproj

docker镜像内容如何查看_如何快速打通 Docker 镜像发布流程?相关推荐

  1. 如何快速打通 Docker 镜像发布流程?

    作者 | 菜菜 责编 | 郭芮 YY妹:菜菜哥,我看了一下Docker相关的内容,但是还是有点迷糊. 菜菜:还有哪不明白呢? YY妹:如果我想用Docker实现所谓的云原生,我的项目该怎么发布呢? 菜 ...

  2. docker脚本安装 阿里云_让运行在 Docker 中的 Ghost 支持阿里云 OSS

    本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载.或重新修改使用,但需要注明来源. 署名 4.0 国际 (CC BY 4.0) 本文作者: 苏洋 创建时间: 2020年03月1 ...

  3. docker pull下载很慢_一文了解Docker容器技术的操作

    一文了解Docker容器技术的操作 前言 相信点进这篇文章的Coder,不管是在各大技术论坛上.技术交流群,亦或招聘网上,应该都有见到过Doker容器技术的面孔,随着社会节奏的加快以及迫于生活的压力, ...

  4. docker image设置jdk版本_使用Docker搭建Java环境的步骤方法

    Docker是干什么的 Docker 是一个基于Linux容器(LXC-linux container)的高级容器引擎,基于go语言开发,源代码托管在 Github 上, 遵从Apache2.0协议开 ...

  5. docker 仓库镜像 替换_自己动手创建 Docker 镜像并分享到镜像仓库,容器引擎的用途越来越广泛!...

    ↑ 点击上面 "时代Java"关注我们,关注新技术,学习新知识! 前面在公众号里讲过Docker安装和基本用法和概念,新来的小伙伴可以先去学习一下: docker yum快速安装和 ...

  6. docker查看mysql镜像版本_Docker 查看镜像信息

    欢迎关注博主的微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 文章首发个人网站: https://w ...

  7. jar docker镜像不能启线程_使用docker部署SpringCloud项目

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:现实太狗ochttps://blog.csdn.net/u011508407/ 分类 ...

  8. docker linux 快速开窗口_技术|如何使用 Docker 快速配置数据科学开发环境?

    数据科学开发环境配置起来让人头疼,会碰到包版本不一致.错误信息不熟悉和编译时间漫长等问题.这很容易让人垂头丧气,也使得迈入数据科学的这第一步十分艰难.而且这也是一个完全不常见的准入门槛. 还好,过去几 ...

  9. mysql 部署到服务器_服务器快速部署--使用Docker部署MySQL

    最近使用Dokcer部署各种服务端所需的环境,目的是为了后面的服务器集群.负载均衡.数据库集群做铺垫,以便准备好服务器高并发.数据库高并发提供测试环境.这里记录一下Docker部署MySQL的过程,为 ...

最新文章

  1. 互联网协议 — BGP 边界网关协议 — Route(路由信息)
  2. 请问anroid怎么播放aac文件。
  3. java实现计算机图形学中点画线算法
  4. HPU暑期第五次积分赛 F - 辞树的质因数分解
  5. IPFS:Filecoin和复制证明
  6. 【Boost】boost库中的小工具enable_shared_from_this
  7. Docker入门-安装
  8. 兼容多种浏览器“复制到剪贴板”的解决方案
  9. JxBrowser 7.16 Crack by Xacker
  10. 马尔可夫随机场 MRF
  11. S32DS中链接文件及启动代码学习
  12. android 色彩搭配,色彩搭配利器:最好用的配色工具App Top5
  13. 微信小程序 23 播放音乐页
  14. matlab绘制单位球的三维网格图,matlab绘制三维网格图
  15. EASE:一种融合实体信息的句子嵌入对比学习方法
  16. hi3798mv300是什么手机_海思Hi3798MV300/Hi3798MV310/Hi3798MV300H共升级包使用指南芯片手册...
  17. Python学习规划
  18. 服务器如何测试网速?服务器测试带宽常用方法分享
  19. 【opencv-python-face_recognition人脸识别,分辨人物是否为同一个人】人脸检测,识别出人物框,并能根据两次输入图片分辨是否为同一个人
  20. honts/htonl等大小端转换函数的原理

热门文章

  1. 图像及其表达与性质(上)
  2. asp.net中创建一个简单的自定义控件
  3. DbLookUpCombobox的使用方法
  4. 编译原理实验一预习报告
  5. python 中的 for-else 和 while-else 语句
  6. 汇编语言ALIGN伪指令:对齐一个变量
  7. 【译】How Microsoft Lost the API War
  8. 动手编写一个以太坊智能合约
  9. android.hardware.camera2使用指南
  10. 也来看看Android的ART运行时