换了好几个主题,终于找到一个比较喜欢的。
我是落落落落落落
,至于有几个落
字,酌情数一下,毕竟注册一个帐号不容易,重复的名称太多了。
董小姐是我目前的同事,暂且称呼她为小董,刚刚大学毕业两年有余。今日闲来无事,他说让我给她讲讲Docker
相关的基础知识。择日不如撞日,今天就提笔来学习下基础知识。
Docker核心技术
基础信息
首先要说说Docker
是什么工具,Docker是一个开源的应用容器引擎。好了,这里做下笔记,开源 - 应用容器 - 引擎。
Docker
能处理什么事情,先抛砖引玉。打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。好了,这里做下笔记,打包应用以及依赖包 - 到可移植的镜像中 - 发布到Linux或Windows操作系统。
核心技术
了解Docker
是什么工具,能做什么事情后,再来看下Docker
的核心技术。
-
Cgroup:可以设置进程使用CPU,内存和IO资源使用的限额
-
Namespace:
-
Mount:让容器拥有整个文件系统"/"
-
UTS:让容器拥有自己的hostname
-
IPC:让容器拥有共享内存和信号量
-
PID:让容器有自己的PID进程
-
Network:让容器拥有自己的网络资源
-
Docker的重要概念
在使用前或者正在使用时,一些概念性的知识需要由外而内的深入理解。
镜像
镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。
容器
容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库
镜像需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务。 一个Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
Docker的好处与用途
-
可移植性
亚马逊EC2实例、谷歌的GCP实例、VirtualBox、Rackspace服务器等主机操作系统的平台上转移。
-
持续部署
一个镜像多处使用,并保持环境的一致性。(多租户、开发生产化)
-
环境标准化和版本控制
通过持续部署可看出环境的标准化,Docker可以像git仓库一样,管理不同的版本。
-
隔离性
Docker可以确保应用程序与资源(CPU、内存、磁盘) 是隔离的,提高系统性能 。
-
安全性
因为隔离性,所以每个程序只是用自己的资源。
-
快速部署:
轻量虚拟化,无需重启系统,让容器的启动时间在秒级。
虚拟化(VM)和容器
虚拟化在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化和容器之间的区别可以看下这两张图。
Docker的相关语法与简单使用
作为基础知识,在我们没有界面操作时,可以先熟悉下一些常用的基础命令。
Docker仓库语法
shell
docker search # 从registry仓库搜索镜像
docker pull # 从仓库下载镜像到本地
docker push # 将镜像放到仓库中
docker login # 登录到一个registry
Docker镜像语法
shell
docker images # 显示本地所有的镜像列表
docker build # 使用Dockerfile创建镜像(推荐)
docker rmi # 删除一个镜像
docker tag # 为镜像起一个别名
Dockerfile语法
bash
FROM # 基础镜像base image
RUN # 执行命令
ADD # 添加文件
COPY # 拷贝文件
CMD # 执行命令
EXPOSE # 暴露端口
WORKDIR # 指定工作路径
MAINTAINER # 维护者
ENV # 设定环境变量
VOLUME #逻辑卷挂载点
Docker下的开发部署流程
在使用Docker开发时,我们可以按照下面的步骤来进行操作,以满足我们在日常中的使用。
简单整理下就是 install --> download --> image start --> image manager --> image build
是不是手痒痒了,开始跃跃欲试了。好了,
落落落落落落
今天的基础小课程就到这里了。