Docker 指南
简介
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
优点:
- 快速,一致地交付您的应用程序,保证部署环境一致性
- 响应式部署和扩展,快速部署
- 在同一硬件上运行更多工作负载,消耗资源低
主要组成部分
image|镜像
Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
部署应用的基础,包含应用需要的所有环境,类似应用模版。
container|容器
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
存放运行的镜像的环境;可以包含多个应用。
registry|仓库
仓库可看着一个代码控制中心,用来保存镜像。
存放镜像的地方,与Maven
仓库概念相似。官方提供 DockerHub 作为官方镜像仓库(公开镜像免费存储,私有镜像收费存储)。
除此之外,目前用的比较多的开源镜像仓库,有 Harbor 。
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 ( 客机操作系统是指一个安装在虚拟机上的操作系统。)
流程上:
- 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 compose:运行多容器镜像工具
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Compose 使用的三个步骤:
- 使用
Dockerfile
定义应用程序的环境。 - 使用
docker-compose.yml
定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。 - 最后,执行
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: {}
评论