1.1虚拟化
虚拟化:是一种资源管理技术,是将计算机的各种实体资源如服务器,网络,内存及存储等予以抽象转换后呈现出来,打破实体结构间的不可分切割的障碍,使用户可以比原本的组态更好的方式来运用这些资源 。
虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用 ,从而最大化的利用物理硬件,物理资源的充分利用
虚拟化技术种类有很多 例如软件虚拟化、硬件虚拟化 、内存虚拟化、网络虚拟化、桌面虚拟化 、服务虚拟化 、虚拟机等等 。
hypervisor:是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件可以协调问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器,vmm是所有虚拟化技术的核心,当服务器启动并执行hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。常见的产品有VMware,KVM,Ken等等 。
1.2Docker
1.3虚拟机与容器(虚拟机已死,容器才是未来)
2.1docker
docker架构
查看docker状态
hadoop@ubuntu:~/桌面$ systemctl status docker
重启docker
hadoop@ubuntu:~/桌面$ systemctl restart docker
关闭docker
hadoop@ubuntu:~/桌面$ systemctl stop docker
查看docker版本
hadoop@ubuntu:~/桌面$ docker version
查看docker命令
hadoop@ubuntu:~/桌面$ docker --help
列出镜像
root@ubuntu:/home/hadoop/桌面# docker images
拉取镜像
root@ubuntu:/home/hadoop/桌面# docker pull ubuntu:20.04
删除镜像
root@ubuntu:/home/hadoop/桌面# docker rmi ubuntu:20.04
配置镜像加速器
创建容器
root@ubuntu:/home/hadoop/桌面# docker run --help
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
选项 镜像 选项
创建交互式容器:
root@ubuntu:/home/hadoop/桌面# docker run -i -t --name=latest ubuntu /bin/bash
或者
root@ubuntu:/home/hadoop/桌面# docker run -it --name latest ubuntu /bin/bash
-i:交互式容器
-t:tty终端(分配一个终端,操作容器)
--name:指定容器名称
创建守护式容器:
root@ubuntu:/home/hadoop/桌面# docker run -itd --name l2 ubuntu /bin/bash
运行守护式容器
root@ubuntu:/home/hadoop/桌面# docker exec -it l2 /bin/bash
查看正在运行的容器:
root@ubuntu:/home/hadoop/桌面# docker ps
查看运行过的容器:
root@ubuntu:/home/hadoop/桌面# docker ps -a
查看最后一次运行的容器:
root@ubuntu:/home/hadoop/桌面# docker ps -l
停止正在运行的容器:
root@ubuntu:/home/hadoop/桌面# docker stop l2
启动容器:
root@ubuntu:/home/hadoop/桌面# docker start latest
查看容器详细信息:
root@ubuntu:/home/hadoop/桌面# docker inspect latest
查询容器具体id信息:
root@ubuntu:/home/hadoop/桌面# docker inspect -f='{{.NetworkSettings.IPAddress}}' latest
删除容器:
root@ubuntu:/home/hadoop/桌面# docker rm l1
删除全部容器:
root@ubuntu:/home/hadoop/桌面# docker rm `docker ps -a -q`
查看容器日志:
root@ubuntu:/home/hadoop/桌面# docker logs l2
文件拷贝:
将文件拷贝到容器内:
docker 需要拷贝的文件或目录 容器名称:容器目录
root@ubuntu:/home/hadoop/桌面# docker cp 1.txt c1:/root
将文件从容器中拷贝出来:
docker cp 容器名称:容器目录 需要拷贝的文件或目录
root@ubuntu:/home/hadoop/桌面# docker cp c1:/root/2.txt /home/hadoop/桌面
目录挂载:在创建容器时将宿主机的目录与容器内的目录进行映射,这样就可以通过修改宿主机里面的某个目录的文件而去影响容器。
创建容器 添加-v参数 宿主机目录:容器目录
root@ubuntu:/opt# docker run -it --name c2 -v /opt:/usr/local/myhtml ubuntu /bin/bash
docker镜像制作
①使用docker commit命令:提交一个正在进行的容器作为新镜像
端口映射:
②使用docker builder和dockerfile文件
dockerfile使用基本的基于DSL语法的指令来构建一个docker镜像,之后使用docker builder命令基于该dockerfile中的指令构建一个新的镜像
FROM ubuntu:20.04
MAINTAINER "hanmengyuan<my0214163@163.com>"
RUN echo 'rw_test' > /root/rw_test
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai
LABEL Description="This image is used to start the foobar executable" Vendor="ACME Products" Version="1.0"
RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server
EXPOSE 80
CMD /usr/sbin/sshd -D
在rw_test目录下构建镜像
root@ubuntu:~/rw_test# docker build -t rw_nginx --rm=true .
测试
root@ubuntu:~/rw_test# docker run -itd --name test_nginx -p 8899:80 rw_nginx /bin/bash
docker hub
登录docker hub
root@ubuntu:~/rw_test# docker login
设置镜像标签
root@ubuntu:~/rw_test# docker tag hello-world:latest my0214163/test-hello-world:v1
推送镜像
root@ubuntu:~/rw_test# docker push my0214163/test-hello-world:v1
退出docker hub
root@ubuntu:~/rw_test# docker logout
docker网络管理
查看网络:
root@ubuntu:~/rw_test# docker network ls
查看信息
root@ubuntu:~/rw_test# docker inspect test_nginx
查看网络使用情况
root@ubuntu:~/rw_test# docker network inspect bridge
查看网络:
建立两个使用默认bridge网络的容器
root@ubuntu:~/rw_test# docker run -itd --name=a1 busybox
root@ubuntu:~/rw_test# docker run -itd --name=a2 busybox
建立一个使用自定义isolated_nw网络的容器
root@ubuntu:~/rw_test# docker network create --driver bridge isolated_nw
root@ubuntu:~/rw_test# docker run --network=isolated_nw -itd --name=a3 busybox
为a2添加一个自定义网络isolated_nw的容器
root@ubuntu:~/rw_test# docker network connect isolated_nw a2
查看各个容器的ip地址
root@ubuntu:~/rw_test# docker inspect a1
root@ubuntu:~/rw_test# docker inspect a2
root@ubuntu:~/rw_test# docker inspect a3
或
root@ubuntu:~/rw_test# docker network inspect bridge
root@ubuntu:~/rw_test# docker network inspect isolated_nw
查看是否可以链接
root@ubuntu:~/rw_test# docker attach a1
/ # ping -w 4 172.17.0.3
/ # ping -w 4 172.17.0.4
/ # ping -w 4 172.18.0.3
/ # ping -w 4 172.18.0.2
root@ubuntu:~/rw_test# docker attach a2(同上)
root@ubuntu:~/rw_test# docker attach a3(同上)
a1:172.17.0.3[bridge]
a2:172.17.0.4和172.18.0.3[bridge和isolated_nw]
a3:172.18.0.2[isolated_nw]