Docker
简介
Docker是一个用于构建(build),运行(run),传送(share) 应用程序的平台
- 将应用程序打包为一个个的集装箱,小鲸鱼(Docker)就会帮我们将它们运送到任何需要的地方
- 每个集装箱将下列文件打包在一起(应用程序和它运行时所需要的各种依赖包、第三方软件库、配置文件等),以便在任何环境中都可以正确的运行
为什么要使用Docker
比如我们写了一个网站:
前端使用Vue搭建界面
后端使用SpringBoot微服务框架来提供各种服务和接口
使用MySQL数据库来存储数据
- 如果没有使用Docker,我们在生产环境和测试环境中都需要进行各种配置:
- 如果有了Docker,我们可以将这些(前端、后端、数据库等)打包成一个个的集装箱,只要在开发环境中运行成功了,在其他环境中也一定可以成功。
Docker和虚拟机的区别
- 架构差异:虚拟机是基于虚拟化技术(hypervisor)实现的,创建一个完整的虚拟硬件环境,模拟一台计算机,包括处理器、内存、硬盘等设备。而Docker则是基于容器化技术(Containerization),使用Docker引擎访问宿主机操作系统,将应用程序打包到容器中。因此,Docker的架构更加轻量级,启动速度也更快。
- 隔离原理:虚拟机通常隔离整个操作系统,进程无法直接访问宿主机资源和数据,需要通过网络或共享文件夹等方式交互。Docker使用Linux内核的namespace和cgroups功能,实现对不同容器中进程的隔离,允许它们共享宿主机资源同时独立运行。
基本原理和概念
Docker中的镜像、容器和仓库
镜像和容器的关系就像Java中的类和实例的关系一样:
- 镜像是一个只读的模版,它可以用来创建容器
- 容器是Docker的运行实例,它提供了一个独立的可移植的环境,可以在这个环境中运行应用程序
Docker仓库是用来存储Docker镜像的地方,最流行和最常用的仓库就是Dockerhub,实现镜像的共享和复用
Docker的安装
Docker采用Client-Server架构模式
- Docker Client和Docker Daemon之间通过Socket或者RESTful API进行通信
- Docker Daemon就是服务端的守护进程,他负责管理Docker的各种资源
- Docker Client负责向Docker Daemon发送请求,Docker Daemon接收到请求后进行处理,然后将结果返回给Client。因此我们在终端中输入的各种命令,都是Client发送给Docker Daemon的
容器化和Dockerfile
容器化:顾名思义就是将应用程序打包为容器,在容器中运行应用程序的过程
Dockerfile:是一个文本文件,里面包含了一条条的指令,用来告诉Docker如何来构建镜像,这个镜像中包含了我们应用程序执行的所有命令,也就是上边提到的依赖、第三方软件包、配置文件等
这个过程简单来说可以分成三个步骤:
- 首先需要创建一个Dockerfile,来告诉Docker构建应用程序镜像所需要的步骤和配置
- 使用Dockerfile来构建镜像
- 使用镜像创建和运行容器
实践环节
dockerfile:
1 |
|
创建镜像:
1 |
|
创建容器:
1 |
|
假设主机上的文件夹路径是 /path/to/your/project,你想在容器中将这个文件夹挂载到 /app 目录下,可以使用以下命令启动容器:
1 |
|
Docker
https://adzuki23.github.io/2024/05/15/Docker/