docker容器
Docker便用G00g1e公司推出WG0语言进行开友实现,基于操作条统内孩中时Cgroup(贷源控制)NameSpace(资源隔离)与0verlayFS(数据存储)等技术,实现基于操作系统层面的(应用)虚拟化技术,
最初实现是基于LXC技术,从0.7版本以后开始去除LXC,转而使用自行开发的libcontainer(容器管理技术)。
容器技术发展架构图:
1 2 3 4 5 6 7 8 9 10 11 为什么有云平台:因为方便快捷,还便宜 购买物理机,不仅还要买服务器,还要租机房 VMware Workstation:虚拟化工具,启动虚拟机的,使用的编排工具是的:Vcenter server KVM:虚拟化工具,启动虚拟机的 使用的编排工具是的:OpenStack Docker:容器化工具,容器运行时 使用的编排工具是的:(docker自己写的编排工具)Docker-swarm、mesos、kubernetes(最灵活的,常用的) K8s,谷歌的产品 编排工具的作用:使部署虚拟化的产品变成一个集群 下载一个工具 tightVNC ,就可以连接虚拟机里面创建的虚拟机了
容器与虚拟机对比
传统虚拟化和docker分层对比
容器化产品概念
1 2 3 4 5 Namespace:名称空间,命名空间(作用是:资源隔离)起一个容器就是起一个进程,然后再做资源隔离 Cgroup:资源控制、资源计算 docker是调用内核接口的工具
VM虚拟化和Docker特性对比
特性
Docker
VM
启动速度
秒级
分钟级
硬盘使用
一般为MB
一般为GB
性能
接近原生单机支持上千个容器
弱于原生
系统支持量
单机支持上千个容器
一般几十个
隔离性
安全隔离
完全隔离
容器化产品的概念
1 2 3 4 5 6 7 8 9 10 11 12 13 14 - docker - CRI-O - containerd Namespace:名称空间,命名空间(资源隔离)https://man7.org/linux/man-pages/man7/namespaces.7.html Cgroup:资源控制、资源计算 https://man7.org/linux/man-pages/man7/cgroups.7.html 资源限制:例如设定任务指定内存 优先级分配:比如跟任务分配的CPU时间,片数,磁盘IO,带宽大小来控制任务的优先级 资源统计:统计CPU,内存,IO等资源使用时长,该功能比较适合用于计费 任务控制:cgroup可以对任务进行 运行,挂起,恢复等操作
1、Docker的三个概念
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Docker镜像可以看做是一个特殊的文件系统,除了提供容器运行时所需要的程序、库、资源、配置文件以外,还包合了一些为运行时,准备的配置参数(匿名卷,环境变量,用户...),镜像是不可更改的 Docker容器的储存方式:通过overlayFS文件系统进行储存 upper lower merge 为了环境的统一,方便统一管理 容器的定义和镜像,几乎是一模一样,唯一区别在于容器的最上面那一层是可读可写的。 (类似于用Docker1起的一台虚拟机) 理解:一个容器就是一台虚拟机 上传镜像,存放镜像 仓库是Docker用来存放镜像的地方,类似于我们之前常用的代码仓库。 通常一个仓库会包含,同一个软件,不同版本的镜像 我们可以通过<仓库名>:<标签>格式来指定具体使用哪个版本的镜像,如果不给标签,那么默认以Latest作为默认标签 1、Harbor 图形化仓库 2、Registry 命令行仓库
2、Docker的组成
Docker是C/S结构的服务 docker client
和 docker server
Docker客户端是Docker用户与Docker交互的主要方式
当使用Docker命令行运行命令时,Docker客户端将这些命令发送给服务端,服务端执行这些命令Docker命令使用DockerAPI
Docker客户端可以与多个服务端进行通讯
1 2 3 4 5 6 7 8 9 10 11 12 13 14 Docker的客户端: - 命令行 docker - 图形化 dashboard(UI界面) 用户———>使用docker客户端———>调用DOcker的接口———>连接到DOcker server——>调用内核Namespace、cgroup docker 19.3 k8 1.19 为什么 下了一个nginx容器,想让他变成web服务器
3、部署DOcker
1、安装docker-ce
环境准备
主机名
ip
角色
docker01
10.0.0.101 / 172.16.1.101
docker02
10.0.0.102 / 172.16.1.102
docker03
10.0.0.103 / 172.16.1.103
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1、卸载之前安装的DOcker yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine 2、换源 [root@docker01 ~]# vim /etc/yum.repos.d/docker-ce.repo [docker-ce-stable] name=Docker CE Stable - $basearch baseurl=https://download.docker.com/linux/centos/$releasever /$basearch /stable enabled=1 gpgcheck=1 gpgkey=https://download.docker.com/linux/centos/gpg [root@docker01 ~]# sed -i 's+download.docker.com+mirrors.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo 3、下载docker [root@docker01 ~]# yum install -y docker-ce docker-ce-cli containerd.io
如果下载的慢,把base源里面的updat关闭
[root@docker03 ~]# vim /etc/yum.repos.d/CentOS-Base.repo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 4、启动 [root@docker01 ~]# systemctl start docker [root@docker01 ~]# systemctl enable docker 5、查看docker信息 [root@docker01 ~]# docker info Docker Root Dir: /var/lib/docker 6、启动docker就会生成一个socket文件 [root@docker01 ~]# ll /var/run/docker.sock srw-rw---- 1 root docker 0 Sep 2 12:17 /var/run/docker.sock 7、加速镜像 [root@docker01 ~]# mkdir -p /etc/docker [root@docker01 ~]# tee /etc/docker/daemon.json <<-'EOF' { "dns" : ["8.8.8.8" , "8.8.4.4" ], "registry-mirrors" : [ "https://docker.m.daocloud.io" , "https://dockerproxy.com" , "https://docker.mirrors.ustc.edu.cn" , "https://docker.nju.edu.cn" , "https://registry.docker-cn.com" , "https://docker.mirrors.ustc.edu.cn" , "https://hub-mirror.c.163.com" , "https://mirror.baidubce.com" ] } EOF 备用加速: { "registry-mirrors" :["https://docker.1panel.live" , "https://hub.rat.dev/" , "https://docker.chenby.cn" , "https://docker.m.daocloud.io" ] } [root@docker01 ~]# systemctl daemon-reload [root@docker01 ~]# systemctl restart docker 8、测试拉取nginx镜像 [root@docker02 ~]# docker pull nginx 等待2分钟才拉取的下来 [root@docker01 ~]# docker pull nginx:alpine (最小的操作系统alpine) [root@docker01 ~]# docker pull nginx:latest [root@docker01 ~]# docker pull busybox 9、查看拉取的镜像 [root@docker01 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx alpine 0f0eda053dc5 2 weeks ago 43.3MB nginx latest 5ef79149e0ec 2 weeks ago 188MB busybox latest 87ff76f62d36 15 months ago 4.26MB centos 7 eeb6ee3f44bd 2 years ago 204MB