什么是Docker?
先看一段Docker创始人的一段视频:
Ship! Docker就是用来解决日渐繁杂的开发和生产环境的痛点问题的!大大简化了软件开发的流程和环境搭建的复杂性,解放重复劳动,让技术人员更关注功能和需求.
Docker的产生是为了解决以下的问题:
- 环境管理复杂:从各种OS到中间件到APP,开发者需要关心太多的东西,Docker可以通过镜像分享的形式简化部署多应用实例.
- 虚拟化手段变化:采用虚拟化手段满足用户按需分配的资源需求以及保证可用性和隔离型.
如何学习一种工具和技术?
入门非常的容易
- 上官网,跟着教程走
- 下载DOCKER FOR WINDOWS SERVER安装
- 非win10 pro,得安装docker toolbox
- 安装后,上docker hub pull一个镜像下来.
- 试运行下
Docker run hello-world
发现已经被墙了,google之,配置DaoCloud的Docker加速器
1 | docker-machine ssh default |
开胃菜结束,进入主菜
Docker Overview
Docker是一个用于Developing,shipping,running应用的开放平台.
先预览一下,之后我们需要弄清楚以下几个问题.
- Docker是什么?
- Docker是如何驱动的?
- Docker能解决什么问题?
- Docker的架构?
什么是Docker平台?
Docker提供管理容器生命周期的工具和平台:
- 将你的应用[包括组件]打包到Docker容器内
- 分发这些容器到团队,进行进一步的开发和测试
- 将应用发布到生产环境
Docker引擎?
Docker是C/S结构的应用,Server是守护程序常驻内存,Client通过REST API和Server交互.
Docker解决什么问题?
快速可持续行的发布应用
开发人员本地编码并通过分享Dorker容器进行集成,测试,发布
按需部署和裁剪
Docker容器具备很高的移植性,它可以在开发人员的本地环境运行,也可以在数据中心,云的物理和虚拟环境中运行.
同一个硬件环境提供更高的负载
Docker的架构?
Docker daemon
Server守护程序,用户通过Docker client和它交互
Docker Client
用户和Docker交互的主要工具,使用命令行和配置和Docker damon进行交互.
Docker内部结构
images
Docker的镜像是只读的模板,用于指示Docker创建容器的,由Dockerfile文本文件来描述.说白了就是Docker的Build组件.
containers
可运行的Docker image实例.是Docker的运行组件.
registries
docker registry是镜像库,是Docker的分发组件.
Docker的容器如何加载和运行?
$ docker run -i -t ubuntu /bin/bash
当运行一条命令,Docker引擎会进行一系列的处理来加载和运行容器:
- 获取
ubuntu
镜像: Docker引擎首先在本地查找镜像,如果存在就作为新的容器加载进来,如不存在就从Docker hub获取镜像 - 创建一个新的容器:Docker使用image创建容器
- 配置文件系统并加载一个读写层: 在文件系统里创建容器并将读写层让入image
- 配置网络接口:创建一个网络接口,允许Docker容器和local host交互
- 配置IP地址: 查找并绑定一个可用的ip地址
- 执行命令: 执行
/bin/bash
- 应用输出:连接应用标准输入,输出,错误接口,供交互.
入门示例
构建image
从Docker hub获取whalesay镜像
1 | $ docker run docker/whalesay cowsay boo |
写一个Dockerfile
1 | FROM docker/whalesay:latest |
编译image
1 | $ docker build -t docker-whale . |
编译流程
- 首先,Docker校验编译所需要素.
1 | Sending build context to Docker daemon 2.048 kB |
- Docker加载
whalesay
镜像.镜像已经在本地,所以不需要再去下载.
1 | Step 1 : FROM docker/whalesay:latest |
- Docker更新
apt-get
包管理器
1 | Step 2 : RUN apt-get -y update && apt-get install -y fortunes |
- 安装
fortunes
1 | Reading state information... |
- 完成编译
1 | Step 3 : CMD /usr/games/fortune -a | cowsay |
运行新的docker-whale
1 | docker run docker-whale |
Docker hub
使用Docker hub对镜像进行配置管理,和Git使用方式类似.
容器命名
1 | $ docker run -d -P --name web training/webapp python app.py |
容器挂载管理
Docker Compose
Compose
是一个定义和运行多Docker容器应用的工具.
使用Compose
通常有3个步骤:
- 将应用的环境定义到
Dockerfile
,以便在其他地方可以复用. - 在
docker-compose.yml
将应用定义为服务,这样你可以在解耦的环境中运行 - 最后,执行
docker-compose up
docker-compose.yml
大致内容如下:
1 | version: '2' |
Compose的使用场景
- 开发环境
- 自动化测试环境
- 单站部署
使用指南
跟着官网教程
Docker Machine
Docker Machine说白了就是个Docker Server集群管理的client端,便于远程发布和部署Docker应用
Docker应用到项目开发方法
如果是新的团队,那没什么问题,起初就可以商量好.如果是已经比较成熟的团队,Docker逐步嵌入到几个持续集成的流程中去.应用Docker到软件开发的流程,首先需要解决几个问题.
- Base Image的选择, phusion-baseimage
- 配置管理Docker镜像的工具的选择,如Ansible、Chef、Puppet
- Host主机系统的选择,如CoreOS、Ubuntu
- 使用持续集成工具(Jenkins)进行管道部署进行持续集成
- 使用Google Kubernetes进行生产部署
Docker文件挂载
Docker image打包发布的时候,如果源码也一并放在image里是不合理的,所以具体开发过程中需要将宿主文件挂载到Docker容器里.
windows下开发环境
windows在vxbox的虚拟机在起Docker,所以需要迂回挂载.
利用vxbox共享
- 设置vxbox共享文件夹
- 进入vxbox虚拟机,将windows目录挂载到虚拟机,如:
1 | sudo mount -t vboxsf project /mnt/data |
- 进入Docker终端,-v启动挂载到容器
1 | docker run -it -v /mnt/data:/usr/data ubuntu:trusty |
Docker常用命令
清除
- 停止所有container
1 | docker stop $(docker ps -a -q) |
- 删除所有container
1 | docker rm $(docker ps -a -q) |
- 删除所有images
1 | docker rmi $(docker images -q) |