Docker 初学笔记
Docker 总览
几个重要概念
- Docker: 是一种容器技术, 可以提供虚拟服务. 物理上共享主机的硬件和网络资源.
相比于虚拟机技术, 它轻巧, 快速, 便捷, 跨平台, 易于分配发布. 又同时拥有虚拟机的优点!
由于以上特点, 目前docker的容器有蚕食传统软件的趋势: 提供服务时, 给的是docker镜像或容器而非传统的安装软件!
譬如, 我学习docker的初衷就是: 一劳永逸的制作一个用于开发2440系列编译环境的pc linux系统
可以看出, 我需求就是提供编译服务. 传统的安装软件无法简单的实现, 但docker可以! (目前用的vm, 太重太麻烦) - Union FS (分层存储): 本质是增量管理. 基于原有的运行系统, 执行某些命令后, 把新产生的文件作为增量新建一层文件.
直观感受一下, 是这样的: - images (镜像): docker 以镜像为基础. 镜像是只读的, 不包含任何动态数据, 内容不可更改!
基于基础镜像, 可以在加入自己需要的app和服务后, 打包成自己的具有特殊功能的镜像. - container (容器): 容器就是镜像运行时的实体 (类似于类和实例的关系).
容器必须基于镜像运行. 可以基于同一个镜像创建多个容器, 来实现不同的功能或服务.
容器可以被创建, 启动, 停止, 删除, 暂停等等
容器的本质就是进程, 运行时实现某种功能, 只是这个进程的上下文用的是虚拟化的镜像环境. - Docker Registry (仓库): 用于存储, 分发镜像的仓库.
其中 Docker Hub 就是官方的镜像仓储服务.
其运行模式和 github 一样, 公开资料免费, 私有资料收费
当然, 也可以建立自己的私有 Docker Registry - Docker Volume, Docker的数据服务.
docker 体系要让自己表现更像应用程序, 就离不开对数据的存储和隔离.
而docker容器是非持久化的, 可以随时创建和删除, 无法满足数据存储的基本要求.
因此提供了Docker Volume. 包括 data volume 和 data volume container
docker的技术架构
- Docker Client / Docker Daemon: 用户和Docker的交互使用的是C/S模式.
用户作为客户端使用 http 服务和 Docker Daemon 进行交互 - Engine 和 Job: Job本质就是进程. 基于容器, 运行任务.
譬如, 对 Docker Registry 的操作就是作为一个job任务实现的. - Docker Registry: 用于存储, 分发镜像的仓库
- Graph: Graph对已下载Docker镜像进行保管, 并对已下载容器镜像之间关系进行记录.
Graph不但要存储本地具有版本信息的文件系统镜像,
而且还要通过GraphDB记录所有文件系统镜像彼此之间的关系 - Driver: 驱动模块. Driver驱动主要作用是实现对Docker容器进行环境的定制
- Docker container: Docker容器是Docker架构中服务交付的最终体现形式
Docker按照业务的需求, 依赖关系和配置文件打包相应的Docker容器
初步评估结论
- 感觉docker 的野心和潜力都很大. 如镜像管理, 跨平台, 容器应用化, 功能化, 服务化.
- 可以看出主要发展方向是网络和云方面的 (新的项目都是针对网络集群的).
- 基本已经可以跨平台使用(Docker machine).
- 我的初衷就是: 一劳永逸的制作一个用于开发2440系列编译环境的pc linux系统
就此而言, docker可用, 但初始配置并不轻松.
因此暂不急于使用docker来配置这么一个主机编译环境.
Docker 的安装
全程参考官网
Get started with Docker
Windows 10 64bit 直接安装
可直接下载安装 docker, 无需安装在虚拟机下面. 家中的win10是家庭版, 但也能正常安装运行docker.
使用默认设置就能运行, 说一下文件共享. 譬如勾选 E
盘共享后, shell 应该这样用:
# docker下, 显示E盘全部内容 |
ToolBox 基于虚拟机的安装
参考Install Docker Toolbox on Windows
- 机器要求: 64bit 操作系统, 支持并使能IVT虚拟技术
- Windows Vista 及以上版本, 安装默认的 NDIS6 driver 即可.
- Windows 7 和 Windows XP, 安装时勾选 NDIS5 driver
- 里面也提到了卸载ToolBox时, 如何先删除虚拟机里的 dock-machine
使用虚拟机后的文件共享很简单, 在 VirtualBox
->Settings
->Shared Folders
直接修改好就行了.
使用 putty 登录docker虚拟机
- 不太喜欢 Docker Quickstart Terminal 提供的终端, 用起来不顺手(不能用鼠标, 不能复制黏贴)
不过只有在这个终端里, 能直接使用docker-machine
相关的指令 - 自己使用ConEmu统一了终端, 里面集成好putty. 因此需要使用ssh.
- 获取 boot2docker 的IP地址.
运行 Docker Quickstart Terminal 成功后, 终端上可以找到这样一句话docker is configured to use the default machine with IP 10.0.0.100
或者, 输入docker-machine ls
, 找到其IP地址. 譬如tcp://10.0.0.100:2376
或者, 直接登录boot2docker虚拟机, 输入指令ifconfig
查看IP地址.10.0.0.100
- boot2docker的登录名默认就是
docker
. 如果需要密码的话, 应该是tcuser
- 运行过 Docker Quickstart Terminal 后, docker自动生成了ssh密钥.
一般存储在C:\Users\my_name\.docker\machine\machines\default\
或者%HOMEPATH%\.ssh
下面id_rsa
是私钥,id_rsa.pub
是公钥 - 打开
puttygen.exe
->Load an existing private key file
->Load
->选择文件格式为All Files (*.*)
->选择id_rsa
->弹出框OK
接着puttygen.exe
主界面下->Save private key
->保存为id_rsa.ppk
- 打开
putty.exe
->左边Connection
->SSH
->Auth
->右边Private key file for authentication
->Browse...
->选择id_rsa.ppk
接着putty.exe
->左边Session
->右边Connection type:
点选SSH
->Host Name (or IP address)
填如docker@10.0.0.100
->Port
填入22
最后Saved Sessions
填入期望的名称如boot2docker
->Save
->Open
->连接成功!
Docker 常用指令
可参考:
镜像指令
# 从 Docker Hub 获取 ubuntu 16.04 的镜像 |
容器指令
# 输出 "hello world" |
其它指令和功能
- 使用 Dockerfile 定制镜像
- Dockerfile 指令详解
- Docker Hub 基本操作及自动创建
- Docker Registry 构建私有仓库
- Docker Volumn 数据卷的操作
- Docker Volumn Container 数据卷容器的操作
- 使用网络-外部访问容器
- 使用网络-容器互联
- 高级网络配置
- 高级网络配置-网络相关命令列表
- 常见问题总结
资料和参考
Docker — 从入门到实践
Docker技术架构详细分析 Docker模块分析
Microsoft Windows 安装docker
Docker命令指令详情-持续更新
原创于 DRA&PHO