重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你好,我是Ghostcloud的高级架构师。
成都创新互联公司是专业的和硕网站建设公司,和硕接单;提供成都做网站、网站设计、外贸营销网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行和硕网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
Docker容器技术,是基于Go语言开发的,很有趣的语言呢。
如果你有兴趣,推荐你一本书吧,作为入门还是很好的《Docker容器实战——原理,架构与应用》。
by:Ghostcloud
部署简单。Go 编译生成的是一个静态可执行文件,除了 glibc 外没有其他外部依赖。这让部署变得异常方便:目标机器上只需要一个基础的系统和必要的管理、监控工具,完全不需要操心应用所需的各种包、库的依赖关系,大大减轻了维护的负担。这和 Python 有着巨大的区别。由于历史的原因,Python 的部署工具生态相当混乱【比如 setuptools, distutils, pip, buildout 的不同适用场合以及兼容性问题】。官方 PyPI 源又经常出问题,需要搭建私有镜像,而维护这个镜像又要花费不少时间和精力。
并发性好。Goroutine 和 channel 使得编写高并发的服务端软件变得相当容易,很多情况下完全不需要考虑锁机制以及由此带来的各种问题。单个 Go 应用也能有效的利用多个 CPU 核,并行执行的性能好。这和 Python 也是天壤之比。多线程和多进程的服务端程序编写起来并不简单,而且由于全局锁 GIL 的原因,多线程的 Python 程序并不能有效利用多核,只能用多进程的方式部署;如果用标准库里的 multiprocessing 包又会对监控和管理造成不少的挑战【我们用的 supervisor 管理进程,对 fork 支持不好】。部署 Python 应用的时候通常是每个 CPU 核部署一个应用,这会造成不少资源的浪费,比如假设某个 Python 应用启动后需要占用 100MB 内存,而服务器有 32 个 CPU 核,那么留一个核给系统、运行 31 个应用副本就要浪费 3GB 的内存资源。
良好的语言设计。从学术的角度讲 Go 语言其实非常平庸,不支持许多高级的语言特性;但从工程的角度讲,Go 的设计是非常优秀的:规范足够简单灵活,有其他语言基础的程序员都能迅速上手。更重要的是 Go 自带完善的工具链,大大提高了团队协作的一致性。比如 gofmt 自动排版 Go 代码,很大程度上杜绝了不同人写的代码排版风格不一致的问题。把编辑器配置成在编辑存档的时候自动运行 gofmt,这样在编写代码的时候可以随意摆放位置,存档的时候自动变成正确排版的代码。此外还有 gofix, govet 等非常有用的工具。
执行性能好。虽然不如 C 和 Java,但通常比原生 Python 应用还是高一个数量级的,适合编写一些瓶颈业务。内存占用也非常省。
Docker是世界领先的软件容器平台。Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器,但docker本身并不是容器,它是创建容器的工具,是应用容器引擎。
Docke最初实现是基于LXC。LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。
docker并不是LXC替代品,docker底层使用了LXC来实现,LXC将linux进程沙盒化,使得进程之间相互隔离,并且能够课哦内阁制各进程的资源分配。在LXC的基础之上,docker提供了一系列更强大的功能。
Docker能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的事情上:构建杰出的软件。
用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
docker的三个概念:
镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。
容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。
仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。
docker的用途:
官方给的是bulid ship run,就是编译、装载、运行。就是实现了应用的封装、部署、运行的生命周期管理只要在glibc的环境下,都可以运行。
谐云自主研发的容器云平台,是基于Docker和Kubernetes技术构建的一套完整IT标准化和自动化框架,以“面向终态、优化IT资源”为目标的新一代PaaS平台,能够提高企业的IT管理能力,在降低运营成本和风险的同时,获得更高的运维效率,保障业务稳定运行和高效迭代。
Docker是一个使用Go语言开发的开源的应用容器引擎,让开发者可以打包他们的应用以及依赖到一个可移植的容器中,然后发布到任何流行的机器上。Docker的迅猛发展和全新理念,席卷了整个IT界,成为云时代的一颗新星。
Docker相比于传统虚拟化方式具有更多的优势:
我们可以从下面这张表格很清楚地看到容器相比于传统虚拟机的特性的优势所在:
企业使用一项技术是为了解决当前企业环境中存在的某个痛点。目前整个软件行业存在着以下几个痛点。
(1)软件更新发布及部署低效,过程繁琐且需要人工介入。
(2)环境一致性难以保证。
(3)不同环境之间迁移成本太高。
Docker在很大程度上解决了上述问题。
首先, Docker的使用十分简单,从开发的角度来看就是“三步走”:构建、运输、运行。其中,关键步骤是构建环节,即打包镜像文件。但是从测试和运维的角度来看,那就只有两步:复制、运行。有了这个镜像文件,想复制到哪里运行都可以,完全和平台无关。
Docker这种容器技术隔离出了独立的运行空间,不会和其他应用争用系统资源,不需要考虑应用之间的相互影响。
其次, 因为在构建镜像时就处理完了服务程序对于系统的所有依赖,所以在使用时,可以忽略原本程序的依赖以及开发语言。对测试和运维人员而言,可以更专注于自己的业务内容。
最后, Docker为开发者提供了一种开发环境的管理办法,帮助测试人员保证环境的同步,为运维人员提供了可移植的标准化部署流程。
动力节点的 Docker入门教程,将带你一步一步从基础到实践学习Docker,了解什么是Docker,Docker的核心思想、核心组件诸如镜像,仓库,容器等,通过大量的实际操作循序渐进地介绍Docker,带你轻松玩转Docker,Docker技术也是当今IT从业人员的必备技能之一。
在线学习:
资料下载:
•001.Docker视频教程:虚拟化技术发展史
•002.Docker视频教程:虚拟化技术是什么
•003.Docker视频教程:虚拟化技术的分类
•004.Docker视频教程:虚拟化技术的优缺点
•005.Docker视频教程:容器技术的发展
•006.Docker视频教程:Docker的发展 历史
•007.Docker视频教程:Docker是什么
•008.Docker视频教程:容器和虚拟机的区别(1)
•009.Docker视频教程:容器和虚拟机的区别(2)
•010.Docker视频教程:为什么要使用Docker视频教程:Docker
•011.Docker视频教程:Docker的版本
•012.Docker视频教程:Docker的安装
•013.Docker视频教程:Docker服务启动
•014.Docker视频教程:Docker服务信息
•015.Docker视频教程:Docker使用初体验-Docker的运行机制
•016.Docker视频教程:Docker使用初体验-Docker官方镜像仓库
•017.Docker视频教程:Docker使用初体验-Docker官方镜像下载
•018.Docker视频教程:Docker使用初体验-Docker镜像启动运行
•019.Docker视频教程:Docker使用初体验-访问容器中的Tomcat服务
•020.Docker视频教程:Docker使用初体验-Docker的网络访问机制
•021.Docker视频教程:Docker使用初体验-进入Docker容器内部
•022.Docker视频教程:Docker使用初体验-补充说明
•023.Docker视频教程:Docker的体系架构(1)
•024.Docker视频教程:Docker的体系架构(2)r
•025.Docker视频教程:Docker核心组件
•026.Docker视频教程:Docker核心组件-镜像的基本概念
•027.Docker视频教程:Docker核心组件-镜像的组成结构
•028.Docker视频教程:Docker核心组件-镜像的日常操作(1)
•029.Docker视频教程:Docker核心组件-镜像的日常操作(2)
•030.Docker视频教程:Docker核心组件-镜像的日常操作(3)
•031.Docker视频教程:Docker核心组件-镜像的日常操作(4)
•032.Docker视频教程:Docker核心组件-容器的基本概念
•033.Docker视频教程:Docker核心组件-容器的日常操作(1)
•034.Docker视频教程:Docker核心组件-容器的日常操作(2)
•035.Docker视频教程:Docker核心组件-仓库的基本概念
•036.Docker视频教程:Docker核心组件-官方仓库与阿里云仓库
•037.Docker视频教程:Docker核心组件-仓库的日常操作(1)
•038.Docker视频教程:Docker使用示例-安装MySQL
•039.Docker视频教程:Docker使用示例-访问与操作MySQL容器
•040.Docker视频教程:Docker使用示例-安装Nginx
•041.Docker视频教程:Docker使用示例-访问Nginx容器
•042.Docker视频教程:Docker使用示例-容器Nginx部署静态网站
•043.Docker视频教程:Docker使用示例-安装Zookeeper
•044.Docker视频教程:Docker使用示例-安装ActiveMQ
•045.Docker视频教程:认识Dockerfile文件
•046.Docker视频教程:Dockerfile的基本结构
•047.Docker视频教程:Dockerfile常用指令
•048.Docker视频教程:自定义JDK镜像Dockerfile文件
•049.Docker视频教程:自定义JDK镜像构建与运行测试
•050.Docker视频教程:自定义Tomcat镜像Dockerfile文件
•051.Docker视频教程:自定义Tomcat镜像构建与运行测试
•052.Docker视频教程:自定义MySQL镜像Dockerfile文件
•053.Docker视频教程:自定义MySQL镜像构建与运行测试
•054.Docker视频教程:自定义Redis镜像Dockerfile文件
•055.Docker视频教程:自定义Redis镜像构建与运行测试(1)
•056.Docker视频教程:自定义Redis镜像构建与运行测试(2)
•057.Docker视频教程:阿里云容器镜像仓库
•058.Docker视频教程:阿里云镜像仓库管理后台
•059.Docker视频教程:发布镜像到阿里云镜像仓库(1)
•060.Docker视频教程:发布镜像到阿里云镜像仓库(2)
•061.Docker视频教程:发布镜像到阿里云镜像仓库(3)
•062.Docker视频教程:Docker Hub官方镜像加速
•063.Docker视频教程:Docker部署SpringBoot项目-介绍
•064.Docker视频教程:Docker部署SpringBoot项目-本地测试
•065.Docker视频教程:Docker部署SpringBoot项目-基本流程
•066.Docker视频教程:Docker部署SpringBoot项目-打Jar包与War包
•067.Docker视频教程:Docker部署SpringBoot项目-jar项目的镜像构建
•068.Docker视频教程:Docker部署SpringBoot项目-jar项目的镜像运行与测试(1)
•069.Docker视频教程:Docker部署SpringBoot项目-jar项目的镜像运行与测试(2)
•070.Docker视频教程:Docker部署SpringBoot项目-war项目的镜像构建与运行
•071.Docker视频教程:Docker部署SpringBoot项目-war项目的测试
•072.Docker视频教程:Docker保存新镜像
•073.Docker视频教程:Docker保存的新镜像数据验证
Docker是一个开源的应用容器引擎,它基于Go语言开发,并遵从Apache2.0开源协议。使用Docker可以让开发者封装他们的应用以及依赖包到一个可移植的容器中,然后发布到任意Linux机器上,也可以实现虚拟化。Docker容器完全使用沙箱机制,相互之间不会有任何接口,这保证了容器之间的安全性。
Docker诞生于2013年初,目前有两个版本:Community Edition(CE,社区版)和Enterprise
Edition(EE,企业版)。
Docker有哪些特点?
1、更高效的利用系统资源
Docker对系统资源的利用率很高,无论是应用执行速度,内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,对比虚拟化技术,一个相同配置的主机往往可以运行更多数量的应用。
2、更快速的启动时间
传统的虚拟化技术启动应用服务往往需要数分钟,而Docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级,甚至毫秒级的启动时间,大大节约了开发测试,部署的时间。
3、一致的运行环境
开发过程中常见的一个问题是环境一致问题,由于开发环境、测试环境、生产环境不一致,导致有些bug并未在开发过程中发现。而Docker的镜像提供了除内核外完整的运行时环境,确保环境一致性,从而不会在出现这段代码在我机器上没问题这类问题。
4、持续支付和部署
对开发和运维人员来说,最希望就是一次创建和部署,可以在任意地方运行。而且使用Docker
file使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
5、更轻松的迁移
由于Docker确保了执行环境的一致性,使得应用的迁移更加容易。Docker可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本、其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
6、更轻松的维护和扩展
Docker使用的分层存储以及镜像技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得十分简单。此外,Docker团队同各个开源项目团队一起维护了一大批高质量的官网镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大降低了应用服务的镜像制作成本。
Docker 提供了一个与 Docker 守护进程交互的 API (称为Docker Engine API),我们可以使用官方提供的 Go 语言的 SDK 进行构建和扩展 Docker 应用程序和解决方案。
转自:
整理:地鼠文档
通过下面的命令就可以安装 SDK 了:
该部分会介绍如何使用 Golang + Docker API 进行管理本地的 Docker。
第一个例子将展示如何运行容器,相当于 docker run docker.io/library/alpine echo "hello world" :
还可以在后台运行容器,相当于 docker run -d bfirsh/reticulate-splines :
列出正在运行的容器,就像使用 docker ps 一样:
如果是 docker ps -a ,我们可以通过修改 types.ContainerListOptions 中的 All 属性达到这个目的:
通过上面的例子,我们可以获取容器的列表,所以在这个案例中,我们可以去停止所有正在运行的容器。
通过指定容器的 ID,我们可以获取对应 ID 的容器的日志:
获取本地所有的镜像,相当于 docker image ls 或 docker images :
拉取指定镜像,相当于 docker pull alpine :
除了公开的镜像,我们平时还会用到一些私有镜像,可以是 DockerHub 上私有镜像,也可以是自托管的镜像仓库,比如 harbor 。这个时候,我们需要提供对应的凭证才可以拉取镜像。
值得注意的是:在使用 Docker API 的 Go SDK 时,凭证是以明文的方式进行传输的,所以如果是自建的镜像仓库,请务必使用 HTTPS !
我们可以将一个已有的容器通过 commit 保存成一个镜像:
当然,除了可以管理本地的 Docker , 我们同样也可以通过使用 Golang + Docker API 管理远程的 Docker 。
默认 Docker 是通过非网络的 Unix 套接字运行的,只能够进行本地通信( /var/run/docker.sock ),是不能够直接远程连接 Docker 的。
我们需要编辑配置文件 /etc/docker/daemon.json ,并修改以下内容(把 192.168.59.3 改成你自己的 IP 地址),然后重启 Docker :
创建 client 的时候需要指定远程 Docker 的地址,这样就可以像管理本地 Docker 一样管理远程的 Docker 了:
现在已经有很多可以管理 Docker 的产品,它们便是这样进行实现的,比如: portainer 。