走进Docker的世界

Docker容器

近年来云计算虚拟化越来越多的运用在各大企业,docker的应运而生成为各大公司喜欢的强手技术。

  • 为什么要使用虚拟化技术?

  • 所以虚拟化技术应运诞生

那为虚拟化技术的诞生是为了解决什么问题呢?

传统的一台服务之运行一个APP,极大程度上的浪费了资源。又当访问量极大的时候无法正常的负载巨大的访问量,所以需要一种能够节省资源的应用层的解决方案。

  • 部署非常慢
  • 成本非超高
  • 资源浪费
  • 很难迁移和扩展
  • 可能会被限定硬件厂商

虚拟化技术的出现有什么改善呢?

  • 一个物理机器可以部署多个APP
  • 每一个APP可以独立的运行在一个虚拟的环境中互不干扰
  • 极大的节约了资源的浪费

虚拟化技术的优点

  • 资源池 –> 一个物理机的资源分配到了不同的虚拟机中
  • 很容易的扩展 –> 加物理机或者加虚拟机
  • 很容易云化 –> 亚马逊AWS,阿里云,腾讯云(商业优势)

虚拟化的局限性

  • 每一个虚拟机都是一个完整的操作系统,要给其分配的资源,当虚拟机数量增多的时候,操作系统本身消耗的资源势必增多。

openstack、虚拟化、容器?

  • docker和一个完整虚拟机器一样,但是缺少OS层,更加的精简高效。

  • 容器相当于进程存在

为什么需要docker呢?

已经存在了虚拟化技术为什么又诞生了Docker技术呢?

虽然虚拟化技术极大的节省了资源但是,对于当今的开发人员和运维人员来说,一个服务的上线还是需要大量的事前的部署,解决依赖问题,解决优化问题。也是暂用了极大的时间。

容器解决了什么样的问题呢?

  • 解决了开发和运维之间的矛盾
  • 在开发和运维之间搭建了桥梁
  • 实现了devops的解决方案

什么是容器?

  • 对软件和其依赖的标准化的打包
  • 应用之间想换的隔离
  • 共享一个真机的OS内核(kernel)
  • 可以跨平台运行在各大操作系统之上

docker的本质

传统的服务一个机器跑一个服务,这样会严重造成资源的严重的浪费。
通过虚拟化,来实现一台机器虚拟化,一个虚拟机跑一个服务,节省资源。


– 容器是APP层面上的隔离
– 虚拟化是物理资源层面上的隔离

什么是Docker Platform?

  • Docker提供一个开发、打包、运行app的平台
  • 把APP和底层的硬件隔离开

docker入门基础

容器的发展历史

什么是镜像呢?

简单说,Docker镜像是一个不包含Linux内核而且又精简的Linux操作系统。

镜像从那里来?

Docker Hub是国外的源,下载会慢,可以国内的资源提供下载速

https://hub.docker.com/         #由docker官方维护的docker镜像文件站点
我们可以是用加速器进行加速下载!
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://68abbefd.m.daocloud.io          #docker海外镜像下载加速

关于docker的工作过程?

当我们启动一个新的容器的时候,docker会加载只读文件,并且在其中之上添加一个读写层,并且将镜像中的目录复制一份到/var/lib/docker/aufs/mnt容器ID的目录下。只读层的这个文件就会覆盖,但是还是存在的,这就实现了文件系统的隔离,当删除了容器之后,读写层的数据都将会删除,只读镜像不变。

安装最新的docker

  • 配置官方的YUM源
cat >/etc/yum.repos.d/docker.repo <<-EOF
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
  • 脚本安装最新的源
yum -y update;curl -sSL https://get.docker.com/ | sh

创建容器命令格式:

当今的使用的docker大多数的都是在ubuntu上使用

yum -y install docker
systemctl restart docker
docker pull ubuntu      #下载ubuntu的镜像
cd /var/lib/docker ;ls

有关docker常用的配置文件目录存放的文件:

文件名 作用
aufs 存放docker文件的镜像例如:读写层的镜像拷贝都放在里面
containers 存放docker的容器信息比如源数据信息
image 存储镜像文件
network 网络信息
plugins 关于docker的插件
volumes 存放了docker的数据卷

镜像文件存储结构

docker相关文件存放在:/var/lib/docker

/var/lib/docker/aufs/diff       #每层与其父层之间的文件差异
/var/lib/docker/aufs/layers   #每层一个文件,记录其父层一直到根层之间的ID,大部分的文件的最后一行都,表示继承来自同一层
/var/lib/docker/aufs/mnt         #联合挂载点,从只读层复制到最上层可读写的文件系统数据
#当建立镜像的时候,每次写的操作,都没视为一种增量操作,即在原有的基础上添加一个新层,所以在一个镜像会有若干个层组成。每次commit提交就会产生一个ID,就相当于在上一层加了一层新的,可以通过这个ID对镜像进行回滚操作。
docker image ls     #查看当前的docker镜像文件

docker的基础命令学习:

docker run -itd -h 指定容器的名称 镜像的文件名称
docker ps -l        #查看当前的运行中的docker容器
docke ecex name hostname        #查看当前的容器内的名称
docker network create --subnet=10.0.0.0/16 network_10       #为docker创建一个网络地址
docker network ls       #查看当前存在的docker网络连接

为刚才创建的主机分配一个IP地址

docker run -itd --net=network_10 --ip 10.0.0.123 ubuntu         #当容器数量多了我们需要隔离可以利用IP隔离
docker inspect 你所创建出来的docker名称

创建一个随机的基于我们之前给予的有IP地址的机器

docker run -itd --link wizardly_thompson:gg ubuntu

  • docker exec 名称 cat /etc/hosts 查看当前docker终端的本地host

  • docker run -itd –add-list ddy:192.168.1.1 名称 为这个容器动态的添加域名解析

  • create和run两个虽然都是创建但是一个是创建不启动,一个是创建并且启动。

    docker container ls -a #查看当前目录下的所有运行的容器
    docker rm $(docker container ls -f “status=exited” -q) #将当前的所有状态为exited的容器的ID号打印出来并作为变量传递给docker rm删除

    -T,–tty 给你的容器分配一个伪终端

    docker image 显示当前的docker镜像

    docker ps(-a)查看已经在运行的程序,a显示所有包括停止的

    docker attach 名称 进入终端

发表评论