出现问题
解决问题
docker理念
Docker是基于Go语言实现的云开源项目,“Build,Ship and Run Any App,Anywhere” ==》一次镜像,处处运行
将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而 Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。
解决了运行环境和配置问题的软件容器, 方便做持续集成并有助于整体发布的容器虚拟化技术。
传统虚拟机技术基于安装在主操作系统上的虚拟机管理系统 (如: VirtualBox和VMWare等),创建虚拟机 (虚拟出各种硬件),在虚拟机上安装从操作系统,在从操作系统中安装部署各种应用。
虚拟机的缺点:
- 资源占用多
- 冗余步骤多
- 启动慢
Linux容器(Linux Containers,缩写为 LXC)
Docker 容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化。与传统的虚拟机相比,Docker 优势体现为启动速度快、占用体积小。
Docker 和传统虚拟化方式的不同之处
目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在CentOS 7 (64-bit)上,
- 要求系统为64位、Linux系统内核版本为 3.8以上,这里选用Centos7.x
查看自己的内核
cat /etc/redhat-release
、uname -r
镜像 =》 类;容器 =》 实例对象;仓库 =》 存放镜像的地方
Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。
- 它也相当于是一个root文件系统。比如官方镜像 centos:7 就包含了完整的一套 centos:7 最小系统的 root 文件系统。
- 相当于容器的“源代码”,docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。
从面向对象角度
- Docker 利用容器(Container)独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。
- 容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
从镜像容器角度
- 可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
仓库(Repository)是集中存放镜像文件的场所。
- 国内的公开仓库包括阿里云 、网易云等。
Docker 是一个 C/S 模式的架构,后端是一个松耦合架构,众多模块各司其职。
官网指导:https://docs.docker.com/engine/install/centos/
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
yum -y install gcc
yum -y install gcc-c++
sudo yum install -y yum-utils
国外库:
sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo
设置国内阿里云库:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl start docker
docker version
docker run hello-world
systemctl stop docker
sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
阿里云官方网址:https://promotion.aliyun.com/ntms/act/kubernetes.html
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://{自己的加速器地址}.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker有着比虚拟机更少的抽象层
由于docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
docker利用的是宿主机的内核,而不需要加载操作系统OS内核
当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。