虚拟化技术之Docker1

1.什么是虚拟化?

虚拟化原理

  • 通过软件模拟主机来运行服务

使用场景

  • 同时用多种不同的操作系统
  • 提供资源使用率
  • 实现资源隔离

实现的软件

  • openstack
  • kvm\xen\vsphere
  • docker

什么是docker?

  • 虚拟化软件
  • 在一个操作系统中虚拟多个不同的、互相隔离的环境
  • 基于lxc作为存储引擎(LXC基于模板的方式实现容器技术应用的解决方案 不适用于大规模集群
  • 使用特殊的镜像存储方式,更为高效
  • 通过docker降低了容器的使用难度

使用docker的好处

  • 实现服务的快速启动和隔离
  • 降低了开发难度
  • 降低了运维难度

关于容器概念(container)

  • 容器是Docker所管理的对象
  • 在容器中运行服务
  • 通过容器实现服务之间的隔离

docker容器管理方案

  • machine+swarm+compose
  • meos+marathon
  • kubbernets

6类名称空间

虚拟化技术之Docker1

docker与kvm虚拟化对比

 kvm虚拟化

  •  基于硬件虚拟化技术,是需要cpu支持的,是虚拟出来一个虚拟机
  •  虚拟机管理器是需要占用额外的系统资源的,占用6%左右的系统资源

 docker虚拟化

  •  基于内核虚拟化技术,没有虚拟任何东西
  •  是通过隔离技术实现的
  •  不会对系统带来额外的开销。

docker和openstack对比

虚拟化技术之Docker1

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

                       此方式退出容器后,容器依然在运行

为什么使用容器

  • 使用容器就是为了在宿主机中创建多个独立的运行环境