虚拟化技术之Docker1
1.什么是虚拟化?
虚拟化原理
- 通过软件模拟主机来运行服务
使用场景
- 同时用多种不同的操作系统
- 提供资源使用率
- 实现资源隔离
实现的软件
- openstack
- kvm\xen\vsphere
- docker
什么是docker?
- 虚拟化软件
- 在一个操作系统中虚拟多个不同的、互相隔离的环境
- 基于lxc作为存储引擎(LXC基于模板的方式实现容器技术应用的解决方案 不适用于大规模集群)
- 使用特殊的镜像存储方式,更为高效
- 通过docker降低了容器的使用难度
使用docker的好处
- 实现服务的快速启动和隔离
- 降低了开发难度
- 降低了运维难度
关于容器概念(container)
- 容器是Docker所管理的对象
- 在容器中运行服务
- 通过容器实现服务之间的隔离
docker容器管理方案
- machine+swarm+compose
- meos+marathon
- kubbernets
6类名称空间
docker与kvm虚拟化对比
kvm虚拟化
- 基于硬件虚拟化技术,是需要cpu支持的,是虚拟出来一个虚拟机
- 虚拟机管理器是需要占用额外的系统资源的,占用6%左右的系统资源
docker虚拟化
- 基于内核虚拟化技术,没有虚拟任何东西
- 是通过隔离技术实现的
- 不会对系统带来额外的开销。
docker和openstack对比
2.安装Docker(这里我们使用centos7,7对虚拟化的支持比较完善)
第一步:
[[email protected] ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #使用阿里的源安装docker
[[email protected] ~]# yum -y install docker #安装 工作中我们要用docker-ce社区版 ee是企业版
第二步:
查找docker加速镜像地址 登录阿里云:https://developer.aliyun.com/
在控制台中找到镜像加速地址 {
"registry-mirrors": ["https://26ahzfln.mirror.aliyuncs.com"]
}
第三步:修改docker的配置文件
[[email protected] ~]# vim /etc/docker/daemon.json
{"registry-mirrors": ["https://26ahzfln.mirror.aliyuncs.com"]}
第四步:启动docker
[[email protected] ~]# systemctl daemon-reload
[[email protected] ~]# systemctl restart docker
[[email protected] ~]# systemctl enable docker[[email protected] ~]# docker info
第五步:拉取docker镜像
[[email protected] ~]# docker image pull centos
[[email protected] ~]# docker pull mysql
[[email protected] ~]# docker pull nginx
第六步:查看已拉取镜像
[[email protected] ~]# docker images
[[email protected] ~]# docker image ls
3.docker的基本操作
- 拉取镜像:docker pull
- 查看有哪些镜像:docker image
- 把镜像启动成容器:docker create/run
- 查看有哪些容器:docker ps
- 停止在运行容器:docker kill/stop
- 删除镜像:docker rmi
- 删除容器:docker rm
4.管理镜像的方法
拉取最新版本的nginx镜像
[[email protected] ~]# docker image pull nginx:latest
[[email protected] ~]# docker image pull nginx #默认是最新的
拉取nginx的1.18.0的镜像
[[email protected] ~]# docker image pull nginx:1.18.0
查看当前镜像有哪些
[[email protected] ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx 1.18.0 9fc56f7e4c11 2 weeks ago 132 MB
docker.io/nginx latest 2622e6cca7eb 2 weeks ago 132 MB
docker.io/mysql latest be0dbf01a0f3 2 weeks ago 541 MB
- REPOSITORY:指定docker的镜像仓库,和镜像名称
- TAG:镜像的标签
- yum 仓库
- IMAGE ID:镜像ID
- CREATED:什么时间制作的镜像
- SIZE:镜像的大小
删除镜像
[[email protected] ~]# docker rmi 9fc56f7e4c11
[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest 2622e6cca7eb 2 weeks ago 132 MB
docker.io/mysql latest be0dbf01a0f3 2 weeks ago 541 MB删除镜像可以指定镜像的id,也可以用镜像的名称
5.管理容器的方法
- 容器是基于镜像启动的
- 容器其实就是一个特定的环境,在这个环境中可以有运行程序
使用容器的场景
- 为新员工提供一个统一的开发环境,让其可以轻松的在这个环境汇总进行开发,不需要进行配置
- 可以理解容器就是一个虚拟机,在虚拟机中就有员工日常工作需要的全部环境
- 项目上线的是,也需要保证开发环境和服务器运行环境一致,否则会导致项目无法运行
容器的操作
- 启动容器:run
- 停止容器:kill
- 启动停止的容器:start
- 删除容器:rm
启动一个nginx容器
[[email protected] ~]# docker run -d --name nginx1 nginx:latest
24aa514dee88d5498dc03413cefa627c10e3902a5014713e9eb5b94511d9435c
- 启动容器时候需要用选项-d才能让容器工作在后台
- 容器名不能冲突,冲突会导致容器无法启动
查看当前正在运行的容器
[[email protected] ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
24aa514dee88 nginx:latest "/docker-entrypoin..." 46 seconds ago Up 45 seconds 80/tcp nginx1
查看全部的容器【包括已经停止的】
[[email protected] ~]# docker ps -a
删除容器
[[email protected] ~]# docker rm -f 24aa514dee88
24aa514dee88
- 可以指定容器的id,也可以指定容器的名称
- 默认只能删除已经停止的容器
- -f选项可以删除正在运行的容器
[[email protected] ~]# docker rm -f $(docker ps -a -q) #删除所有容器
显示容器的id值
[[email protected] ~]# docker ps -a -q
- 有a是显示全部容器的id
- 不加a是显示正在运行的容器的id
启动容器的格式
- docker run 选项 镜像名称 [执行命令]
相关选项
- -d:让容器工作在后台
- -i:让容器工作在前台
- -t:生成一个终端,让用后基于这个终端登录容器
- --rm:当容器停止的时候,自动删除
- --name xxx:指定容器的名。容器名是不能冲突
执行命令
- 执行命令指的是容器启动以后要运行要执行命令
- 这个命令一旦执行完,容器就停止了
- 这就是容器的-容器的主命令
启动一个nginx容器, 容器工作在后台
[[email protected] ~]# docker run --name nginx1 -d nginx:latest
37fe2c03c9f8350d6aa4a5092e51982aa1c1fa7c93f61f102f7a836bbc9eef09
启动一个nginx容器的同时进入这个容器
[[email protected] ~]# docker run --name nginx7 -it nginx:latest /bin/bash
[email protected]:/#
查看容器的详细信息
- docker inspect 容器名
进入容器的方法
- 方法1:在启动容器的时候,直接进入容器
格式:docker -it --name 容器名 镜像名 /bin/sh
此方式退出容器后,容器自动停止
- 方法2:先启动容器,让容器工作在后台,然后才进入容
格式:docker run --name 容器名 -d 镜像名
docker exec -it 容器名 /bin/sh
此方式退出容器后,容器依然在运行
为什么使用容器
- 使用容器就是为了在宿主机中创建多个独立的运行环境