起源:
Linux 容器(LXC)技术类似于沙盒(SandBox)的概念,让进程在隔离的“容器”中运行,是Docker 容器的基础。Docker做了进一步封装,使得用户操作更简单。Docker 容器就像要给快速轻量级的虚拟机一样。
和虚拟机的比较:广泛引用的图
传统的虚拟化方式中部署一个应用,并不是只有十几MB的应用本身和依赖项,还要包括十几GB的Guest OS.
Docker虚拟化方式部署一个应用,只包含应用和它所需的依赖项。容器作为一个独立的进程运行在Host OS 的用户空间,和其他进程共享系统内核,这样既能像虚拟机一样进行资源分配和隔离,又更加的轻便高效。
基本概念:
容器:Container 运行态。 容器是实际运行的一个进程,容器进程模拟了一个运行环境,应用部署在这个虚拟的环境上运行。容器可以被启动,开始,停止,删除。容器之间相互隔离,保证安全平台。
镜像:Image 容器模板。 就像对象的类一样,为docker创建容器提供规格说明。即容器是什么样子的。镜像是只读的,从一个镜像启动一个容器时候创建一层可写层作为最上层,容器中的修改都保存在最上层的可写层。
仓库/注册服务器:Repository 保存镜像的地方。仓库提供存储,复用,共享,分发 镜像的功能。公共仓库(public)和私有仓库(private).最大的公共仓库是Docker Hup,国内公开仓库Docker Pool。私有仓库可以建立在用户的本地网络中。注册服务器就是提供仓库功能的服务器,一个注册服务器中可以建立多个仓库。类似git和github,git是版本控制系统,github是托管的网络版本控制系统,在github的服务器上可以创建多个库存放代码。
镜像名称: [REGISTRY_HOST/][USER_NAME/][IMAGE_NAME][:TAG]。完整的镜像名称由两部分组成<仓库名>/<镜像名>。 仓库名=仓库在注册仓库服务器上的访问url,镜像名=镜像名:tag, 如果不指定tag 则用默认tag=latest。在docker hub上由docker公司维护的镜像其名称是单个名字,有其他用户分享的镜像其名称是加了用户前缀,类似: user_name/image_name.
私有仓库:
Docker提供了在用户本地创建仓库的方法,docker-registry是docker提供的构建本地仓库的工具,其作为docker的一个容器在本地运行。可以从官方网站获取registry镜像,然后启动容器。
docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/resigtry myregistry
#-p 参数用于做端口映射,把宿主机的端口5000(前)映射到容器的端口5000(后)。 #-v 参数用于把镜像存放在容器中的位置/tmp/registry映射到宿主机的/opt/data/registry. # myregistry是本地运行的私有仓库容器的名字。
curl命令可以用来查询本地仓库中的镜像:
curl http://host_ip[:port]/v1/search
curl http://host_ip[:port]/v2/_catalog
查询结果形如:{“description":"", "name": "localhost:5000/test_image"}
本地仓库的配置模板被称为flavor,配置文件中预定义一些flavor,一个flavor针对于一种场景,如PROD/DEV/TEST/COMMON 等环境使用不同的flavor。 通过设置环境变量export SETTING_FLAVOR=dev 指定当前启用的flavor。
配置示例:config_sample.yaml
common: #flavor名称
loglevel: info
search_backend: "_env: SEARCH_BACKEND"
......
prod:
loglevel: warn
storage: s3
s3_access_key: _env: AWS_S3_ACCESS_KEY #_env 表示由环境变量自定义
s3_search_key: _env: AWS_S3_SECRET_KEY
......
dev:
loglevel: debug
storage: local
storage_path: /home/myself/docker
test:
storage: local
storage_path: /tmp/tmpdockrtmp