1、什么是Docker

docker0.png

一般的项目,包含了前端、后端、数据库以及环境/库/依赖等,如果项目要兼容不同的设备,针对每一个设备,都分别集成这一套东西,会很麻烦,也很浪费资源。

docker1.pngdocker2.png

像早期的运输,一批不同类别的商品,需要保证使用任意一类交通工具,均可支持运输。因为需要转换不同的运输工具,要保证这一批物品没有缺失和损坏,单个的转移商品会很麻烦。后来,有了集装箱,可以把所有的物品统一放置进入集装箱,这样,只要把集装箱转移到不同的交通工具上就方便多了。
docker3.pngdocker4.png
Docker就承担了集装箱的角色,只用把所有的内容集成一遍,项目即可在不同的设备间正常运行。使用Docker容器,会让应用的部署和运行更简单。开发者可以把应用中需要的所有内容打包进入容器,由Docker来运送容器并部署在不同的平台,保证应用在不同的平台均可正常运行。

2、Docker如何工作

docker5.png

  • 开发者先创建Dockerfile(一个包含了创建Docker镜像的文本文件),
  • 再借助Dockerfile使用命令构建Docker镜像
  • 通过镜像可以创建容器
  • 也可以将镜像传到Docker中心(Docker Hub是Docker社区分享Docker镜像的网站/存储库)
  • 可以从Docker中心拉取镜像,基于不同的环境再创建容器

docker6.svg
Docker Daemon 监听来自 Docker Client 的请求

3、虚拟化和容器化的区别

containers-vs-virtual-machines.jpg
VM是硬件物理资源的基础上,虚拟出多个OS;容器实在OS的基础上进行虚拟。使用Docker相较而言,资源占用、性能消耗、迁移速度上都更有优势。而VM都有自己的OS,不同的VM间完全隔离,可以保护系统免受恶意团建或应用程序崩溃的影响。

4、Docker的架构

docker6.svg

Client和Docker_host都在主机上。
客户端可以执行命令,Docker daemon接收来自客户端的命令
客户端和daemon可以再相同的主机或不同的主机上呈现

5、Docker的优点

  • Docker简化了开发运维一体化的流程:
  • 无需在不同的平台多次构建和配置,一次搞定即可通用。
  • 无需担心不同环境的配置,在一个环境可正常运行,其他环境也会正常运行
  • 轻便,可运行在不同的平台(本地系统、云平台、VirtualBox等)
  • 对于镜像的更改,可像GIT一样进行版本控制
  • 隔离性(多个容器可以运行在相同系统,不会冲突;在相同系统上不同容器运行的应用,不会冲突)
  • 效率(更快更高效的部署)

6、什么是Docker镜像

Docker镜像是用来创建Docker容器的模板
可以在Registries(比如Docker Hub)查找镜像,可以将镜像存在本地或远程(端)

常用命令:
docker images
docker pull
docker push
docker run
docker rmi (remove image 移除镜像)
docker history
docker inspect

7、什么是Docker容器

容器是运行的镜像的实例

常用命令
docker ps
docker run
docker start
docker pause
docker unpause
docker attach
docker kill
docker rm

特性:
轻量
占用更少的资源
启动快速
很容易也很迅速的被开启、暂停、杀死进程或者移除
docker之前可以共享操作系统的资源

8、什么是Dockerfile

包含构建镜像命令的文本文件

dockerfile1.png

9、什么是Docker Compose

为定义和运行多容器的docker应用的工具
可以用yaml文件来配置应用服务 ——docker-compose.yml
可以使用 docker compose up 单个命令启动所有服务
可以使用 docker compose down 单个命令站厅所有服务
可以根据需要,扩大选中的服务的规模

Docker Compose 工作の步骤:

  1. 安装docker compose
  2. 在系统的任意位置创建docker compose 文件 docker-compose.yml
  3. 通过命令检查文件的有效性及正确性 docker-compose config
  4. 通过命令运行docker-compose.yml 文件 docker-compose up -d
  5. 通过命令关闭应用 docker-compose down

docker compose文件内容示例
dockercompose.png