Docker虚拟化技术学习与应用

Docker虚拟化技术

什么是Docker?

它是Linux里运行的应用的开源软件,它跟KVM的区别更像是Docker是运行在Linux系统中的一个软件,以应用的形式来模拟成虚拟机使用(想象一下再Windows上运行VMware和QQ),既可以是一个应用,也可以是一台服务,甚至是一个完整的操作系统

Docker与传统虚拟化比较

启动速度更快、计算能力损耗几乎无、性能接近原生超过虚拟机、系统支持量也远远超过虚拟机、隔离性资源限制,而虚拟机完全隔离

Docker的核心概念

镜像:Docker的镜像是创建容器的基础,可以理解是一个安装系统环境的镜像,也可以理解为是安装一个应用程序的镜像

容器:Docker的容器是从镜像创建来的运行实例,可以创建、启动、停止和删除,所创建的每个容器都是相互隔离、互不可见的,可以保证平台安全

仓库:Docker的仓库是用来存储镜像的地方可以把创建的镜像使用push命令上传上去,其他容器使用可以直接pull下来

安装Docker

安装Docker的两种方式|:curl获得安装脚本安装和yum仓库进行安装

注意:这里是在CentOS7.2下yum进行安装,目前Docker只支持64位系统

1.下载安装docker

yum -y install docker

2.启动docker服务

systemctl start docker

查看docker版本信息:docker version

一、Docker的镜像和容器的操作

搜索镜像:docker search 关键字

比如:docker search nginx

下载镜像:docker pull docker.io/linuxserver/nginx

查看镜像信息:docker images

REPOSITORY:镜像属于的仓库

TAG:镜像的标签信息

IMAGE ID:镜像的唯一ID号

CREATED:镜像的创建时间

VIRTUAL SIZE:镜像的大小

可以通过红线圈起来的ID号查看该镜像的详细信息:docker inspect fb5ca9bbaab4

本地镜像添加新的标签:docker tag 名称 新名称:新标签

比如:docker tag docker.io/linuxserver/nginx nginx:nginx

删除镜像:docker rmi nginx:nginx

注意:当镜像拥有多个标签时,该命令只是删除该镜像的一个标签而已,删除命令后面跟ID时,确保该镜像没有被容器使用,会先删除所有标签,再删除该镜像本身,如果该镜像被容器使用,正确做法是先删除依赖该镜像的所有容器再删除该镜像

镜像的导出和载入(从一台机器上导出镜像,然后复制镜像文件可以载入到其他机器上使用该镜像)

导出镜像:docker save -o 存储文件名  存储的镜像

比如:docker save -o nginx docker.io/linuxserver/nginx

载入镜像:docker load < nginx 或者 docker --input nginx

上传镜像:在公共仓库成功注册一个账号,登录使用push命令上传

比如这个账号为admin:

docker tag docker.io/linuxserver/nginx admin/nginx:nginx

docker login

docker push admin/nginx:nginx

创建容器:docker create 【选项】镜像 运行的程序环境

-i:让容器输入保持打开

-t:让Docker分配一个伪终端

比如:docker create -it docker.io/linuxserver/nginx /bin/bash

查看所有容器的运行状态:docker ps -a

-a:列出系统最近一次启动的容器

启动容器(通过上图红线的ID号启动):docker start ba7a5dc88d29

补充:创建并启动容器:docker run = docker create + docker start

持续在后台运行容器:docker run -d centos /usr/bin/bash -c "while true;do echo hello;done"

停止容器:docker stop ba7a5dc88d29

进入容器(可以理解为进入虚拟机的shell环境):docker exec -it ba7a5dc88d29 /bin/bash

导出容器:docker export 容器ID/容器名称 > 文件名

比如:docker export ba7a5dc88d29 > nginxtar

导入容器:cat 文件名 | docker import - 生成的镜像名:标签

比如:cat nginxtar | docker import - nginx:nginx

删除容器:docker rm ba7a5dc88d29

-f:强制删除一个正在运行的容器

补充:docker出现下面错误

解决方法:

vim /etc/sysctl.conf

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

sysctl -p

补充:Docker资源控制

限制CPU使用速率(CPU的百分比以1000位单位)

CPU使用率限定为20%:docker run --cpu-quota 20000 容器名

