什么是docker   2017-09-07


什么是docker

docker是一种容器,这篇文章对容器的定义是:

容器是一组运行在Linux操作系统上并使用命名空间进程进行分隔的进程,有了容器就无需再启动和维护虚拟机。与虚拟机技术相比,容器的最大不同之处在于打包格式和可移植性。构建容器的目的在于为现代基础设施降低占用空间和启动时间、提供重用性、更好地利用服务器资源,并更好地集成到整个开发生态系统中(例如持续集成和交付生命周期)。

容器相对于虚拟机有以下优点:

  • 更高效地利用系统资源
  • 更快的启动速度
  • 一致的运行环境
  • 持续的交付和部署
  • 更轻松的迁移
  • 维护和扩展的便利性

基本概念

镜像

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

镜像分为黑箱镜像和dockerfile。

前者通过实际创建和配置docker容器并通过docker commit记录每个版本的变更,优点是简单直观,缺点是不能记录在基础镜像上做了哪些操作,并且在多次修改之后,镜像会变得很臃肿。

dockerfile是镜像的配置文件,部署时docker根据配置内容生成容器,优点是可以清楚地记录每次修改的内容、镜像体积很小,缺点是编写时比较复杂。

容器

容器是镜像运行的实体。

仓库

分发镜像的服务。

编排

容器的编排包含如下一系列任务:

  • 调度(包括部署、复制、扩展、复活、重新调度、升级、降级等)
  • 资源管理(内存、CPU、存储空间、端口、IP、镜像等)
  • 服务管理(即使用标签、分组、命名空间、负载均衡和准备就绪检查将多个容器编排在一起)

安装

我在黑苹果下安装。Mac下安装docker有两种方式:Docker for Mac或Docker Toolbox。前者最简单,后者在前者的系统要求不能被满足的情况下使用。后者的卸载比较麻烦,具体参照这里

我用前种方式安装,启动时报错:

com.docker.osx.hyperkit.linux failed to start

解决方法是到BIOS里打开VT特性,有说法说黑苹果不支持VT,我这里是可以的。

镜像加速器

一般用阿里云的镜像服务。

docker的使用

拉取镜像

1
docker pull base/archlinux

列出镜像

1
docker images

创建容器

1
docker run --name arch --it base/archlinux bash

终止容器

exitctrl-d

启动已终止容器

1
docker start arch

attach运行中的容器

1
docker attach arch

detach运行中的容器

ctrl+p ctrl+q或者:

1
docker detach arch

查看容器

1
2
3
4
5
# 查看运行中的容器
docker ps -q

# 查看所有,包括已终止的
docker ps -a

删除已终止容器

1
docker rm arch

本文基于署名4.0国际许可协议发布,转载请保留本文署名和文章链接。 如您有任何授权方面的协商,请联系我。

Contents

  1. 什么是docker
  2. 基本概念
    1. 镜像
    2. 容器
    3. 仓库
    4. 编排
  3. 安装
    1. 镜像加速器
  4. docker的使用
    1. 拉取镜像
    2. 列出镜像
    3. 创建容器
    4. 终止容器
    5. 启动已终止容器
    6. attach运行中的容器
    7. detach运行中的容器
    8. 查看容器
    9. 删除已终止容器