Docker虚拟化

Posted zhangan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker虚拟化相关的知识,希望对你有一定的参考价值。

1. Docker虚拟化特点

跟传统VM比较具有如下优点:

  • 操作启动快

运行时的性能可以获取极大提升,管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。

  • 轻量级虚拟化

你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。但是传统虚拟化,你虚拟10-20个虚拟机就不错了。

  • 开源免费

开源的,免费的,低成本的。由现代Linux内核支持并驱动。注* 轻量的Container必定可以在一个物理机上开启更多“容器”,注定比VMs要便宜。

2. 为什么使用docker

Docker 在如下几个方面具有较大的优势:

  • 更快速的交付和部署

Docker在整个开发周期都可以完美的辅助你实现快速交付。Docker允许开发者在装有应用和服务本地容器做开发。可以直接集成到可持续开发流程中。

开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。

  • 高效的部署和扩容

Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。

Docker的兼容性和轻量特性可以很轻松的实现负载的动态管理。你可以快速扩容或方便的下线的你的应用和服务,这种速度趋近实时。

  • 更高的资源利用率

Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。

  • 更简单的管理

使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

3. Docker镜像原理

一个完整的Docker镜像可以支撑一个Docker容器的运行,在Docker容器运行过程中主要提供文件系统数据支撑。

Docker镜像作为docker中最基本的概念,有以下几个特性:

  • 镜像分层,每个镜像都由一个或多个镜像层组成;
  • 可通过在某个镜像加上一定的镜像层得到新镜像(此过程可通过编写dockerfile或基于容器Commit实现);
  • 每个镜像层拥有唯一镜像ID;
  • 镜像在存储和使用时共享相同的镜像层(根据ID),所以在pull镜像时,已有的镜像层会自动跳过下载;
  • 每个镜像层都是只读,即使启动成容器,也无法对其真正的修改,修改只会作用于最上层的容器层;

Docker容器,可以理解为一个或多个运行进程,而这些运行进程将占有相应的内存,相应的CPU计算资源,相应的虚拟网络设备以及相应的文件系统资源。而Docker容器所占用的文件系统资源,则通过Docker镜像的镜像层文件来提供。

基于每个镜像的json文件,Docker可以通过解析Docker镜像的json的文件,获知应该在这个镜像之上运行什么样的进程,应该为进程配置怎么样的环境变量,Docker守护进程实现了静态向动态的转变。

4. Docker安装配

CentOS7.x Linux,基于YUM二进制方式,操作命令如下:

#安装第三方Epel-relase扩展源;
yum install epel-release -y
#安装Docker软件包程序;
yum install docker -y
#查看Docker软件包是否部署;
yum list docker
rpm -qa|grep -w docker
#启动Docker Engine服务;
systemctl start docker.service
#查看Docker版本信息;
docker version
 
根据如上Docker部署方法,Docker虚拟化平台构建完成,如图所示:

技术图片

5. Docker仓库源更新实战

Docker默认连接的国外官方镜像,通常根据网络情况不同,访问时快时慢,大多时候获取速度非常慢,为了提示效率可以自建仓库或者先修改为国内仓库源,提升拉取镜像的速度。

Docker可以配置的国内镜像有很多可供选择,例如:Docker中国区官方镜像、阿里云、网易蜂巢、DaoCloud等,这些都是国内比较快的镜像仓库。

从国外官网下载Docker Tomcat镜像,访问速度慢,

Docker镜像修改方法,vim /etc/docker/daemon.json,执行如下命令即可:

cat>/etc/docker/daemon.json<<EOF

"registry-mirrors":["https://registry.docker-cn.com"]

EOF

service docker restart

systemctl start docker.service

重启Docker服务即可,修改仓库地址为国内仓库后,获取镜像速度非常快。

6. Docker常用命令讲解

Docker常用命令详解:

docker  version #查看版本

docker  search centos #搜索可用docker镜像

docker  images 查看当前docker所有镜像

docker  pull  centos #下载镜像

cat   centos.tar | docker import  -  centos6  #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(容器的id  centos:v1

docker run -it -d centos /bin/bash 生成一个新的/bin/bash shell环境的容器,可以登录进入操作,其中-t 表示打开一个终端的意思,-i表示可以交互输入。

docker exec -it  id  /bin/bash  进入容器里面

docker  run  -d  centos:v1  /bin/bash  ,-d表示在后台启动,以daemon方式启动。  

docker stop  id 关闭容器

docker start  id 启动某个容器

docker  rm  id 删除容器,docker  rmi  images删除镜像

docker  run  -d  -p 80:80   centos:v2,解析:-p指定容器启动后docker上运行的端口映射及容器里运行的端口,80:80,第一个80表示docker系统上的80,第二个80表示docker虚拟机里面的端口。用户默认访问本机80端口,自动映射到容器里面的80端口。

Docker命令表格如下:

docker

search

在docker hub中搜索镜像;

docker

pull

从docker镜像源服务器拉取指定镜像或者库镜像;

docker

push

推送指定镜像或者库镜像至docker源服务器;

docker

history

展示一个镜像形成历史;

docker

images

列出系统当前镜像;

docker

run

创建一个新的容器并运行一个命令;

docker

start

启动容器;

docker

stop

停止容器;

docker

attach

当前shell下attach连接指定运行镜像;

docker

build

通过Dockerfile定制镜像;

docker

commit

提交当前容器为新的镜像;

docker

cp

从容器中拷贝指定文件或者目录到宿主机中;

docker

create

创建一个新的容器,同run,但不启动容器;

docker

diff

查看docker容器变化;

docker

events

从docker服务获取容器实时事件;

docker

exec

在已存在的容器上运行命令;

docker

export

导出容器的内容流作为一个tar归档文件[对应import];

docker

import