也可以修改Cgroup配置文件(通过echo命令导入)

echo 20000 > /sys/fs/cgroup/cpu/docker/容器编号/cpu.cfs_quota_us

多任务按比例分享CPU

比如:有A、B、C三个容器运行,占用比例分配1:1:2

docker run --cpu-shares 1024 容器A

docker run --cpu-shares 1024 容器B

docker run --cpu-shares 2048 容器C

限制CPU内核使用

限制该容器内的进程只会在编号1、2、3、4的CPU上运行(第一个内核用0开始表示)

docker run --cpuset-cpus 0,1,2,3 容器名

对内存使用的限制:docker run -m 512m 容器名

对blkio的限制:docker run --device-write-bps /dev/sda1:1mb 容器名

二、Docker的数据管理

数据卷:数据卷是一个供容器使用的目录,位于容器中,可以在容器之间挂载,可将宿主机的目录挂载到数据卷上,实现数据的迁移

docker run -it -d -v /date1 -v /date2 -p 8888:80 --name my-nginx docker.io/linuxserver/nginx

挂载主机目录作为数据卷

比如:使用httpd:centos镜像创建一个名为web的容器,将宿主机的/var/www/html目录挂载到/date1目录上

docker run -d -v /var/www/html:/date1 --name web httpd:centos

三、Docker网络通信

端口映射

-P:实现随机映射,Docker会把容器自身的80端口随机映射在宿主机的随机端口上

-p:实现指定把容器的哪个端口映射在宿主机的哪个端口上

docker run -d -P httpd:centos

docker run -d -p 8888:80 httpd:centos

容器网络互连

--link name:alias

nme:要连接的容器名称,alias是这个连接的别名

创建源容器:docker run -d -P --name web1 httpd:centos

创建接收容器:docker run -d -P --name web2 --link web1:web1 httpd:centos

测试:(只能接收容器ping通源容器的网络)

四、Docker镜像的创建方法

已有镜像创建

docker commit 【选项】容器ID/名称 仓库名称:标签

-m:显示说明信息

-a:显示作者信息

-p:生成过程中停止容器运行

例:查看到你要创建已有镜像的id,然后执行命令docker commit -m "new" -a "myname" bf249d1747a7 docker:new

下载模板使用模板创建

下载地址为:http://openvz.org/Download/template/precreated

wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz

cat debian-7.0-x86-minimal.tar.gz | docker import - debian:new

Docerfile创建镜像

1.创建工作目录

mkdir apache

cd apache

2.创建编写Dockerfile文件

vim Dockerfile

#基于的基础镜像
FROM centos
#维护该镜像的用户信息
MAINTAINER The CentOS Project<cloud-ops@centos.org>
#编写镜像操作指令安装apache的软件包
RUN yum -y update
RUN yum -y install httpd
#开启80端口
EXPOSE 80
#复制网站首页文件
ADD index.html /var/www/html/index.html
#将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 775 /run.sh
#启动容器时执行脚本
CMD ["/run.sh"]

3.编写执行脚本

vim run.sh

#!/bin/bash
#清理httpd的缓存
rm-rf /run/httpd*
#启动apache服务
exec /usr/sbin/apachectl -D FOREGROUND

4.创建apache的测试网页

vim index.html

<html><h1>this is docker test!!!</h1></html>

5.使用Dockerfile文件生成镜像

-t:指定镜像的标签信息

docker build -t httpd:centos

6.使用新生成的镜像文件运行容器

docker run -d -p 8888:80 httpd:centos

该命令-p选项实现从本地的8888端口到容器中80端口的映射

7.测试访问该主机ip的8888端口访问网页

补充:构建私有仓库

1.在需要构建私有仓库的服务器上下载registry镜像

docker pull registry

2.在/etc/docker/目录下创建json文件

vim /etc/docker/daemon.json

{"insecure-registries":["192.168.0.101:5000"]}

systemctl restart docker

3.使用下载好的registry镜像启动一个容器(默认仓库存放于容器内的/tmp/registry目录下)

docker run -d -p 5000:5000 -v /date/registry:/tmp/registry registry

4.就可以上传镜像

docker tag nginx 192.168.0.101:5000/nginx(修改标签)

docker push 192.168.0.101:5000/nginx

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值