Docker(一)入门,什么是Docker?与安装Docker

为什么要有Docker?

       开发与运维进行部署、协调时,开发需要清楚的告知运维团队,用的全部配置和相关的软件环境,这样也会有部署失败的情况,但很奇怪的是,代码在开发人员的环境是没有,在运维就出问题了,因此在排查此类问题就很耗费时间。

       在服务器上配置一个应用的运行环境需要安装各种软件,且还不能跨平台,在Windows安装了,在Liunx要重新安装,即便不跨操作系统,换一台机器的话,移植应用特别麻烦。

       运维如果部署多台机器时,需要部署多个相应的项目需要的所有软件。

       如果开发人员把项目所需要的相应软件都配置好并打成一个包给运维,而于屋内直接部署这个包就可以了,那就方便很多了,也不会出现开发和运维的环境不一致的问题。

       Docker就是为了解决以上的类似问题,提出的一个标准化解决方案。

Docker是什么?

       Docker是一个基于Go语言实现的开源项目,创始人是Solomon Hykes。

       Docker是在Liunx容器技术的基础上发展起来的,打破过去程序即应用的概念,通过镜像将作业系统核心除外的运作应用程序所需要的系统环境,由下而上打包(运行文档、配置环境、运行环境、运行依赖包、操作系统发行版、内核),达到应用程序跨平台间的无缝接轨、运行。,进而实现了跨平台、跨服务器、只需要一次配置好环境,换到别的机器上就可以一键部署好,大大简化了操作。

Docker的目标是Build Ship And Run Any App AnyWhere,也就是通过对应用组件封装、分发、部署、运行等生命周期的管理,使用户的应用及其运行环境能够做到一次封装、到处运行。

       Build(构建镜像) à Ship(运输镜像) à Run(运行镜像) à Any App(任何App) à Any Where(任何地方)

优点

一次构建、随处运行;

       轻量、秒级的快速启动应用,易于构建良好的RESTful API,也很适合自动化测试和持续集成,进而更快速的应用交付和部署;

       标准统一的打包、部署、运行,更简单的系统运维、升级、扩容;

       更高效的计算资源利用,基于容器虚拟化,仅包含业务运行所需的Runtime环境,CentOS/Ubuntu基础镜像仅170MB,宿主机可部署100 ~ 1000个容器;

       镜像支持增量分发、易于部署;

       活跃的社区;

缺点

       必须在64位机器上运行,只支持x86_64和AMD64,不支持32位系统,Liunx内核必须是3.8或以上;

       内核必须支持cgroups和命名空间;

       Docker的侵入式,增加了复杂的一层,让开发、调试、修复BUG变得复杂,经常创造很多问题,而不是解决问题,对于开发时,不带来显而易见的好处。

应用场景

       应用打包与部署自动化:物理机和虚拟机上部署运行环境时,面临环境杂乱、完整性迁移难度高;

       自动化测试和持续化集成、部署:自动化构建镜像和良好的RESTFul API,能够很好的集成到持续化集成部署环境来;

       部署与弹性扩展:容器是应用级的,资源占用小,弹性扩展、部署速度快;

       微服务:Docker的容器隔离技术,应对了微服务的理念,将业务模块放到容器中运行,加强了容器的可复用性;

核心技术

       cgroupsLiunx系统经常有个需求就是希望限制某个或某些进程的资源分配,于是就出现了cgroups概念,全称controller group,在这个group中有分配好的特定比例的cpu时间、io时间,后来被整合进Liunx内核中;cgroups中重要的概念是子系统,也就是资源控制器,每种子系统就是一个资源的分配器,如cpu子系统是控制cpu时间分配;分配的过程是首先要挂载子系统,然后才有controller groups的,比如先挂载memory子系统,然后在memory子系统中创建一个cgroup节点,在这个节点中,将需要控制的进程id写入,并且在控制的属性写入,这就完成了内存的资源限制;cgroups已被Liunx内核支持,在很多领域可以取代虚拟化技术分割资源技术,cgroups默认有诸多资源组,技术可以显示服务器上所有资源;

      

LXC全称是Liunx Containers,是一种基于容器的操作系统层级的虚拟化技术,借助namespace的隔离机制和cgroups限制功能,LXC提供了一套统一的API和工具来建立和管理container;LXC跟其他操作层级的虚拟化技术相比,最大的优势在于LXC被整合进内核,不用单独为内核打补丁;LXC旨在提供一个贡献Kernel的OS级虚拟化方法,在执行时不用重复加载Kernel,且container的Kernel与host共享,因此可以大大加快container的启动过程,并显著减少内存消耗,容器在提供隔离的同事,还通过共享这些资源节省开销,这意味着容器壁真正的虚拟机开销要小的多;

性能:LXC > KVM > XEN

内存利用率:LXC > KVM > XEN

