2023-07-31 10:25:07 Docker /
Docker 是一种开源平台,一种快速构建、运行和管理应用的工具。它使用容器化技术,使得应用程序及其依赖性可以打包到一个容器中,并在任何支持 Docker 的环境中运行。
1 MobarXterm 通过 SSH 连接 linux虚拟机,操作虚拟机上的 Docker。
2 Windows本地:通过wsl安装Linux发行版本,安装docker desktop(将自动在WSL中配置Docker环境,借助linux内核运行)
容器(Container)
- 容器是一个轻量级的、可移植的、自包含的单元,包括应用程序和其所有依赖项。
- Docker 利用容器技术,将应用程序及其依赖项打包成一个容器,确保在不同环境中的一致性运行。
- Docker 位于容器 和 服务器-操作系统/硬件 之间,是运行容器的引擎。
- 隔离网络、文件、进程等环境。一个容器是一个沙盒隔离环境。
- 相对于虚拟机技术,docker 启动更快、更清量。但容器共用宿主机的内存、CPU物理资源,多容器可能存在互相抢占资源的情况。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18docker run -d \ # 创建并运行一个容器,-d 是让容器在后台运行;同一个镜像可创建多个容器
--name mysgl \ # 给容器起名字,必须唯一
-p 3306:3306 \ # 设置 宿主机端口:容器端口 映射
-e TZ=Asia/Shanghai \ # 设置环境变量
-e MYSQL_ROOT_PASSWORD=123 \ # 指定运行的镜像名,一般为 [镜像名]:[镜像版本]
mysql
docker ps # 查看本地容器(运行中的)
docker ps a # 查看所有容器 (包括未运行)
docker start <容器ID> # 启动容器
docker stop <容器ID> # 停止容器中的进程,容器未删除
docker rm <容器ID> # 删除容器
docker inspect <容器ID> # 查看容器配置信息
docker log <容器ID> # 查看容器日志
docker exec -it <容器ID> bash # 进入容器内部,命令行模式(容器内部模拟出一个操作系统)
容器打包成镜像: docker commit -a "作者信息" -m "log信息" <容器ID><目标镜像名称:tag版本>
拷贝文件到容器: docker cp <文件目录> <容器ID>:<目标目录>
拷贝容器文件到宿主机:docker cp <容器ID>:<文件目录><宿主机目标目录>
更新容器设置:docker update <容器ID><相关设置>
镜像(Image)
- 镜像是一个只读的模板,包含运行应用程序所需的所有信息,包括代码、运行时、库、环境变量和配置文件。
- 容器是通过运行镜像创建的(像光盘),本地容器是真正运行的实例。镜像是容器的模板,是从容器打包来的,可以在不同操作系统,不同服务器之间传播。
-
1
2
3
4
5
6
7docker images # 查看本地镜像
docker search <名称关键字> # 搜索镜像仓库
docker pull <镜像名:tag版本> # 下载镜像
docker push <镜像名:tag版本> # 上传镜像
docker rmi <镜像名:tag版本> # 删除镜像
docker save -o <输出文件路径><镜像名:tag版本> # 打包本地镜像文件
docker load -i <加载文件路径 # 导入本地镜像文件
仓库(Registry)
- 仓库是存储和组织 Docker 镜像的地方。Docker Hub 是一个常见的公共仓库,你也可以搭建私有仓库。
- Docker 镜像可以从仓库中拉取,也可以推送到仓库。
沙箱
- 沙箱是一种安全机制,用于隔离和限制程序或应用程序的运行环境,以防止其对系统或其他程序产生潜在的危害。沙箱技术旨在创建一个受控制的环境,使得运行在其中的代码无法直接影响到系统的其他部分。这种隔离有助于确保安全性、防止恶意软件传播,同时提供一定程度的控制和监控。
- 容器化平台(如 Docker)使用沙箱技术来隔离容器中的应用程序,确保它们互相独立运行。
容器创建
镜像结构:入口,层,基础镜像。分层的好处是可复用,,
- 通过命令直接创建,需要完整镜像,几个G常有,稳定。
- 通过dockerfile创建,不需要完整镜像,更灵活。
Dockerfile 是一个包含构建镜像步骤的文本文件,包含一个个的指令。通过编写 Dockerfile,你可以定义如何构建镜像,包括基础镜像、安装依赖、复制文件等步骤。 - 使用 Docker 的基本步骤
- 安装 Docker: 根据操作系统的不同,安装适合的 Docker 版本。
- 创建 Dockerfile: 编写包含应用程序构建步骤的 Dockerfile。
- 构建镜像: 在包含 Dockerfile 的目录中运行
docker build
命令构建镜像。(如java项目还需要jar包) - 运行容器: 使用
docker run
命令基于构建的镜像创建和运行容器。 - 发布镜像: 将构建的镜像推送到 Docker 仓库,以便其他人可以拉取使用。
数据卷
- 数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁(两边文件同时修改)。
(容器一般只包括支持运行的最少文件,一般无vi或其他编辑器,所以无法进入容器直接对容器中的文件进行修改) - 如何挂载数据卷?在创建容器时,利用-v 数据卷名:容器内目录完成挂载。创建时如果发现挂载的数据卷不存在,会自动创建。
1
2
3
4docker volumels # 查看数据卷
docker volume rm # 删除数据卷
docker volume inspect # 查看数据卷详情
docker volume prune # 删除未使用的数据卷
容器编排(Orchestration):运维人员
容器编排是指在生产环境中管理和协调多个容器的过程。Docker 提供了 Docker Compose 工具,用于定义和运行多容器的应用。
Kubernetes
1. 什么是Kubernetes
Kubernetes是一个开源的容器编排引擎,可以用来管理容器化的应用,包括容器的自动化的部署、扩容、缩容、升级、回滚等等;
它是Google在2014年开源的一个项目,它的前身是Google内部的Borg系统。
在Kubernetes出现之前,我们一般都是使用Docker来管理容器化的应用,但是Docker只是一个单机的容器管理工具,它只能管理单个节点上的容器,当我们的应用程序需要运行在多个节点上的时候,就需要使用一些其他的工具来管理这些节点,比如Docker Swarm、Mesos、Kubernetes等等;
这些工具都是容器编排引擎,它们可以用来管理多个节点上的容器,但是它们之间也有一些区别,比如Docker Swarm是Docker官方提供的一个容器编排引擎,它的功能比较简单,适合于一些小型的、简单的场景,而Mesos和Kubernetes则是比较复杂的容器编排引擎;
Mesos是Apache基金会的一个开源项目,而Kubernetes是Google在2014年开源的,目前已经成为了CNCF(Cloud Native Computing Foundation)的一个顶级项目,基本上已经成为了容器编排引擎的事实标准了。
2.1 Kubernetes 资源对象

