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
|
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虚拟化平台的案例
- Docker镜像
- Docker容器(虚拟机)
- Docker仓库
- -i,interactive交互模式;
- -t,tty打开一个终端;
- -d,daemon后台启动;
- -p,开启DNAT映射,将宿主机80映射至容器的80,用户访问宿主机的80即是访问容器的80。
-
docker ps
#从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/
|
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虚拟化的主要内容,如果未能解决你的问题,请参考以下文章