隔离程度:XEN > KVM > LXC

       AuFS能透明覆盖一或多个现有文件系统的层状文件系统,支持将不同目录挂在同一个虚拟文件下,可以把不同目录联合在一起,组成一个单一的目录,这是一种虚拟的文件系统,文件系统不用格式化,直接挂载即可;Docker一直在用AuFS作为容器的文具系统,当一个进程需要修改一个文件时,AuFS创建该文件的一个副本,AuFS可以把多层合并成文件系统的单层表示,这个过程称为写入复制(copy or write);还允许Docker把某些镜像作为容器的基础,因此可以有一个开源作为很多不同容器的基础的CentOS的系统镜像,因此节省了存储和内存,也保证更快速的容器部署;使用AuFS的另一个好处是Docker的镜像能力,每个新版本都是一个与之前版本的简单差异改动,有效保持镜像文件最小化,但也意味着总需要有一个记录该容器从一个版本到另一个版本的改动审计跟踪;

基本组成

       Image(镜像):就是一个只读模板,可以用来创建Docker容器,一个镜像可以创建多个容器;

       Container(容器):独立运行的一个或一组应用,容器是用镜像创建的运行实例;容器可以被启动、开始、停止、删除,每个容器都是相互隔离的,保证安全的平台;可以把容器看做是一个简易版的Liunx环境(包括root用户权限、进程空间、用户空间和空间等)和运行在其中的应用程序;容器的定义和镜像几乎一模一样,也是一对层的统一视角,唯一区别在于容器的上面一层是可读可写的;

       仓库(Repository):集中存放镜像文件的场所;包括仓库和仓库注册器,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同标签(TAG);仓库分为公开仓库(Docker Hub)和私有仓库两种形式;

       Docker Daemon创建和运行Container的Liunx守护进程,也是Docker最主要的核心组件;理解理解为Docker Container的Container;可以绑定本地端口并提供RESTful API服务用来远程访问和控制;

       小结:

Docker本身是一个容器运行载体或管理引擎,把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就类似Image镜像文件,只有通过这个镜像文件才能生成Docker容器,Image文件可以看做是容器的模板,Docker根据Image文件生成容器的实例,同一个Image文件,可以生成多个同事运行的容器实例;

       Image文件生成的容器实例本身也是一个文件,称为镜像文件;一个容器运行一种服务,当我们需要的时候,就可以通过Docker 客户端创建一个对应的运行实例,也就是我们的容器仓储,就是放了一堆镜像的地方,把镜像发布到仓储,需要时从仓储拉下来即可;

Docker安装

安装条件

CentOS 6.5(64 Bit)或更高版本,系统内核版本为2.6.32-431或更高版本;

#查看操作系统内核版本号(内核版本号、硬件架构、主机名称、操作系统类型等)

       uname -r

       #查看操作系统版本

       cat /etc/redhat-release

Centos 6.8安装

       # Dcoker用EPEL发布,RHEL系OS要先确保已经有EPEL仓库并安装

       yum install -y epel-release

       #正式安装Dcoker

       yum install -y docker-io

       注:在安装时出现Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again错误, vi /etc/yum.repos.d/epel.repo 将baseurl注释取消,将mirrorlist注释掉

       #安装完成后的配置文件

       cat /etc/sysconfig/docker

#启动docker后台服务

       service docker start

       #验证是否成功

       docker version

       #配置镜像加速器:http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

vi /etc/sysconfig/docker

       #重启docker

service docker restart

       #查看是否配置了镜像加速

       ps -ef | grep docker

Centos 7安装

       官方文档:https://docs.docker.com/install/linux/docker-ce/centos/

      

       yum -y install gcc

yum -y install gcc-c++

gcc -v

#卸载老版本

       yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

       #安装需要的软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

       #配置连接仓库

       #这个是链接外网的

       yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

       #这个是使用国内阿里云(建议使用)   

       yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

       #更新yum软件包

yum makecache fast

#安装docker ce

yum -y install docker-ce

yum install docker-ce docker-ce-cli containerd.io

#启动docker

systemctl start docker

#配置阿里云镜像加速https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

mkdir -p /etc/docker

vim /etc/docker/daemon.json

#重启docker

systemctl reload docker(重新加载配置文件,不会中断服务)

systemctl docker restart(会先stop后在start,会重启服务)

       #查看是否配置了镜像加速

       ps -ef | grep docker

测试

       #以docker的方式运行一个叫hello-world的镜像,仔细看运行过程日志

       docker run hello-world

Docker安装软件

步骤

       搜索镜像

       拉取镜像

       查看镜像

       启动镜像

       停止容器

       移除容器

安装Mysql

       docker images

       docker search mysql

       docker pull mysql:5.6

       docker images

       #运行Myslq,-d后台服务运行为mysql5.6,-e初始化root用户密码,即环境变量

       docker run -p 12345:3306 -v /docksoft/mysql/conf:/etc/mysql/conf.d -v /docksoft/mysql/logs:/logs -v /docksoft/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

       docker ps

       docker exec -it 容器id /bin/bash

       pwd

       mysql -uroot -p

       MySQL备份:docker exec -it 9c201452821f mysqldump --all-databases -uroot -p"123456" > /dockersoftware/mysql/databases.sql

安装Redis

       docker images

       docker search redis

       docker pull redis

       docker run -p 6379:6379 -v /docksoft/redis/data:/data -v /docksoft/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes

       docker exec -it 容器id redis-cli

       set a b

       get a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值