1、Docker虚拟化入门简介
1)Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
2)Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包括系统。
3)Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在LXC的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
4)Docker 和传统虚拟化对比
传统虚拟化方案需要部署Nginx,先部署OS系统,基于OS系统再部署Nginx:
Docker虚拟化方案需要部署Nginx,无需部署OS系统,基于Docker引擎直接部署Nginx:
Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件的基础上,虚拟出自己的系统,再在系统上部署相关的APP应用。
2、Docker虚拟化概念 (重点)
Docker虚拟化的概念理解,分别镜像、容器、仓库。
镜像:Docker的镜像其实就是模板,跟我们常见的ISO镜像类似,是一个样板。
容器:使用镜像常见的应用或者系统,我们称之为一个容器。
仓库:仓库是存放镜像的地方,分为公开仓库(Public)和私有仓库(Private)两种形式。
3、Docker虚拟化对比传统VM的优点
-
操作启动快:
运行时的性能可以获取极大提升,管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。 -
轻量级虚拟化:
你会拥有足够的“操作系统”,仅需添加或减小镜像。在一台服务器上可以布署上百上千Containers容器。但是传统虚拟化,虚拟10-20个虚拟机就不错了。 -
开源免费:
开源,免费,低成本。由现代Linux内核支持并驱动。 - 前景及云支持:
正在越来越受欢迎,包括各大主流公司都在推动docker的快速发展,性能有很大的优势。
4、使用Docker的优势
- 更快速的交付和部署
Docker在整个开发周期都可以完美的辅助实现快速交付。Docker允许开发者在装有应用和服务本地容器做开发。可以直接集成到可持续开发流程中。 - 高效的部署和扩容
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。 - 更高的资源利用率
Docker 对系统资源的利用率很高,一台主机上可以同时运行上百个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。 - 更简单的管理
使用 Docker,只需要小范围的修改,就可以替代以往大量的更新工作、所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
5、Docker镜像原理
Docker镜像可以支撑一个Docker容器的运行,在Docker容器运行过程中主要提供文件系统数据支撑。
Docker镜像作为docker中最基本的概念,有以下几个特性:
- 镜像分层,每个镜像都由一个或多个镜像层组成
- 可通过在某个镜像加上一定的镜像层得到新镜像(此过程可通过编写dockerfile或基于容器Commit实现)
- 每个镜像层拥有唯一镜像ID
- 镜像在存储和使用时共享相同的镜像层(根据ID),在pull镜像时,已有的镜像层会自动跳过下载
- 每个镜像层都是只读,即使启动成容器,也无法对其真正的修改,修改只会作用于最上层的容器层
Docker容器,可以理解为一个或多个运行进程,而这些运行进程将占有相应的内存,相应的CPU计算资源,相应的虚拟网络设备以及相应的文件系统资源。而Docker容器所占用的文件系统资源,则通过Docker镜像的镜像层文件来提供。
每个镜像的json文件,Docker可以通过解析Docker镜像的json的文件,获知应该在这个镜像之上运行什么样的进程,应该为进程配置怎么样的环境变量,Docker守护进程实现了静态向动态的转变。6、Docker安装配置
操作系统:centos7
查看内核:uname -r
内核版本:3.10.0-1160.el7.x86_64
官网地址:https://docs.docker.com/engine/install/centos/
1、卸载旧版本docker:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、安装yum-utils软件包
yum install -y yum-utils
3、设置仓库地址
官方仓库地址、国内不建议使用
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
4、安装docker引擎
docker社区、 ce为社区版 ee企业版 官方推荐使用ce版,默认安装最版本的docker,
yum install docker-ce docker-ce-cli containerd.io
7、安装特定版本的Docker Engine
要安装特定版本的Docker Engine,请在存储库中列出可用版本,然后选择并安装:
yum list docker-ce --showduplicates | sort -r
返回的列表取决于启用的存储库,并且特定于您的CentOS版本(.el7在本示例中以后缀表示)。
该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)到第一个连字符,以连字符(-)分隔。例如,docker-ce-18.09.1。
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
5、启动Docker。
systemctl start docker
6、添加到开机自启动
systemctl enable docker
7、查看dockers是否启动
docker version
8、通过运行hello-world 映像来验证是否正确安装了Docker Engine 。
docker run hello-world
9、卸载Docker
1、卸载Docker Engine,CLI和Containerd软件包:
yum remove docker-ce docker-ce-cli containerd.io
2、主机上的映像,容器,卷或自定义配置文件不会自动删除。要删除所有图像,容器和卷:
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
必须手动删除所有已编辑的配置文件。
10、Docker常用命令
docker version 查看版本
docker search centos 搜索可用docker镜像
docker images 查看当前docker所有镜像
docker pull centos 下载镜像
cat centos.tar | docker import - centos6_newname Docker导入镜像
docker export 容器_id > cenos6.tar Docker导出镜像
docker run centos echo "hello word" 在docker容器中运行hello world!
docker run centos yum install ntpdate 在容器中安装ntpdate的程序
docker ps -l 命令获得最后一个容器的id,docker ps -a查看所有的容器。
运行docker commit 提交刚修改的容器,例如:
docker commit 2313132 centos:v1
docker run -i -t -d centos /bin/bash 在容器里启动一个/bin/bash shell环境,可以登录进入操作,其中-t tty,表示打开一个终端的意思,-i interactive,表示可以交互输入,-d表示在后台启动,以daemon方式启动。
docker run -d centos:v1 /bin/bash
Docker stop id 关闭容器
Docker start id 启动某个容器
docker rm id 删除容器,
docker rmi images 删除镜像
docker run -d -p 80:80 -p 8022:22 centos:v2,解析:-p指定容器启动后docker上运行的端口映射及容器里运行的端口,80:80,第一个80表示docker系统上的80,第二个80表示docker虚拟机里面的端口。用户默认访问本机80端口,自动映射到容器里面的80端口。
docker exec -it id /bin/bash 进入容器终端
docker exec id ifconfig 查看容器的IP地址;
Docker inspect id |grep -i ipaddr 查看容器IP地址;
Docker exec df -h 查看容器的磁盘分区信息;