从tar包中的内容创建一个新的文件系统映像[对应export];

docker

info

显示系统相关信息;

docker

inspect

查看容器详细信息;

docker

kill

指定docker容器;

docker

load

从一个tar包中加载一个镜像[对应save];

docker

login

注册或者登陆一个docker源服务器;

docker

logout

Docker registry退出;

docker

logs

输出当前容器日志信息;

docker

port

查看映射端口对应的容器内部源端口;

docker

pause

暂停容器;

docker

ps

列出容器列表;

docker

restart

重启运行的容器;

docker

rm

移除一个或者多个容器;

docker

rmi

移除一个或多个镜像;

docker

save

保存一个镜像为一个tar包[对应load];

docker

tag

给源中镜像打标签;

docker

top

查看容器中运行的进程信息;

docker

unpause

取消暂停容器;

docker

version

查看docker版本号;

docker

wait

截取容器停止时的退出状态值。

 

6. Docker虚拟化平台的案例

1)根据如上的Docker部署指令,Docker虚拟化平台构建完成,作为运维人员如何在企业中应用好Docker软件呢?能够使用Docker虚拟化平台实现哪些企业需求呢?Docker虚拟化技术的产物是Docker容器(虚拟机)。
2)要掌握Docker虚拟化技术,首先要了解3个Docker虚拟化相关的概念:
  •  Docker镜像
Docker镜像类似Linux ISO镜像文件,主要是存储了各种应用程序、软件服务、各种数据等,为Docker虚拟化的产物(虚拟机)提供数据支撑的,后续的虚拟机所需的文件、数据都是从镜像文件中获取的,而且Docker镜像内容只读的、不能被修改的、模板数据。
  • Docker容器(虚拟机)
Docker容器(虚拟机)是基于Docker镜像运行之后的实例,类似进程和程序的关系(进程是程序运行之后的实例),Docker容器是可读、可写的,不能直接修改镜像的数据内容,镜像是持续为容器提供服务,没有镜像就没有容器,容器永远离不开镜像。
  •  Docker仓库
Docker仓库是用于存储镜像的地方,仓库通常分为两类:公共仓库、私有仓库,企业测试环境、生产环境推荐自建私有仓库,私有仓库:安全、稳定、高效、管理、定制性。
 
3)基于Docker虚拟化平台,构建一套nginx WEB服务器(容器),同时让NginxWEB服务器对外提供WEB服务,用户通过浏览器可以实现页面的访问,操作步骤如下:
#在Docker仓库中搜索Nginx镜像;
docker search nginx
技术图片
 
#从Docker仓库下载Nginx镜像;
docker pull docker.io/nginx
#查看本地Nginx镜像列表;
docker images|grep -i nginx
技术图片
 
#基于本地Nginx镜像启动Nginx WEB服务(容器|虚拟机);
docker run -itd -p 80:80 docker.io/nginx
  Run,全新启动一台容器(虚拟机);
  • -i,interactive交互模式;
  • -t,tty打开一个终端;
  • -d,daemon后台启动;
  • -p,开启DNAT映射,将宿主机80映射至容器的80,用户访问宿主机的80即是访问容器的80。
#查看已经启动的Nginx虚拟机(容器);
  • docker ps

技术图片

#访问Nginx容器中的WEB服务;
技术图片
#查看虚拟机(容器)的IP地址;
docker inspect 3d5559023d71|grep -i ipaddr|tail -1|awk -F\\" ‘print $4‘
技术图片
 
#将宿主机的index.html文件部署至Nginx容器(虚拟机)中;
docker cp index.html 3d5559023d71:/usr/share/nginx/html/
技术图片
技术图片
 
 
4)Docker虚拟化构建Nginx+Tomcat集群
#基于Docker构建Tomcat WEB平台,操作方法如下:
#从docker仓库搜索tomcat镜像;
docker search tomcat
#从Docker仓库下载tomcat镜像;
docker pull docker.io/tomcat
#查看本地tomcat镜像列表;
docker images|grep -i tomcat
#基于tomcat镜像运行tomcat容器(虚拟机);
docker run -itd -p 8080:8080 docker.io/tomcat:latest
docker run -itd -p 8081:8080 docker.io/tomcat:latest
#查看tomcat容器是否启动;
docker ps|grep -i tomcat
#查看tomcat容器的IP地址;
docker inspect 容器id|grep -i ipaddr|tail -1
#进入docker容器中,命令;
docker exec -it 9bfbcb5d7bc3 /bin/bash
#宿主上查看docker容器中配置文件;
docker exec d8237e80d49b cat /etc/nginx/conf.d/default.conf
docker exec d8237e80d49b mkdir /tmp/`date +%F`
docker exec d8237e80d49b ls /tmp/
技术图片
#通过浏览器访问Docker宿主机IP+8080即可;
http://docker宿主机IP:8080/
http://docker宿主机IP:8081/
技术图片
 
#配置Nginx整合2台Tomcat WEB集群,实现负载均衡+动静分离架构;
#Nginx主配置文件代码如下:
cat default.conf
upstream tomcat_web
server 172.17.0.3:8080 weight=100 max_fails=2 fail_timeout=15;
server 172.17.0.4:8080 weight=100 max_fails=2 fail_timeout=15;
server
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location /
root /usr/share/nginx/html;
index index.html index.htm;
proxy_pass http://tomcat_web;proxy_set_header host $host;
 
 

以上是关于Docker虚拟化的主要内容,如果未能解决你的问题,请参考以下文章

虚拟化技术之docker技术详解

❤️虚拟化技术❤️之docker技术详解[⭐建议收藏⭐]

Docker学习笔记——Docker安装启动

Docker学习笔记——Docker安装启动

docker与虚拟化的联系与区别

docker和虚拟机的区别