集群与容器浅析

集群概念通常用来表示计算机网络集群架构,在如今互联网时代网络服务几乎都要依托集群系统进行架构,传统意义上的集群系统一般是指分布式应用集群,比如Jenkins所支持的Master/Slave架构就是典型意义上的应用集群系统,此时应用集群所依托的物理机或者操作系统这一层级的集群概念往往会被忽略掉,而在虚拟化技术和容器技术出现之后,PMC这一概念就要被明晰并作为集群架构构建的基础。

虚拟化技术的核心是hypervisor,可以简单的认为该软件中间件运行于Host OS KernelGuest OS Kernel之间,在Host机器上虚拟化出硬件环境并由此运行Guest系统内核,虚拟化技术可以简单的用来在一台机器上虚拟若干Guest系统实现虚机集群;也可以部署到物理机集群中灵活弹性的调用物理资源构建虚机集群;后者虚拟集群也常常被称为云系统,大名鼎鼎的OpenStack就是虚机集群/云部署管理平台,由此应用集群既可以直接部署到物理机集群也可以部署到之上构建的虚机集群中。

虚拟机技术的本质是在软件层面虚拟计算机硬件环境,虽然部署管理灵活但本身资源消耗较多,为此轻量级虚拟化技术 - 容器技术就主要用来解决该问题,容器的技术的核心在于Container,可以简单类比为系统进程,一般通过端口映射实现网络服务,Container的运行依赖于Image(镜像),在实际应用中简单的网络服务使用容器技术实现较为繁琐,不如虚机技术直观方便,因此容器技术主要应用场景为构建容器集群,支撑其上的大规模分布式应用集群系统。容器集群部署管理平台主要有DockerSwarmGooglek8s

这里写图片描述

Docker

在实践中容器技术往往等同于docker,虽然也有rkthttps://coreos.com/rkt/)这样的同类产品,但是docker的存在就像超新星一样耀眼的让其他产品都黯然失色,毕竟掀起容器技术浪潮的就是docker,集群技术从之前的HadoopOpenStack,在到如今炙手可热的docker,技术的迭代确实让人应接不暇。

docker的使用强烈建议阅读官方文档:https://docs.docker.com/

1. Install

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
apt-key fingerprint 0EBFCD88
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-get install docker-ce
docker run hello-world

docker程序安装完成后会自动启动dockerd值守进程service docker status,并建立docker daemon unix socket文件/var/run/docker.sockdocker命令访问该文件unix:///var/run/docker.sockdockerd进程通信,因此如果是普通用户因没有访问该socket文件的权限会导致docker命令执行失败。

2. docker command & dockerfile

docker container ls                                 # List all running containers
docker container ls -a                              # List all containers, even those not running
docker container stop <container_id>
docker container start <container_id>
docker container kill <container_id>
docker container rm <container_id>
docker container rm $(docker container ls -a -q)


docker images | docker image ls                     # List images on this machine (hides intermediate images)
docker image ls -a                                  # List all images on this machine (include intermediate images)
docker image rm <image_id>
docker image rm $(docker image ls -a -q)
docker image history <image_id>                     # List Layers of image


docker tag <image_id> <repository>:<tag>            # default tag is "latest"
docker pull <repository>:<tag>
docker run <repository>:<tag>
docker login                                        # Log in this CLI session to docker hub
docker push <repository>:<tag>


docker build -t <repository>:<tag> .                # Create image using this directory's Dockerfile
docker run -p 4000:80 <repository>:<tag>            # mapping port 4000 to 80
docker run -d -p 4000:80 <repository>:<tag>         # Same thing, but in detached mode

dockerfile定义docker build流程用于生成docker image,在放置dockerfile文件的当前目录执行docker build -t <repository>:<tag> . 即可。

扫描二维码关注公众号,回复: 1306559 查看本文章
FROM python:2.7-slim
WORKDIR /app
ADD . /app
RUN pip install --trusted-host pypi.python.org django
EXPOSE 80
ENV NAME World
CMD ["python", "--version"]

3. docker hub

docker hub即存放docker image的远端仓库,镜像的命令规则为<repos_domain>/<image_name>:<tag>,冒号前对应镜像的repository字段,冒号后对应镜像的tag字段,使用docker hub服务前需设置repos的用户名和登录密码,随后即可使用docker login --username=<username> <repos_domain> 并输入密码登录hub

因官方hub国内访问较慢,因此选用第三方容器镜像服务https://dev.aliyun.com/search.html,注册配置后即可推送镜像至hub

docker login --username=<username> registry.cn-qingdao.aliyuncs.com
docker tag <image_id> registry.cn-qingdao.aliyuncs.com/blabla/repos:<tag>
docker push registry.cn-qingdao.aliyuncs.com/blabla/repos:<tag>

猜你喜欢

转载自blog.csdn.net/melancholy123/article/details/78954500