Docker学习笔记

1.什么是Docker容器?

Docker容器是Docker进程+镜像文件(Docker 镜像中包含了运行环境和配置)python

官方定义:Docker是以Docker容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员设计的,用于构建、发布和运行分布式应用的平台。是一个跨平台,可移植而且简单易用的容器解决方案。web

Docker是经过内核虚拟化技术(namespace及cgroups等)来提供容器的资源隔离与安全保障等因为Docker经过操做系统层的虚拟化实现隔离,因此Docker容器在运行时,不须要相似虚拟机VM额外的操做系统开销,提升资源利用率docker

 

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 镜像来建立。ubuntu

容器镜像的关系相似于面向对象编程中的对象浏览器

 

4.各组成部分

5.docker run

Docker 容许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。安全

docker run -i -t ubuntu:15.10 /bin/bash 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 命令,为镜像添加一个新的标签。

 

 

获取一个新的镜像

相关文章
相关标签/搜索