用自己的电脑做网站,wordpress侧边栏加图片,wordpress博客无显示,网站备案政策文章目录 Docker简介Docker和虚拟机的联系和区别基本原理和概念镜像容器仓库 Docker安装配置容器化和Dockerfile实践环节Docker Compose Docker简介
Docker是一个用于构建build、运行run、传送share应用程序的平台#xff0c;可以把应用程序打包成一个个的集装箱#xff0c;… 文章目录 Docker简介Docker和虚拟机的联系和区别基本原理和概念镜像容器仓库 Docker安装配置容器化和Dockerfile实践环节Docker Compose Docker简介
Docker是一个用于构建build、运行run、传送share应用程序的平台可以把应用程序打包成一个个的集装箱然后小鲸鱼就可以把它们运送到任何所需要的地方。Docker 是利用 Linux 内核的 Namespace Cgroups 实现进程级隔离和资源限制提供轻量级、快速可移植的容器技术是现代云原生架构的基石之一。Docker 是一个开源的容器化平台可以把应用程序和它的依赖打包在一个轻量级、可移植、自包含的容器中保证跨环境一致运行。一句话“一次构建到处运行”。Docker 解决了什么问题在传统部署中常常遇到 依赖冲突不同应用需要不同版本的库部署在同一机器容易打架。环境不一致开发、测试、生产环境配置不一致导致“在我机器上能跑”。复杂部署流程要手动配置各种环境效率低、容易出错。 Docker 通过容器机制解决这些问题 应用 环境打包成镜像 → 一次构建任意运行镜像不可变版本可控回滚方便容器轻量、秒级启动、资源隔离 以一个前后端分离的网站如果没有docker那么我们要在本地先安装以下内容才可以运行 安装前端Node.js环境安装各种npm依赖安装Java运行时环境安装SpringBoot微服务的各种第三方依赖包安装MySQL数据库安装配置Redis缓存安装配置Nginx负载均衡配置各种环境变量并启动脚本 而且这还只是开发环境如果是要在测试环境也配一边就要再来一次耗时耗力而且容易出错。 但是有了Docker我们就可以把他们打包成一个一个的集装箱只要在开发环境中运行成功了那么在测试环境中运行也是没有问题的。 核心概念 # Docker常用命令# 查看本地镜像
docker images# 拉取镜像
docker pull nginx# 启动容器
docker run -d -p 8080:80 nginx# 查看运行中的容器
docker ps# 停止容器
docker stop container_id# 进入容器
docker exec -it container_id /bin/bashDocker和虚拟机的联系和区别
联系 目的相同容器和虚拟机都是用来实现隔离让应用运行在相互隔离的环境中 避免依赖冲突保证环境一致性提高资源利用率 都支持跨平台部署容器镜像、虚拟机镜像都能实现 “一次打包到处运行”。都能通过编排工具管理如 K8s 支持容器VM 支持 OpenStack、vSphere 等 Docker 容器 ≠ 虚拟机不需要 Hypervisor虚拟化技术将物理资源虚拟为多个逻辑资源的技术不是完全模拟一个硬件环境Docker 容器 基于宿主机 Linux 内核的隔离进程启动快资源开销小虚拟机一定程度上实现了资源的整合可以将一台服务器的计算能力、存储能力、网络资源分配给多个逻辑服务器实现多台服务器的功能 但是每台虚拟机都需要占用大量的资源如CPU、内存、硬盘、网络等而且启动速度很慢最主要的是大部份情况下我们一台服务器上只需要运行一个主要对外提供服务的应用程序就行了并不需要用到一个完整的操作系统所提供的所有功能如下图所示 上面的例子来说其实我们所需要的只是一个web服务器但是虚拟机却要启动一个完整的操作系统包括操作系统内核各种系统服务各种工具甚至图形界面等等这些我们并不需要的服务会占用大量的资源导致了资源的浪费和启动速度慢的问题于是容器技术应运而生但是要注意Docker并不是容器Docker只是容器的一种实现是一个容器化的解决方案和平台而容器是一种虚拟化技术和虚拟机类似也是一个独立的环境可以在这个环境中运行应用程序但是和虚拟机不同的是它并不需要运行一个完整的操作系统而是使用宿主机的操作系统所以启动速度非常快通常只需要几秒钟同时因为所需要的资源更少所以可以在一台物理服务器上运行更多的容器这样就可以更加充分地利用服务器的资源减少资源的闲置和浪费。 # 虚拟机架构硬件
│
└── Hypervisor (KVM / VMware / Hyper-V)│├── Guest OS (Linux / Windows)│ └── App A├── Guest OS (Linux / Windows)│ └── App B# 容器架构硬件
│
└── 宿主机 OS (Linux内核)│└── Docker Engine / containerd├── Container A (App libs)├── Container B (App libs)
容器不需要 Guest OS进程直接运行在宿主机内核之上。虚拟机需要完整 Guest OS有更高隔离但更重。容器和虚拟机的主要联系是都实现了应用隔离方便跨平台部署。区别在于虚拟机是通过 Hypervisor 提供系统级虚拟化每个VM都有完整的操作系统启动慢、资源占用大隔离性强而容器是基于宿主机内核通过 Linux 的 Namespace 和 Cgroups 技术提供进程级隔离启动快、资源占用小非常适合微服务和大规模部署。容器与虚拟机是互补关系通常混合使用比如在公有云上用VM作为物理隔离基础容器作为上层弹性计算单位。虚拟机提供系统级隔离容器提供进程级隔离VM 启动慢资源重隔离强容器启动快资源轻灵活高效两者可以结合使用满足不同场景需求。
基本原理和概念
Docker 镜像是应用程序和依赖的静态打包模板容器是镜像运行时的隔离进程仓库用于存储和分发镜像。三者配合实现了应用的一键打包、快速部署和跨环境一致运行是现代 DevOps 流水线的核心组件。
Dockerfile → docker build → 镜像 (Image) → docker push → 仓库 (Registry)↓docker run↓容器 (Container)镜像
镜像是一个只读的模版可以用来创建容器。镜像和容器的关系就好比Java中类和实例的关系一样我们可以定义一个类中有哪些属性和方法这个定义好的类就是模版然后我们可以根据这个模版来创建多个实例这些实例就是这个类的对象对应到Docker中镜像就是一个模版容器就是这个模版的一个实例可以有一个也可以有多个。镜像是一个静态的模板包含了应用程序和所有依赖、库、工具、配置等。容器运行时会在镜像上加一个可写层Writable Layer可以理解成容器的快照容器运行时是基于镜像启动出来的。特点 分层结构每一层是只读的可复用相同基础层不会重复存储版本可控便于回滚和管理
docker images # 查看本地镜像
docker pull nginx # 拉取远程镜像
docker build -t myapp:v1 . # 构建镜像
docker rmi image_id # 删除镜像容器
容器是Docker的运行实例提供了一个独立的可移植的环境。镜像和容器的关系就好比Java中类和实例的关系一样我们可以定义一个类中有哪些属性和方法这个定义好的类就是模版然后我们可以根据这个模版来创建多个实例这些实例就是这个类的对象对应到Docker中镜像就是一个模版容器就是这个模版的一个实例可以有一个也可以有多个。容器是镜像的运行时实例本质上是一个受限隔离的进程它运行在宿主机内核之上。容器 运行中受限隔离的进程 分层文件系统。特点 容器之间互相隔离与宿主机隔离轻量共享宿主机内核不像 VM 需要 Guest OS可以随时创建 / 启动 / 停止 / 删除容器是临时的可以随时销毁也可以通过数据卷持久化数据
docker run -d -p 8080:80 nginx # 启动容器
docker ps # 查看运行中的容器
docker stop container_id # 停止容器
docker rm container_id # 删除容器
docker exec -it container_id /bin/bash # 进入容器仓库
镜像如何分享给别人呢这就涉及到Docker仓库的概念了。Docker仓库是用来存储Docker镜像的地方最流行和最常用的仓库就是DockerHub这是一个公共的Docker仓库用来集中存储和管理Docker镜像可以在这里下载各种镜像也可以将镜像上传到仓库实现镜像的共享和复用。仓库Registry是用来存放和分发镜像的服务器。1、公共仓库Public如 Docker Hub。2、私有仓库Private企业内部自建 Registry保障镜像安全、加快拉取速度。仓库Registry里可以有很多 仓库名Repository一个 Repository 中可以有多个 标签Tag每个标签对应一个镜像版本。
nginx:1.25.2
nginx:latest
mycompany/myapp:v1.0.0docker.io/nginx:latest # Docker Hub
registry.example.com/myapp:v1.0 # 私有仓库docker login registry.example.com # 登录私有仓库
docker push myapp:v1 # 推送镜像
docker pull myapp:v1 # 拉取镜像Docker安装配置
官网https://www.docker.com/安装完成之后记得启动DockerWindows系统记得开启Hyper-V功能Docker使用Client-Server架构模式Docker Client和Docker Daemon之间使用socket或者RESTful API进行通信Docker Daemon就是服务端的守护进程负责管理Docker的各种资源Docker Client负责向Docker Daemon发送请求Docker Daemon接收到请求之后进行处理然后将结果返回给Docker ClientDocker Daemon是一个后台进程用来接收并处理来自Docker客户端度请求然后将结果返回给Docker客户端所以我们在终端中输入各种Docker命令实际上都是通过Docker客户端发送给Docker Daemon的然后Docker Daemon进行处理再将结果返回给客户端就可以在终端中看到执行结果了。
容器化和Dockerfile
容器化Containerization顾名思义就是将应用程序打包成容器然后在容器中执行应用程序的过程主要有三步 创建一个Dockerfile告诉Docker创建应用程序镜像所需要的步骤和配置使用Dockerfile构建镜像使用镜像创建和运行容器 Dockerfile是一个文本文件里面包含了一条一条的指令用来告诉Docker如何来构建镜像这个镜像包括了我们应用程序执行的所有命令也就是刚刚提到的各种依赖配置环境和运行应用程序所需要的所有内容 精简版操作系统应用程序的运行时环境应用程序第三方依赖库或者包应用程序的配置文件和环境变量等 实践环节 写一个js脚本文件输出Hello World! 没有Docker之前我们在其他机器要运行代码只能通过以下步骤 Step1: 安装操作系统Step2: 安装JavaScript运行环境NodeJSStep3: 复制应用程序、依赖包、配置文件Step4: 执行启动命令运行程序 有了Docker后我们可以把下面的步骤给写入Dockerfile里面剩下的工作就交给Docker来自动完成 需要先指定一个基础镜像镜像是按层次结构来构建的每一层都是基于上一层的所以要先指定一个基础镜像然后在这个镜像的基础上再添加我们的应用程序比如可以在一个基础的linux镜像开始然后安装nodejs也可以直接使用nodejs的镜像FROM node:14-alpine然后需要把我们的应用程序复制到镜像中可以使用copy命令来复制文件COPY source dest比如COPY index.js /index.js接下来需要在镜像中运行应用程序可以使用 CMD 命令来运行应用程序CMD是个方括号里面第一个参数表示可执行程序的名字第二个参数表示可执行程序接收到的参数 CMD [ node, /index,js ]也可以不用方括号如 CMD node /index.js回到终端使用 docker build -t 镜像名字 . 来构建镜像后面加的一个点表示的是当前目录也就是Dockerfile所在的目录docker image ls 或者是 docker images查看所有的镜像latest表示最新版本docker run 镜像名字即可执行当前镜像文件
Docker Compose
用于定义和运行多容器Docker应用程序的工具使用YAML文件来配置应用程序的服务一条命令即可创建并启动所有服务 实际开发环境中这些服务是需要相互关联着才能工作的Docker Compose解决的就是这个问题通过一个单独的docker-compose.yaml的配置文件来将这一组互相关联的容器组合在一起形成一个项目然后使用一条命令就可以启动、停止或者重建这些服务docker compose up