/ Docker

Docker容器入门学习

0x01 Docker技术

Docker使用Google公司推出的Go语言实现,基于linux内核的cgroup,namespace等技术实现,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其他进程,因此也称其为容器。最初实现是基于LXC,从0.7以后开始去除LXC,转而使用自行开发的libcontainer,从1.11开始,则进一步演进使用runC和containerd。Docker技术在容器的基础上,进行了进一步的封装,从文件系统。网络互连到进程隔离等等,极大的简化了容器的创建和维护,使得Docker技术比虚拟机技术更加便捷。

Docker和虚拟机技术的差别,一张图就可以看懂
虚拟机体系结构
docker体系结构

0x02 Docker的三个概念

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Reponsitory)

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

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

镜像构建完成后,可以很容易的在当前宿主上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务。以Ubuntu镜像为例,ubuntu是仓库的名字,其内包含有不同的版本标签,如,14.04,16.04。我们可以通过ubuntu:14.04,或者ubuntu:16.04来具体指定所需哪个版本的镜像。如果忽略了标签,比如ubuntu,那将视为ubuntu:latest。

上次给学弟学妹解释什么是镜像和容器,就像我们用VM安装虚拟机用的iso,而容器就是我们安装完成可以启动的具体的一个虚拟机。三十这里的iso镜像和docker不同,我们都知道docker的镜像是共享宿主机内核的,而VM不是。

0x03 安装

我使用的是阿里的一键安装脚本,安装环境ubuntu16.04

curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

最好使用官方文档推荐的方法安装:
如在centos中:
在yum源中添加官方源
yum update
yum install docker-engine
systemctl enable docker
systemctl start docker
sudo groupadd docker
sudo usermod -aG docker $USER

0x04 使用镜像

获取镜像:docker pull [选项][Docker Registry地址]<仓库名>:<标签>
dcoker pull ubuntu:14.04
启动一个容器(相当于安装一个虚拟机吧)
docker run -it --rm ubuntu:14.04 bash
-i:交互式操作
-t:终端
--rm:容器退出随之将其删除
ubuntu:14.04:使用ubuntu:14.04镜像为基础来启动容器
bash:交互式shell使用bash

docker images 列出镜像
docker images -a 中间层镜像
这个地方可以通过很多不同的命令显示不同的镜像列表,不一一列出,暂时用的不多

dcker ps 显示正在运行的容器
docker stop containername 停止一个已经启动的容器
docker start containername 启动一个停止了的容器

0x05 常用命令

docker pull
docker run -d -p 80:80 --name containername imagename
docker ps
docker stop containername
docker restart containername
socker exec -it containername

0x06 加速理解

其实Docker三个重要的命令是
docker build
docker pull
docker run
第一个是通过DockerFile生成一个镜像,
第二个从网上爬取镜像
最后一个是启动一个容器实例。
其他的都是辅助。