容器的发展史:

1)chroot技术
chroot,即change root directory(更改 root 目录),在 linux 系统中,系统默认的目录结构都是以`/`,即是以根 (root) 开始的,而在使用chroot之后,系统的目录结构将以指定的位置作为`/`位置

2)lxc容器
全称:linux container,通过namespaces 命名空间实现的隔离环境,通过cgroups实现的资源限制,提供类似虚拟机一样的体验。

3)docker容器
早期的docker容器底层就是调用的lxc,后期才换成了自己的libcontainer

docker容器是什么?

Docker是通过内核虚拟化技术(namespaces及cgroups)来提供容器的资源隔离与资源限制。由于Docker通过操作系统层的虚拟化实现隔离(对操作系统的内核有要求),所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,从而比kvm虚拟机更轻量。

docker是一种软件的打包技术。

docker是一个cs架构:通过docker version来查看

docker最重要的三大组件:镜像,容器,仓库

docker的安装

yum源配置:

rm -fr  /etc/yum.repos.d/local.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo

安装docker-ce:
yum install docker-ce -y

配置docker镜像加速

镜像加速器:阿里云加速器,daocloud加速器,中科大加速器,Docker 中国官方镜像加速:https://registry.docker-cn.com

vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

systemctl  restart docker

容器常见命令

启动docker

systemctl start docker
systemctl enable docker
docker run -d -p 80:80  nginx

解释:
run    (创建并运行一个容器)
-d        放在后台
-p        端口映射
nginx  docker镜像的名字

搜索镜像:docker search

获取镜像: docker pull(push)

docker pull centos:6.8(没有指定版本,默认会下载最新版)
docker pull daocloud.io/huangzhichong/alpine-cn:latest

查询docker镜像所有版本https://hub.docker.com/r/library/

镜像管理

查看镜像  docker images

删除镜像  docker rmi  
例子:      docker image rm centos:latest

导出镜像  docker save  
例子:      docker image save centos > docker-centos7.4.tar.gz

导入镜像  docker load  
例子:      docker image load -i docker-centos7.4.tar.gz

docker run -d -p 80:80 nginx:latest

run             (创建并运行一个容器)
-d                  放在后台
-p                  端口映射
nginx:latest   docker镜像的名字和版本

docker run == docker create  + docker start

容器管理

停止容器   docker stop CONTAINER_ID

杀死容器   docker kill container_name

查看容器列表     docker ps  /  docker ps –a 

删除容器            docker rm

批量删除容器     docker rm -f `docker ps -a -q`
docker run -it --name centos6 centos:6.8 /bin/bash

-it             分配交互式的终端
--name     指定容器的名字
/bin/sh      覆盖容器的初始命令

--cpus       指定cpu的数量
--memory  限定内存的大小
-h              指定容器的主机名

进入容器

目的:排错,调试

方法一:docker exec [OPTIONS] CONTAINER COMMAND [ARG...] 推荐使用
例子:    docker exec -it  容器id或容器名字 /bin/bash

方法二:docker attach [OPTIONS] CONTAINER
例子:    docker attach  容器id或容器名字,缺点是多个登录窗口使用同一个终端,两边的内容操作会保持一致 

方法三:nsenter (安装yum install -y util-linux 弃用)

docker的本质是:

在隔离的环境运行的一个进程,所以:docker容器内的第一个进程必须一直处于前台运行的状态(必须夯住),否则这个容器,就会处于退出状态!