docker
docker
池慕睡不着1 什么是 Docker
Windows10 Docker安装详细教程Win10安装DockerDocker教程
1.1 简介
- Docker是一个开源的应用容器引擎
- Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
1.2 应用场景
- Web应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
1.3 Docker 的优势
1、简化程序:
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
2、避免选择恐惧症:
如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
3、节省开支:
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
3 Docker 架构
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
客户端(Client):Docker 客户端通过命令行或者其他工具使用 Docker SDK 与 Docker 的守护进程通信。
主机(Host):一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
仓库(Registry):仓库用来保存镜像,可以理解为代码控制中的代码仓库。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker Machine:用于简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。
4 Docker 原理
Docker的实现原理:是利用 Namespace 做资源隔离、用 Cgroup 做资源限制、利用 Union FS 做轻量级虚拟化技术。
4.1 Namespace
- Docker利用 Linux 内核的 Namespace 功能,实现了容器之间的隔离。
- 每个容器拥有自己独立的命名空间,包括:进程、网络、用户等,使得容器内的进程看起来就像在一个独立的环境中运行一样。
4.2 Cgroup
- Cgroup(Control Groups),是 Linux 内核提供的一种机制,用于限制、和管理进程组的资源使用。
- Docker使用 Cgroup 功能限制源,比如:CPU、内存、磁盘 I/O… 等,都可以限制。
- 通过 Cgroup,防止某个容器耗尽系统资源,影响其他容器或主机系统的正常运行。
4.3 Union FS
- UnionFS(联合文件系统):是一种文件系统技术,允许将多个文件系统挂载到同一个目录下,并将它们合并成一个文件系统。
- 当创建一个新的容器时,Docker 会在基础镜像的基础上添加一个读写层,这个读写层包含了:容器中新增的文件、和修改过的文件。
- 这样,容器的文件系统实际上是由多个层组成的,每个层都代表了对原始镜像的修改,从而实现了文件系统的共享和高效利用。
- 通过 Union FS 技术,还节省了存储空间,因为相同的文件只需要在底层镜像中存储一次,而不是每个容器都复制一份。
5 Docker命令
5.1 命令格式
1 | docker 命令名 [选项] [镜像名 or 容器id] [容器内部命令] |
5.2 常用命令
命令 | 说明 |
---|---|
docker pull | 拉取镜像 |
docker push | 推送镜像到DockerRegistry |
docker images | 查看本地镜像 |
docker rmi | 删除本地镜像 |
docker run | 创建并运行容器(不能重复创建) |
docker stop | 停止指定容器 |
docker start | 启动指定容器 |
docker restart | 重新启动容器 |
docker rm | 删除指定容器 |
docker ps | 查看容器 |
docker logs | 查看容器运行日志 |
docker exec | 进入容器 |
docker save | 保存镜像到本地压缩文件 |
docker load | 加载本地压缩文件到镜像 |
docker inspect | 查看容器详细信息 |
Docker文档Docker Docs
6 案例
6.2 运行MySQL
6.2.1 拉取 mysql 镜像
docker pull mysql:5.7
6.2.2 启动 mysql
示例代码:映射可以实现数据持久性
1 | docker run |
6.2.2.1 说明
空目录映射
初始数据目录映射, 必须确保是空目录
Win7选项
最后追加 –innodb-use-native-aio=0
非必须映射
日志文件目录与配置文件目录映射是可选的
–restart 选项说明
–restart=always表示容器退出时,docker会总是自动重启这个容器–restart=on-failure:3表示容器的退出状态码非0(非正常退出),自动重启容器,3是自动重启的次数。超过3此则不重启–restart=no默认值,容器退出时,docker不自动重启容器–restart=unless-stopped表示容器退出时总是重启,但是不考虑docker守护进程运行时就已经停止的容器