【一】Docker是什么
-
Docker是一个开源项目,旨在实现轻量级的操作系统虚拟化解决方案。
-
它最初是由dotCloud公司内部的一个业余项目开始的,并且后来成为了Docker Inc.公司的主要产品。
-
该项目在2013年开源,并加入了Linux基金会,按照Apache 2.0协议进行维护。
-
Docker基于Go语言实现,构建在Linux容器(LXC)等技术的基础之上。
-
它提供了一种简单高效的方式来创建、打包和分发应用程序和服务,使得应用程序能够以容器的形式运行,而不需要关心底层操作系统的细节。
-
相比传统的虚拟机技术,Docker具有更轻量级、更快速、更易用的特点。
Docker 项目的目标是实现【轻量级的操作系统虚拟化解决方案】。
Docker 的基础是 Linux 容器(LXC)等技术。
在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。
用户操作 Docker 的【容器就像操作一个快速轻量级的虚拟机】一样简单。
【二】容器和虚拟化比较
Docker的优势在于:
- 轻量级:相比传统的虚拟机技术,Docker的容器更加轻量级,启动速度更快,资源占用更少。
- 灵活性:Docker的容器可以在任何支持Docker的环境中运行,无论是开发机、测试机还是生产服务器,保证了应用程序在不同环境中的一致性。
- 可移植性:Docker的容器可以在不同主机之间快速迁移和部署,提高了应用程序的可移植性。
- 高效性:Docker通过共享宿主机的操作系统内核,避免了虚拟机的性能开销,提高了应用程序的运行效率。
- 生态系统:Docker拥有庞大的生态系统,用户可以在Docker Hub上获取各种类型的镜像,并可以搭建私有的仓库来管理自己构建的镜像。
- docker 不需要虚拟化出操作系统这一层,它使用的就是宿主机的操作系统资源
【三】Docker概念
- Docker的核心概念包括镜像(Image)、容器(Container)、仓库(Repository)和服务(Service)
【1】cs架构
- Docker是一个客户端-服务器(C/S)架构程序。
- Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。
- Docker提供了一个命令行工具Docker以及一整套RESTful API。
- 你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。
mysql://地址+端口
redis://地址+端口
http://地址+端口
- dockerc和s要通信 没有自定义协议,使用的http协议,符合resful规范
【2】核心概念
(1)镜像(Image):
- 镜像是Docker的打包格式,包含了运行应用程序所需的所有文件、依赖和配置信息。
- Docker通过使用Dockerfile来定义镜像的构建规则。Dockerfile是一个文本文件,其中包含了一系列指令来描述如何构建镜像。
- 用户可以使用Docker命令根据Dockerfile构建镜像,例如:
# Dockerfile内容 FROM ubuntu:latest RUN apt-get update && apt-get install -y nginx COPY myapp /var/www/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] # 构建镜像 $ docker build -t myapp-image .
(2)容器(Container):
- 容器是镜像的一个运行实例,可以被启动、停止、删除和暂停。
- 每个容器都是相互隔离的,使用宿主机的操作系统内核。
- Docker允许用户在容器中运行应用程序,并为每个应用程序提供独立的运行环境。
- 用户可以使用Docker命令来管理容器的生命周期,例如:
# 运行容器 $ docker run -d --name myapp-container myapp-image # 停止容器 $ docker stop myapp-container # 删除容器 $ docker rm myapp-container
(3)仓库(Repository):
- 仓库用于存储和分享镜像。
- Docker Hub是一个公共的仓库,用户可以从中获取各种类型的镜像,并将自己构建的镜像发布到该仓库中。
- 用户也可以搭建私有的仓库来存储自己的镜像。
- 用户可以使用Docker命令来拉取、推送和搜索镜像,例如:
# 拉取镜像 $ docker pull ubuntu:latest # 推送镜像到Docker Hub $ docker tag myapp-image username/myapp-image $ docker push username/myapp-image # 从Docker Hub搜索镜像 $ docker search nginx
(4)服务(Service):
- 服务是Docker Swarm集群中的一个特性,它允许用户将多个容器组织成一个无缝协作的分布式应用。
- 通过服务,用户可以定义想要运行的容器数量、容器之间的网络关系和负载均衡等配置。
- 服务的创建需要先初始化Docker Swarm集群并加入节点,然后使用Docker命令创建和管理服务,例如:
# 初始化Docker Swarm集群 $ docker swarm init # 加入节点到Docker Swarm集群 $ docker swarm join --token <token> <manager-ip> # 创建服务 $ docker service create \ --name myapp-service \ --replicas 3 \ --publish published=8080,target=80 \ myapp-image # 管理服务 $ docker service ls $ docker service scale myapp-service=5 $ docker service update --image new-image myapp-service