什么是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