Docker 指南

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

简介

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低

优点:

  1. 快速,一致地交付您的应用程序,保证部署环境一致性
  2. 响应式部署和扩展,快速部署
  3. 在同一硬件上运行更多工作负载,消耗资源低

主要组成部分

主要组成部分之间关系

image|镜像

Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

部署应用的基础,包含应用需要的所有环境,类似应用模版。

container|容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

存放运行的镜像的环境;可以包含多个应用。

registry|仓库

仓库可看着一个代码控制中心,用来保存镜像。

存放镜像的地方,与Maven仓库概念相似。官方提供 DockerHub 作为官方镜像仓库(公开镜像免费存储,私有镜像收费存储)。

除此之外,目前用的比较多的开源镜像仓库,有 Harbor

Harbor logo

Harbor 是一个开源镜像仓库,它使用策略和基于角色的访问控制来保存Docker镜像,确保图像被扫描并没有漏洞,并将 Docker 镜像标记为受信任的。Harbor 是 CNCF的一个专业项目,提供兼容性、性能和互操作性,帮助您在 Kubernetes 和 Docker 等本地云计算平台上一致安全地管理 Docker 镜像。

应用场景

  • Web 应用的自动化打包和发布
  • 自动化测试和持续集成、发布
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

常用操作

推荐学习:慕课网|Docker 入门

  • 通过Dockerfile,制作自定义镜像。(Dockerfile 是一个用来构建镜像的文本文件,包含了一条条构建镜像所需的指令和说明。)
  • 通过registry,分享制作镜像。
  • 通过volume挂载数据,持久化容器数据。
  • 通过docker compose,编排一个多容器的镜像。

Docker 与 VM 的区别

VM (VMware),虚拟机。

架构上:

  • Docker 有着比 VM 更少的抽象层
  • Docker 利用的是宿主机的内核,VM 需要的是 Guest OS ( 客机操作系统是指一个安装在虚拟机上的操作系统。)

image-20220417105227824

流程上:

  • VM(VMware )在宿主机器、宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓库,然后再安装应用;
  • Docker容器(Container) ,在宿主机器、宿主机器操作系统上创建Docker引擎,在引擎的基础上再安装应用。

所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统,避免引导。docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级;虚拟机是加载Guest OS ,这是分钟级别的。

总览

特性容器虚拟机
启动速度秒级分钟级
硬盘使用一般为MB一般为GB
性能接近原生弱于原生
系统支持量单机支持上千个容器一般几十个

常用命令

推荐阅读:菜鸟教程|Docker命令大全

需要安装 docker desktop,才可运行 docker 命令。

镜像

本地镜像

  • images:查看本地镜像

  • rmi:删除本地镜像

  • tag:给镜像打版本标签

  • build:构建本地镜像

  • history:查看指定镜像的创建历史。

  • save:将指定镜像保存成 tar 归档文件。

  • load:导入使用 docker save 命令导出的镜像。

  • import:导入镜像

# 查找镜像
docker search yujian95
# 拉取镜像
docker pull yujian95/sonarqube
# 查看本地镜像
docker images
# 删除本地镜像
docker rmi yujian95/sonarqube
# 编译本地镜像,通过 Dockerfile 编译
docker build yujian95/sonarqube .

容器

生命周期管理:

  • run:运行镜像

  • start/stop/restart:启动、停止、重启容器

  • kill:杀掉一个运行中的容器。

  • rm:删除容器

  • pause/unpause

  • create:创建一个新的容器但不启动它

  • exec:进入容器

容器操作:

  • ps:查看运行容器

  • inspect:获取容器/镜像的元数据。

  • top:查看容器中运行的进程信息,支持 ps 命令参数。

  • attach:进入容器,推荐 exec命令

  • events:从服务器获取实时事件

  • logs:查看日志

  • wait:阻塞运行直到容器停止,然后打印出它的退出代码。

  • export:导出容器

  • port:指定运行端口和容器端口

# 查看本地运行容器
docker ps
# 启动、停止、重启容器
docker start 容器id
docker stop 容器id
docker restart 容器id
# 删除本地容器
docker rm 容器id

镜像仓库

  • login:登录

  • logout:退出登录

  • pull:拉取镜像

  • push:推送镜像

  • search:查找镜像

# 登录仓库
docker login
# 推送镜像到仓库
docker push yujian95/sonarqube:1.0
# 从仓库拉取镜像
docker push yujian95/sonarqube:1.0
# 查找镜像
docker search yujian95

其他操作

rootfs:

  • commit:提交文件到镜像中

  • cp:复制文件到镜像,或从镜像中复制文件

# 将 容器中 sonar.properties 配置文件复制到 服务器中
docker cp 5e85674ddcd4:/opt/sonarqube/conf/sonar.properties /data/sonarqube7.6/conf/sonar.properties 
  • diff:对比镜像

其他:

  • info:查看信息

  • version:查看版本

扩展内容

buildx:构建多环境镜像工具

支持一键构建,适用不同环境运行的镜像(win/mac/linux)。

Docker Buildx 官方文档

docker compose:运行多容器镜像工具

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

Compose 使用的三个步骤:

  1. 使用 Dockerfile 定义应用程序的环境。
  2. 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  3. 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

docker-compose.yml 的配置案例如下

# yaml 配置实例
version: '3'
services:
  web:
    build: .
    ports:
   - "5000:5000"
    volumes:
   - .:/code
    - logvolume01:/var/log
    links:
   - redis
  redis:
    image: redis
volumes:
  logvolume01: {}