官网的镜像:https://hub.docker.com/
1.docker简介:
1.1.1Docker 是什么:
首选Docker是一个在2013年开源得引用程序并且是一个基于go语言编写时一个开源得PAAS服务(Platform as a Service ,即平台服务的缩写),go与语言是由google开发,docker公司最早交dotclund后由于Docker开源后大受欢迎就将公司改名为Docker inc ,总部位于美国加州的旧金山,Docker 是基于linux内核实现, Docker最早采用LXC 技术(LinuX Container 的简写,LXC 是 Linux 原生支持的容器技术,可以提供轻量级的虚拟化,可以说docker就是基于 LXC 发展起来的(0.1.5 (2013-04-17),提供 LXC 的高级封装,发展标准的配置方法),而虚拟化技术KVM(Kernel-based Virtual Machine基于模块实现, Docker后改为自己研发并开源的runc技术运行容器(1.11.0(2016-04-13)Docker now relies on containerd and runc to spawn containersDocker相比虚拟机的交付速度更快,资源消耗更低, Docker采用客户端/服务端架构、使用远程API来管理和创建Docker容器,其可以轻松的创建一个
Docker相比虚拟机的交付速度更快,资源消耗更低,Docker 采用客户端/服务端架构,使用远程API来管理和创建 Docker容器,其可以轻松的创建一个轻量级的、可移植的、自给自足的容器,docker的三大理念是build(构建)、ship(运输)、run(运行),Docker 遵从apache 2.0 协议,并通过(namespace及 cgroup 等)来提供容器的资源隔离与安全保障等,所以 Docke 容器在运行时不需要类似虚拟机(空运行的虚拟机占用物理机的一定性能开销)的额外资源开销,因此可以大幅提高资源利用率,总而言之 Docker 是一种用了新颖方式实现的轻量级虚拟机.类似于VM但是在原理和应用上和VM的差别还是很大的,
1.1.2: Docker的组成:
https://docs.docker.com/engine/docker-overview/Docker
主机(Host):一个物理机或虚拟机,用于运行Docker服务进程和容器。
Docker 服务端(Server):Docker 守护进程,运行 docker 容器。
Docker 客户端(Client):客户端使用 docker 命令或其他工具调用 dockerAPI
Docker仓库(Registry):保存镜像的仓库,类似于git 或svn这样的版本控
Docker镜像(Images):镜像可以理解为创建实例使用的模板。
Docker 容器(Container):容器是从镜像生成对外提供服务的一个或一组服务。统,
官方仓库: https://hub.docker.com/
1.1.3: Docker 对比虚拟机:
资源利用率更高:一台物理机可以运行数百个容器,但是一般只能运行数十个虚拟机。
开销更小:不需要启动单独的虚拟机占用硬件资源。
启动速度更快:可以在数秒内完成启动。
使用虚拟机是为了更好的实现服务运行环境隔离,每个虚拟机都有独立的内核,虚拟化可以实现不同操作系统的虚拟机,但是通常一个虚拟机只运行一个服务,很明显资源利用率比较低且造成不必要的性能损耗,我们创建虚拟机的目的是为了运行应用程序,比如Nginx、 PHP, Tomcat等web程序,使用虚拟机无疑带来了一些不必要的资源开销,但是容器技术则基于减少中间运行环节带来较大的性能提升。
宿主机上运行多个容器带来的问题:
但是,如上图一个宿主机运行了 N 个容器,多个容器带来的以下问题怎么解决:
1.怎么样保证每个容器都有不同的文件系统并且能互不影响?
2.一个docker主进程内的各个容器都是其子进程,那么实现同一个主进程下不同类型的子进程?各个进程间通信能相互访问(内存数据)吗?
3.每个容器怎么解决IP及端口分配的问题?
4.多个容器的主机名能一样吗?
5,每个容器都要不要有root用户?怎么解决账户重名问题?
1.1.4: Linux Namespace 技术:
namespace是 Linux系统的底层概念,在内核层实现,即有一些不同类型的命名空间被部署在核内,各个 docker 容器运行在同一个 docker 主进程并且共用同一个宿主机系统内核,各 docker容器运行在宿主机的用户空间,每个容器都要有类似于虚拟机一样的相互隔离的运行空间,但是容器技术是在一个进程内实现运行指定服务的运行环境,并且还可以保护宿主机内核不受其他进程的干扰和影响,如文件系统空间、网络空间、进程空间等,目前主要通过以下技术实现容器运行空间的相互隔离:
1.1.8.3:容器定义工具:
容器定义工具允许用户定义容器的属性和内容,以方便容器能够被保存、共享和重建。
Docker image:是 docker容器的模板, runtime 依据 docker image 创建容器。
IDockerfile:包含N个命令的文本文件,通过dockerfile创建出docker image。
ACI(App container image):与docker image类似,是CoreOS开发的rkt容器的镜像格式。
1.1.4.5: Net Namespace:
每一个容器都类似于虚拟机一样有自己的网卡、监听端口、TCP/IP协议栈等,Docker使用 network namespace启动一个 vethX 接口,这样你的容器将拥有它自己的桥接 ip 地址,通常是 dockerO,而 docker0 实质就是 Linux 的虚拟网桥,网桥是在 OSI 七层模型的数据链路层的网络设备,通过 mac 地址对网络进行划分,并且在不同网络直接传递数据。
1.1.4.5.1:查看宿主机的网卡信息:
虚拟机要和宿主机同一网段,就需要做桥接。
1.1.8.4: Registry:
统一保存镜像而且是多个不同镜像版本的地方,叫做镜像仓库。
Image registry: docker 官方提供的私有仓库部署工具。
Docker hub: docker官方的公共仓库,已经保存了大量的常用镜像,可以方AA便大家直接使用。
BIy·A·=·iHarbor: vmware提供的自带 web界面自带认证功能的镜像仓库,目前有很多公司使用。
1.1.8.5: 编排工具:
当多个容器在多个主机运行的时候,单独管理容器是相当复杂而且很容易出错,而且也无法实现某一台主机宕机后容器自动迁移到其他主机从而实现高可用的目的,也无法实现动态伸缩的功能,因此需要有一种工具可以实现统一管理、动态伸缩、故障自愈、批量执行等功能,这就是容器编排引擎。容器编排通常包括容器管理、调度、集群定义和服务发现等功能。Docker swarm: docker 开发的容器编排引擎.Kubenetes: google领导开发的容器编排引擎,内部项目为Borg,且其同时支持 docker 和 CoreOSMesos+Marathon:通用的集群组员调度平台,mesos(资源分配)与marathon(容器编排平台)一起提供容器编排引擎功能。
1.1.9: docker(容器)的依赖技术:
1.1.9.1: 容器网络:
Calibri (正文)·古docker 自带的网络 docker network 仅支持管理机运行的时候需要使用第三方开源网络,例如 calico、flannel 等。
1.1.9.2: 服务发现:
容器的动态扩容特性决定了容器IP也会随之变化,因此需要有一种机制可以自动识别并将用户请求动态转发到新创建的容器上,kubernetes 自带服务发现功能,需要结合 kube-dns 服务解析内部域名。
1.1.9.3: 容器监控:
可以通过原生命令docker ps/top/stats查看容器运行状态,另外也可以使heapster/ Prometheus等第三方监控工具监控容器的运行状态。
1.1.9.4: 数据管理:
容器的动态迁移会导致其在不同的Host 之间迁移,因此如何保证与容器相关的数据也能随之迁移或随时访问,可以使用逻辑卷/存储挂载等方式解决。
1.1.9: docker(容器)的依赖技术:
1.1.9.1: 容器网络:
Calibri (正文)·古docker 自带的网络 docker network 仅支持管理机运行的时候需要使用第三方开源网络,例如 calico、flannel 等。
1.1.9.2: 服务发现:
容器的动态扩容特性决定了容器IP也会随之变化,因此需要有一种机制可以自动识别并将用户请求动态转发到新创建的容器上,kubernetes 自带服务发现功能,需要结合 kube-dns 服务解析内部域名。
1.1.9.3: 容器监控:
可以通过原生命令docker ps/top/stats查看容器运行状态,另外也可以使heapster/ Prometheus等第三方监控工具监控容器的运行状态。
1.1.9.4: 数据管理:
容器的动态迁移会导致其在不同的Host 之间迁移,因此如何保证与容器相关的数据也能随之迁移或随时访问,可以使用逻辑卷/存储挂载等方式解决。
1.1.9.5: 日志收集:
docker 原生的日志查看工具 docker logs,但是容器内部的日志需要通过ELK等专门的日志收集分析和展示工具进行处理。
1.2: Docker安装及基础命令介绍:
官方网址:https://www.docker.com/4521
系统版本选择:Docker目前已经支持多种操作系统的安装运行,比如Ubuntu、Centos、Redhat、 Debian、Fedora,甚至是还支持了 Mac 和 Windows,在 linux 系统上需要内核版本在3.10或以上, docker版本号之前一直是0.X版本或1.X版本,但是从2017年3月1号开始改为每个季度发布一次稳版,其版本号规
docker安装及其命令的介绍:
1.2.1: 下载 rpm 包安装:
官方rpm 包下载地址:
Index of linux/centos/7/x86_64/stable/Packages/
二进制下载地址:
docker-ce-linux-static-stable-x86_64安装包下载_开源镜像站-阿里云
阿里镜像下载地址:
docker-ce-linux-centos-7-x86_64-stable-Packages安装包下载_开源镜像站-阿里云
1.yum安装docker:
1.在清华镜像:
查看docker的版本:
yum list docker-ce
查看docker的详情信息:
2.二进制安装docker:
二进制安装需要配置的三个文件containerd、docker.service 、docker.socket
1.2.7:解决不支持swap 限制警告:
root@docker-server1:~# vim /etc/default/grub
GRUB_DEFAULT=0GRUB_TIMEOUT_STYLE=hidden
GRUB TIMEOUT=2
GRUB_DISTRIBUTOR=`Isb_release-i-s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0
cgroup_enable="memory swapaccount=1"
# update-grub
# reboot
1.2.8: docker 存储引擎:
目前 docker 的默认存储引擎为 overlay2,不同的存储引擎需要相应的系统支持,如需要磁盘分区的时候传递d-type文件分层功能,即需要传递内核参数开启格式化磁盘的时候的指定功能。
历史更新信息:https://github.com/moby/moby/blob/master/CHANGELOG.md
官方文档关于存储引擎的选择文档:Docker storage drivers | Docker Docs
存储驱动类型;
镜像的导入导出:
镜像的到导入:
镜像导出:
可以将镜像从本地导出问为一个压缩文件,然后复制到其他服务器进行导入使用。
#导出方法 1:
[root@docker-server1 ~]# docker save centos -o /opt/centos.tar.gz
[root@docker-server1 ~]# I /opt/centos.tar.gz1 root root 205225472 Nov 103:52 /opt/centos.tar.gz
#导出方法2:
[root@docker-serverl ~]# docker save centos > /opt/centos-1.tar.gz
[root@docker-serverl ~]# 1l /opt/centos-1.tar.gz-rW-r--r--1 root root 205225472 Nov 1 03:52 /opt/centos-1.tar.gz
删除容器的命令:
删除镜像:
命令的总结:
容器操作的基础命令:
从镜像启动到容器:
docker infoc信息:
容器的删除:
强制删除一个正在运行的容器,只需要加f
容器的端口的映射:
容器的启动与关闭:
进入正在运行的容器:
使用attach命令:
查看某个docker的容器的日志:
docker logs --tail 100 3c0cb4c6842e
.查看有几个容器的id命令:
一个id说明只有一个容器(管理容器的标识,可以只打前面的几位数,即可。)
或者登录进去容器查看。hostname有可查看。
3.进去容器里面查看镜像的系统是:
cat /etc/issue
基本都是Debian系统:
4.进去容器里面安装需要的命令:
apt update apt install procps(top命令) apt install iputils-ping(ping命令) apt install net-tools(网络工具)
5.docker.hub的镜像仓库:
作用:用官方的仓库实现镜像的分发:(切记将公司的代码传上去,程序扫描会暴露ip地址,密码等,导致)
leader private:私有仓库,无论上传镜像还是下载镜像,都需要提前登录之后才能上传或者下载 public:公有仓库,如果要上传需要登录成功后才能上传,如果仅仅是下载镜像就不需要登录即可下载(在dockerd的service文件添加--insecure-registry 172.31.102)
5.1将镜像传上去docker.hub官方的镜像仓库上:(这里用nginx镜像测试)
5.1.1:地址:hub.docker.com #官方镜像仓库
账号及其密码: 账号:xxxxxx@qq.com 密码:xxxxxxxxxx
5.1.2登录上去创建仓库:nginx镜像仓库
5.1.3:linux下登录账号:
linux下登录账号: #docker login ##docker login 命令用于登陆到一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub。
Username (songkangcheng): songkangcheng
Password:xxxxxxxxx
Login Succeeded
5.1.4:将镜像传上去docker.hub官方的镜像仓库上:
(公司的代码,不建议传上去,泄露)
docker images 查看本地的镜像有
[root@VM-4-13-centos data]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 904b8cb13b93 3 weeks ago 142MB hub.docker.com/songkangcheng/ceshidata latest 904b8cb13b93 3 weeks ago 142MB 先打标签,打标签的名字需和创建的镜像仓库一样。 docker tag hub.docker.com/songkangcheng/ceshidata hub.docker.com/songkangcheng/nginx:1.6
[root@VM-4-13-centos ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/nginx latest 904b8cb13b93 11 days ago 142 MB hub.docker.com/songkangcheng/ceshidata latest 904b8cb13b93 11 days ago 142 MB hub.docker.com/songkangcheng/nginx 1.6 904b8cb13b93 3 weeks ago 142MB
[root@VM-4-13-centos data]# docker push hub.docker.com/songkangcheng/nginx:1.6 ## The push refers to repository [hub.docker.com/songkangcheng/nginx] 101af4ba983b: Preparing d8466e142d87: Preparing 83ba6d8ffb8c: Preparing e161c82b34d2: Preparing 4dc5cd799a08: Preparing 650abce4b096: Waiting ####hub.docker.com/songkangcheng/ceshidata这个名字一定要跟你创建的仓库名字一样。镜像太大也会传不上去的(传到最后输出一大串)。 ###最后上网页仓库上面检查,是否生成目录,生成即创建成功。
上传成功的效果图:
六:docker仓库之分布式Harbor
(搭建公司的私有registry镜像仓库)
配置:
cpu:8C以上 内存:16G以上 磁盘:raid 10 4块 或者raid5 3块 越大越好 网卡:1000兆 虚拟机:
Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器,由vmware开源,其通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中,确保数据和知识产权在公司内部网络中管控,另外, Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
vmware 官方开源服务列表地址:https://vmware.github.io/harbor/cn/,
harbor 官方 github 地址:https://github.com/vmware/harborharbor
官方网址:Harbor
可以通过官网 文档查看安装需要的条件以及配置和开放的端口:
视频观看到16分钟:
registry: #官方私有仓库:https://github.com/
harbor :带图形管理私有仓库项目:https://github.com/goharbor/harbor
D Namespace
ADD:
#用于添加宿主机本地的文件,目录,压缩等资源到镜像里面去,会自动解压tar.gz格式的压缩包,不会自动解压zip
COPY:
#用于添加宿主机本地的文件,目录,压缩等资源到镜像里面去,不会解压任何压缩包。
LABEL:#设置镜像的属性标签(镜像的作者信息)
ENV: #设置容器的环境变量
USER nginx #制定运行操作的用户
RUN yum install vim unzip -y && cd /etc/nginx
#执行shell命令,但是一定要以非交互式的方式执行
VOLUME #定义volume
WORKDIR #用于定义工作目录
EXPOSE 80 #生命要把容器的某些端口映射到宿主机。
CMD #镜像启动为一个容器时候默认命令或者脚本,CMD["/bin/bash"]
ENTRYPOINT