Node:k8s集群节点,可以是物理机/虚拟机
Pod:k8s最小调度单元,容器(运行app/数据库/..镜像)的抽象,可以是一/多个容器的组合,但除非高度耦合,一个pod只运行一个容器
Service:将一组pod封装成一个服务并且提供统一访问入口(解决了一组数据库pod中一个重建后ip变化的问题,类似于“服务发现”)
Ingress:为了对外提供服务,将外部请求路由转发到内部集群的service上


ConfigMap:封装配置信息
Secret:封装敏感信息
其他安全机制:网络安全,访问控制,身份认证
Volumn:将数据挂在到本地磁盘或远程存储上,实现持久化存储


Deployment:部署无状态应用程序,将一/多个Pod组合到一起;冗余备份,相当于对Pod的抽象;具有副本控制、滚动更新、自动扩缩容等功能,实现应用程序的高可用
Statefulset:部署有状态应用程序,如DB、MQ、缓存以及保留会话状态的应用程序
2.2 Kubernetes 架构

分为Master和Worker节点
apiserver:位于master节点上,是k8s集群的API接口;交互方式包括 kubectl
命令行、Dashboard界面或API接口
3. 使用minikube搭建kubernetes集群环境
minikube是一个轻量级的kubernetes集群环境,可以用来在本地快速搭建一个单节点的kubernetes集群;
https://kubernetes.io/zh-cn/docs/tutorials/hello-minikube/ 你好,Minikube
4. 使用Multipass和k3s搭建kubernetes集群环境
minikube只能用来在本地搭建一个单节点的kubernetes集群环境,
下面介绍如何使用Multipass和k3s来搭建一个多节点的kubernetes集群环境,
5. 在线实验环境
6. kubectl常用命令
6.1 基础使用
1 | # 查看帮助 |
6.2 资源的创建和运行
1 | # 创建并运行一个指定的镜像 |
6.3 查看资源信息
1 | # 查看集群中某一类型的资源 |
6.4 资源的修改、删除和清理
1 | # 更新某个资源的标签 |
6.5 调试和交互
1 | # 进入某个Pod的容器中 |
7. Portainer的安装和使用
Portainer 是一个轻量级的容器管理工具,可以用来管理Docker和Kubernetes,它提供了一个Web界面来方便我们管理容器
官方网址: https://www.portainer.io/
8. Helm的安装和使用
Helm 是一个Kubernetes的包管理工具,可以用来管理Kubernetes的应用,它提供了一个命令行工具来方便我们管理Kubernetes的应用
官方网址: https://helm.sh/
集群存储
https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/