docker简介
Docker
怎么理解容器
容器就像一个📦包裹,可以打包上所有需要的东西:例如依赖/配置。这样打包好可以把真个包裹直接共享在小组里面,大家都可以直接用,开发和部署更高效。
portable:小而轻,好携带,好搬运
容器放在哪
容器仓库。有的公司用私有仓库,公共仓库dockerhub
对于开发
没有容器:一个组里面有的用Mac有的用Linux,不同os安装的步骤不同,遇到错误发生在哪个步骤不可控。
有容器:不用在操作系统安装,容器本身是一个隔离的环境,放了安装好依赖和代码的包裹,可以直接下载到本地使用。不论是什么os,docker command都是一样的,大家配置本地环境的步骤都是一样的。
对于部署
没有容器:开发的人发出来代码和数据库及分别的安装配置说明文件,部署操作的人需要下载所有的外部依赖,版本可能有冲突,对于说明文件也可能有误解
有容器:安装好了docker runtime之后,不用环境配置,只用从仓库里拉取包裹运行
移除添加互不影响。
容器是什么
- 多层的镜像
镜像分了好几层下载,好处是如果有新版本需要下载,之后下载有变化的部分层,提高下载效率。
- 基础镜像一般是Linux,因为小,alpine
- 顶层镜像:应用镜像
虚拟机 vs 容器
虚拟机:一台机器的抽象概念(物理硬件)
Hypervisor:用来创建管理虚拟机,例如VirtualBox,VMware,Hyper-v(windows only)
缺点:
- 每个虚拟机都需要全套的操作系统
- 启动慢
- 资源有限:局限于实际的CPU,内存,硬盘等资源
每个机器上能跑的虚拟机是有限的
容器:一个运行应用的隔离的环境
- 可以隔离地运行多个应用
- 更轻量,不需要整套操作系统
- 共享主机的操作系统
- 启动快
- 需要的硬件资源更少
docker的架构
用户-服务器架构:服务器也就是docker engine是后台负责构建/运行容器的。用户-服务器之间通过REST API交流,
安装docker
开发工作流
应用程序加上一个Dockerfile,包括一些将应用程序所需的文件打包成一个镜像的指令
镜像
- 简易操作系统
- runtime环境(eg Node)
- 应用文件
- 第三方库
- 环境变量
有了镜像之后,可以在容器process里面运行应用了
开发环境,把应用打包成一个镜像,传到registry,在测试或者生产环境上拉取镜像可以运行应用
操作练习
- 创建一个app.js
1 |
|
app.js
1 |
|
此时如果要在另一台设备运行这个app,需要安装node以及复制app.js文件,然后在terminalnode app.js
- 在同路径下创建一个Dockerfile
1 |
|
from后面是一个基础镜像,node是在Linux基础上的镜像,alpine是一个轻量级版本,可以在dockerhub搜索找到这些公开的镜像。把文件从根路径下复制到/app工作路径下面,设置好工作路径,再执行命令
- 构建镜像
1 |
|
docker build用来构建镜像,加上一个tag便于区分,并且Dockerfile是在根路径下面,所以加上一个.
-
通过docker runtime运行
现在可以通过docker run hello-docker
运行了 -
拉取镜像并运行
可以在https://labs.play-with-docker.com 这里注册/用docker账号登录,进去是一个只有轻量级Linux和docker的虚拟机,在这里拉取一个公共的镜像并运行
1 |
|
参考链接
- 课程视频