docker是一个应用广泛的容器化平台,旨在解决软件开发、部署、运维中的许多问题,让我们来看下docker架构:
Docker架构
Docker采用客户端-服务器(C/S)架构模式,其中Docker客户端(Client)与Docker守护进程(Daemon)进行通信。用户通过Docker客户端发送请求给Docker守护进程,后者负责处理这些请求并返回结果
核心组件
- Docker Client:用户与Docker交互的接口,可以是命令行工具或API。
- Docker Daemon:运行在主机上的后台进程,负责构建、运行和分发Docker容器。
- Docker Image:类似于一个只读模板,包含了应用程序运行所需的一切,如操作系统、应用程序代码、运行时等。
- Docker Container:基于镜像创建的实例,提供了隔离的环境来运行应用程序。
- Docker Volume:用于持久化数据的存储卷,可以挂载到多个容器中。
- Docker Registry:存储和分发镜像的仓库,类似于软件包管理系统。



数据卷
为什么使用数据卷

进入到容器后进行编辑,发现command not found,这是因为docker容器中只存放了应用程序运行必要文件,为了节省空间,像编辑器的这些文件vim等都没有,那就出现一个问题,如果我想更改容器内的文件,该如何实现,这就是数据卷的作用了
什么是数据卷
数据卷是一个虚拟目录,是容器内目录和宿主机目录之间映射的桥梁。
卷是虚拟的,但是对应的宿主机的目录是真实的,容器的目录跟数据卷之间挂载,这样桥梁就搭建起来了,实现宿主机和容器目录之间的双向绑定,容器内的目录更改,宿主机的目录也会更改,宿主机上有非常高级的编辑器,所以在宿主机上进行更改就方便多了

命令

挂载方式一
创建完卷后,需要与容器挂载,怎么实现挂载
- 在执行docker run命令时,使用
-v 数据卷:容器内目录可以完成数据挂载 - 当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷

容器内目录需要根据业务情况选定
挂载方式二
匿名卷:容器运行自动创建的卷
匿名卷有坏处,不方便
需要实现基于宿主机目录实现mysql数据目录、配置文件、初始化脚本的挂载(查看官方镜像文档)
- 在执行docker run命令时,使用
-v 本地目录:容器内目录可以完成数据挂载 - 本地目录必须以“/”或“./”开头,如果直接以名称开头,会被识别为数据卷而非本地目录
- -v mysql: /var/lib/mysql会被识别为一个数据卷叫mysql
- -v ./mysql: /var/lib/mysql 会被识别为当前目录下的mysql目录
自定义镜像
镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程
层(Layer)
添加安装包、依赖、配置等,每次操作都形成新的一层

这样做可以共享一些基础的镜像

我们看到这样的结构是很清晰的,但是操作有些复杂,你需要去找镜像,哪些依赖等等进行打包,挺麻烦。
docker解决了上述问题,你只需要描述清楚那些层,docker自动帮我们完成构建
Dockerfile

实例:构建一个ubuntu镜像



网络配置

DockerCompose



3052

被折叠的 条评论
为什么被折叠?



