Docker容器——课件提要


这节课是简单的docker原理介绍以及具体操作

接下来几节课(其他大鸽)会循序渐进(也许吧)带大家深入

引入

让我们先来探讨两个问题

  • Docker 容器有自己的kernel吗
  • docker的kernel version由镜像确定还是由宿主机确定

虚拟机

先来理解一下虚拟机概念,广义来说,虚拟机是一种模拟系统,即在软件层面上通过模拟硬件的输入和输出,让虚拟机的操作系统得以运行在没有物理硬件的环境中(也就是宿主机的操作系统上),其中能够模拟出硬件输入输出,让虚拟机的操作系统可以启动起来的程序,被叫做hypervisor,也叫VMM。用一张图来说明这个关系就是:

img

在这张图中:

  • 物理机被称为宿主机
  • 虚拟机也被称为guest OS
  • 而被hypervisor虚拟出来的硬件被称为虚拟硬件

2 容器

一般来说,虚拟机都会有自己的kernel,自己的硬件,这样虚拟机启动的时候需要先做开机自检,启动kernel,启动用户进程等一系列行为,虽然现在电脑运行速度挺快,但是这一系列检查做下来,也要几十秒,也就是虚拟机需要几十秒来启动。

  • 重新来理解虚拟机的概念,计算机科学家发现其实我们创建虚拟机也不一定需要模拟硬件的输入和输出,假如宿主机和虚拟机他们的kernel是一致的,就不用做硬件输入输出的搬运工了,只需要做kernel输入输出的搬运工即可,为了有别于硬件层面的虚拟机,这种虚拟机被命名为 操作系统层虚拟化:Operating-system-level virtualization 也被叫做容器
  • 让我们来回顾虚拟机的概念,在虚拟机的系统中,虚拟机认为自己有独立的文件系统,进程系统,内存系统,等等一系列,所以为了让容器接近虚拟机,也需要有独立的文件系统,进程系统,内存系统,等等一系列,为了达成这一目的,主机系统采用的办法是:只要隔离容器不让它看到主机的文件系统,进程系统,内存系统,等等一系列,那么容器系统就是一个接近虚拟机的玩意了

至此就可以回答引言提到的两个问题:

容器 vs 虚拟机

img

img

docker 核心技术

  • Namespace 实现了容器的进程,网络,消息,rootfs和主机名的隔离
  • Cgroup实现了对资源配额的限制

docker文件系统

img

实操docker

安装docker

apt update

apt install docker.io

docker -v查看是否安装成功

docker search

搜索镜像

hello world

docker search hello

docker run hello-world

整一个nginx

docker search nginx

docker pull nginx

docker run -p 11451:80 --name nginx114514 -v /data/conf/nginx.conf:/etc/nginx/nginx.conf nginx

注意 挂载得先在宿主机创建相应的文件夹/文件

OPTIONS说明:

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -p: 端口映射,格式为:主机(宿主)端口:容器端口
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • --name="nginx-lb": 为容器指定一个名称;
  • --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
  • --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
  • -h "mars": 指定容器的hostname;
  • -e username="ritchie": 设置环境变量;
  • --env-file=[]: 从指定文件读入环境变量;
  • --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
  • -m :设置容器使用内存最大值;
  • --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
  • --link=[]: 添加链接到另一个容器;
  • --expose=[]: 开放一个端口或一组端口;
  • -v: 挂载容器文件到本地文件 格式:宿主机文件夹/文件:容器文件夹:文件

修改镜像

docker exec -it <container ID> /bin/bash

开始修改

ctrl+D退出

提交上传

首先 到https://hub.docker.com 申请一个账号

当然国内docker平台也是可以的 反正我vps

docker login

docker commit <container ID> username/reponame

docker push username/reponame:tag

测试镜像

docker pull 刚刚的镜像

RUSH B!

后续

接下去,关于虚拟化技术,我们(应该)会更深入的讲容器/虚拟机的原理,DockerFile,docker-compose的使用,以及lxc,lxd的使用,然后是配网卡,iptables等等,等大鸽们填坑.

声明:ITanger|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Docker容器——课件提要


Carpe Diem and Do what I like