docker学习笔记-初步接触

久仰docker大名,却一直没有实际接触过。了解它的人把它描述为万能,神乎其神。没接触过它的人一脸懵。最近希望重新搭建一下服务器,趁机学习一下docker。

如果文章内容有问题,欢迎评论或与我进行讨论(请注明原因):

mail: wgh0807@qq.com
微信: hello-wgh0807
qq: 490536401

0. 什么是容器?

菜鸟教程《Docker教程》是这样说的:

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。


Docker官方是这样描述的:

容器是一个标准的软件单元,它将代码及其所有依赖关系打包,以便应用程序从一个计算环境快速可靠地运行到另一个计算环境。Docker容器映像是一个轻量级,独立的可执行软件包,包含运行应用程序所需的一切:代码,运行时,系统工具,系统库和设置。

容器映像在运行时成为容器,在Docker容器的中,映像在Docker Engine上运行时成为容器。适用于基于Linux和Windows的应用程序,无论基础架构如何,容器化软件都将始终运行相同。容器将软件与其环境隔离开来,并确保它可以统一运行,尽管开发和分段之间存在差异。

在Docker Engine上运行的Docker容器:

  • 标准: Docker创建了容器的行业标准,因此它们可以随处携带(高兼容性)
  • 轻量级:容器共享机器的操作系统内核,因此不需要每个应用程序的操作系统,从而提高服务器效率并降低服务器和许可成本
  • 安全:应用程序在容器中更安全,Docker提供业界最强大的默认隔离功能

Docker创建了简单的工具和通用打包方法,将所有应用程序依赖项捆绑在一个容器中,然后在Docker Engine上运行。Docker Engine使容器化应用程序能够在任何基础架构上一致地运行,为开发人员和运营团队解决“依赖性问题”,并消除“它在我的笔记本电脑上工作!”问题。


如果官方的这一段描述略显深奥,我想一张图可能会帮助我们的理解:

docker与VM对比图

这张图右边是一台主机安装多个虚拟机的情况:在同一台主机上(图中绿色部分,意为基础设施,在实际上代表了基础硬件/主机的操作系统),基于一个管理程序(虚拟化技术,负责虚拟机的调度、指令转换、资源管理等工作),不同虚拟机安装不同的操作系统,运行不同的应用程序,提供不同服务。最终实现了将一台服务器转换成了多台服务器。

图左边是docker容器的分层结构。容器是应用层的抽象,如上左图中的每一个应用程序都是一个容器,容器将代码和依赖关系抽象画,将代码和依赖关系打包在一起,基于docker,多个容器可以在同一台机器上运行,与其他容器共享操作系统内核,但是相互独立运行。

以下为暂时的个人理解:

简单的说,docker容器就是虚拟机的一个简化版本,在系统层次实现虚拟化,将每个应用程序和依赖关系都打包成为镜像。在部署时,docker给他分配独立的运行环境并提供其需要的依赖。

Container - docker glossary

docker容器是docker映像的运行时实例

一个docker容器包括:

  • 一个docker映像
  • 一个执行环境
  • 一个标准指令集合

1. docker基础

docker概念

docker是一个在容器中进行开发、部署和运行应用的平台。使用linux容器部署应用被称为“容器化(containerization)”。容器技术不是新兴技术,可以被用于简单的部署应用。

containerization: 容器化技术。现实中指的是将大量的商品包装到大型标准化容器中(即现实中的集装箱)。容器化技术与实际类似,将程序及其依赖封装为一个单独的集装箱,实现彼此之间相互独立的开发、部署和运行。

virtualization: 虚拟化技术,主要指将硬件资源进行虚拟化,实现动态调度和动态分配,表达出另一个抽象计算平台。这里的资源包括有:计算资源(cpu),存储资源(RAM, ROM),网络资源等。

容器化技术是一种虚拟化策略,是传统的基于管理程序的虚拟化的替代方案。基于容器的虚拟化技术知识在操作系统级别创建的单独的容器

容器化技术的优点:

  • 弹性:几乎所有复杂的应用程序可以被容器化
  • 轻量级:容器共同利用主机的内核
  • 可交替:可以即使部署和更新
  • 便携:可以本地构建、云端部署,或者在任何地方运行。
  • 可分发:可以增加或自动分发容器副本
  • 可堆叠:可以即时纵向堆叠服务

laurel-docker-containers

我一直认为漫画是一个比较好的学习方式。上图为docker官方文档中的一副漫画,包含docker的特性。我的理解也不全,希望有什么发现可以评论或联系我交流下。以下介绍我的一些理解。

  1. 左下角,集装箱中的乌龟独立拥有工作环境,且配置齐全,说明容器的弹性和独立性。两个乌龟之间通过纸杯电话交流,说明独立的两个环境之间可以完成通信。
  2. 中间下边,一只企鹅正在根据货单检查集装箱。企鹅代表着linux系统环境,意味着linux系统环境下可以接收docker容器,表达docker的便携性。
  3. 右边中间,有一群集装箱摞起来,表现docker的可堆叠特性
  4. 在集装箱上面,塔吊吊起了一个容器,章鱼🐙在将多个docker向容器堆上防止,表现docker可交替特性(可以及时部署和更新)
  5. 右上角,右边的那一艘船上搭载有很多容器,正如一台主机上可以搭载多个容器,表现docker的轻量级特性(共用内核)。
  6. 左边,有一个螃蟹正在将加密后封装好的容器放在车上,右边驶来一辆火车(看起来是高铁,标志我不太了解),远端也有船在运输容器,说明docker容器具有便携性和可分发特性。
  7. 左边仓库门上,有一个DevOps的横幅,devops是Development和Operations的组合词,代表开发人员和运维人员之间的合作。使用容器技术是自动化运维的技术之一,有助于开发和运维团队的合作,提升沟通效率,最终提升交付速度。

映像(Images)和容器(Containers)

当运行一个映像时,一个容器被部署。映像是一个可执行的包,包括了运行一个应用所需要的全部资源——代码、依赖库,环境变量和配置文件。

容器是一个映像的运行时实例,当执行映像的时候,映像被存储于内存中,成为带有状态的映像或一个用户进程。可以通过docker ps命令查看正在运行的容器,就像在linux系统中一样(linux中,ps为查看正在执行的进程)

容器(Container)和虚拟机(VM)

容器运行在原生linux中运行,与其他容器共享主机内核。容器运行一个独立的进程,不会大量的占用内存。

Container_diff_docker

不同的是,虚拟机(VM)使用虚拟化技术(hypervisor),通过虚拟访问主机资源运行访问’guest’访客操作系统。总之,虚拟机提供了很多资源,比大多数应用需要的都多。

https://img2018.cnblogs.com/blog/1543498/201909/1543498-20190919164017021-244412583.png

docker 基础命令

## Test Docker 
docker run hello world

## List Docker CLI commands
docker
docker container --help

## Display Docker version and info
docker --version
docker version
docker info

## Execute Docker image
docker run hello-world

## List Docker images
docker image ls

## List Docker containers (running, all, all in quiet mode)
docker container ls
docker container ls --all
docker container ls -aq

参考文档:

Docker教程 - 菜鸟教程

What is Container? - Docker

容器技术 - 百度百科

Docker - 百度百科

Docker Classroom - Docker

Docker Doc - Docker

continainerization - techopedia

Container - docker glossary

posted @ 2019-09-19 16:37  wgh0807  阅读(188)  评论(0编辑  收藏  举报