Docker(1)

357 阅读3分钟

容器技术

这是我参与8月更文挑战的第8天,活动详情查看:8月更文挑战

最早的应用部署

我们需要购买一个物理服务器,就是电脑,然后再上面安装操作系统,之后再安装我们的应用

1585191519042.png

缺点:

  • 部署非常慢:首先需要装服务器到机房,然后再服务器上装系统,然后再部署应用,应用又可能需要非常多的环境依赖
  • 成本非常高:买物理服务器的成本很高
  • 资源浪费:应用可能根本不需要那么多cpu或内存
  • 难于迁移和扩展:如果要迁移,我们要额外找一台服务器并安装好操作系统环境依赖,扩展也是一样。

虚拟化技术部署

在物理服务器的基础上,添加了一个Hypervisor,来对我们物理资源进行一个虚拟化。

比如cpu,内存,硬盘资源进行虚拟化,然后我们在这个虚拟化之上再安装操作系统,就是一个虚拟机,这样的话如果物理服务器资源比较丰富,我们就可以按需进行资源虚拟,哪台虚拟机需要较好的性能就多分配一点,按需分配。

  • 一个物理机可以部署多个app
  • 每个app独立运行

1585191809084.png

优点:

  • 资源池:一个物理机的资源分配到了不同的虚拟机中
  • 容易扩展:加虚拟机
  • 容易云化:比如阿里云,腾讯云的云虚拟机

缺点:

  • 每个虚拟机都是一个完整的操作系统,必须分配其资源,当虚拟机增多,操作系统消耗就很大了
  • 当应用增多,每个App环境不同,开发者需要准备大量环境开发,运维人员维护也困难

容器技术的诞生

总体来说容器技术就是让我们更高效更简单的在Linux部署我们的项目

容器技术解决了什么问题?

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

什么是容器?

1585192535331.png

  • 对软件和其依赖进行打包,装在一个容器中,非常方便部署,比如一个java项目必须要Jdk,他就会把你的java源代码和jdk放到一个Container容器中,我们启动这个容器就相当于部署完毕,不需要在服务器上安装jdk
  • 应用之间相互隔离
  • 共享同一个OS Kernel,就是共享所在操作系统
  • 可以运行在很多操作系统上

容器和虚拟机的区别

1585192829699.png

虚拟机:在物理机基础上进行虚拟化技术,虚拟出多个虚拟机

容器:直接运行在物理机上,创建多个容器进行运行

当然,虚拟机和容器可以结合,就是我们现在物理机创建虚拟机,再在虚拟机上使用容器化技术

而对于Docker,其实就是容器技术的一种实现

Docker的安装

我们根据官网教程,一步步安装docs.docker.com/install/lin…

1)卸载旧版本

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2)安装必要软件包

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

3)设置下载的镜像仓库

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

4)安装指定版本docker

yum install docker-ce-18.06.1.ce -y

5)查看版本

docker -v

6)启动docker

systemctl start docker

systemctl enable docker

测试是否启动成功

docker ps

1584862658292.png

7)添加阿里云镜像下载

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://v4zkfq23.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker