Docker学习笔记
1.什么是Docker容器?
Docker容器是Docker进程+镜像文件(Docker 镜像中包含了运行环境和配置)
官方定义:Docker是以Docker容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员设计的,用于构建、发布和运行分布式应用的平台。是一个跨平台,可移植并且简单易用的容器解决方案。
Docker是通过内核虚拟化技术(namespace及cgroups等)来提供容器的资源隔离与安全保障等,由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机VM额外的操作系统开销,提高资源利用率。
1.1 namespace 隔离容器的运行环境
- 当用dockerrun启动一个容器时,Docker 将在后台为容器创建一个独立的命名空间。命名空间提供了最基础也是最直接的隔离,在容器中运行的进程不会被运行在本地主机上的进程和其他容器通过正常渠道发现和影响。
- 从网络架构的角度来看,所有的容器实际上是通过本地主机的网桥接口(Docker0)进行相互通信,就像物理机器通过物理交换机通信一样。
1.2 控制组资源控制的安全
控制组是Linux容器机制中的另外一个关键组件,它负责实现资源的审计和限制。当用docker run启动一个容器时,Docker将在后台为容器创建一个独立的控制组策略集合。
它提供了很多有用的特性;以及确保各个容器可以公平地分享主机的内存、CPU、磁盘等资源;当然,更重要的是,控制组确保了当发生在容器内的资源压力不会影响到本地主机系统和其他容器。
尽管控制组不负责隔离容器之间相互访问、处理数据和进程,但是它在防止拒绝服务攻击(DDoS)方面是必不可少的。尤其是在多用户的平台(比如公有或私有的PaaS)上,控制组十分重要。例如,当某些应用容器出现异常的时候,可以保证本地系统和其他容器正常运行而不受影响。
优点
- 持续部署与测试:消除线上线下的环境差异,保证应用生命周期的环境一致性和标准化。开发人员利用镜像实现标准开发环境的构建, 开发完成后通过通过封装着完整环境和应用的镜像进行迁移,由此,测试和运维人员可以直接部署软件镜像来进行测试和发布,大大简 化了持续集成,测试和发布的过程。
- 跨云平台支持:Docker带来的最大好处就是其适配性,越来越多的云平台支持Docker,同时也让应用多平台混合部署成为可能。
- 环境标准化和版本控制:基于Docker提供的环境一致性和标准化,你可以使用Git等工具对Docker镜像进行版本控制,相比基于代码的版本控制来说,你还能够对整个应用运行环境进行本本控制,一旦出现故障可以快速回滚。相比以前的虚拟机镜像,Docker压缩和备份的速度更快,镜像启动也像启动一个普通进程一样快。
- 高资源利用率和隔离:Docker容器没有管理程序的额外开销,与底层共享操作系统,性能更加优良,系统负载更低,在同等条件下可以运行更多的应用实 例,可以更充分的利用系统资源。同时,Docker拥有不错的资源隔离与限制能力,可以精确的对应用分配CPU、内存等资源,保证应用 间不会相互影响
- 容器跨平台性和镜像:Docker为容器设定了一整套标准化的配置方法,将应用及其依赖的运行环境打包成镜像,真正实现了“构建一次,到处运行”的理念, 大大提高了容器的跨平台性
- 应用镜像仓库:Docker官方构建了一个镜像仓库,
2.Docker的应用场景
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境
3.Docker 架构
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
4.各组成部分

5.docker run
Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。
docker run -i -t ubuntu:15.10 /bin/bash
-
-t:在新容器内指定一个伪终端或终端。
-
-i:允许你对容器内的标准输入 (STDIN) 进行交互
可以通过运行exit命令或者使用CTRL+D来退出容器
6.停止容器
docker stop + CONTAINER ID 命令来停止容器;
docker ps 查看正在运行的容器;
docker start 已经停止的容器,我们可以使用改命令 来启动;
docker ps -l 查询最后一次创建的容器;
docker rm 命令来删除不需要的容器(删除容器时,容器必须是停止状态);
docker restart 正在运行的容器,我们可以使用该命令来重启;
7.运行一个web应用
docker pull training/webapp // 载入镜像

docker run -d -P training/webapp python app.py
-
-d:让容器在后台运行。
-
-P: 随机端口映射,容器内部端口随机映射到主机的高端口
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口

使用 docker ps 来查看我们正在运行的容器:

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上。
这时我们可以通过浏览器访问WEB应用

也可以通过 -p 参数来设置不一样的端口 "docker run -d -p 5000:5000 training/webapp python app.py "容器内部的 5000 端口映射到我们本地主机的 5000 端口上。
8.列出镜像列表
我们可以使用 docker images 来列出本地主机上的镜像

docker search 搜索 httpd 来寻找适合我们的镜像
docker pull 下载镜像
当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
1)从已经创建的容器中更新镜像,并且提交这个镜像
- 2)使用 Dockerfile 指令来创建一个新的镜像
docker tag 命令,为镜像添加一个新的标签。

浙公网安备 33010602011771号