前言
Docker这东西其实说挺常用是挺常用,但是一旦不用就会有一段时间都不会去用,导致学了忘,然后再学一次,加上Docker可能更多是学习Linux吧,Docker本身并不是那么难,但是很多东西用不到导致每次都用不熟,这里也就记录下关于Docker的一些东西。
一些注释
这里对Docker常见的内容就不做过多描述了。
其次,由于Docker其实需要Linux很多相关的知识,比如网络,文件系统等等,这方面也不过多描述了。
Docker版本
Docker有3个版本
Docker Engine - Community(CE) | Docker Engine - Enterprise(EE) | Docker Enterprise |
---|---|---|
开源 | 闭源,商业产品 | 更贵的闭源,商业产品 |
Docker Concepts
Docker是一个用容器来开发,部署,运行运营程序的平台
Image(镜像)
Docker通过Dockerfile创建Image,在通过Image(镜像)制造Container(容器)
其中Image和Container的关系类似与面向对象的类与实例
那么具体什么是镜像,镜像里面包含了运行你的程序所需要的环境,代码,库,配置文件等等,所以镜像不单单只是环境。
镜像命名
镜像名:TAG
,例如:ubuntu:18.04
Container(容器)
Container(容器)也就是Image的一个实例,相当于Image创建出了一台服务器。因为单纯的Image只是一些文件罢了。
命名空间
之所以说Container相当于一台服务器,那么它如何和主机进行区分?那就是通过命名空间。每个容器都有自己单独的命名空间。这些隔离会影响容器内部的系统调用
pid
命名空间:容器之间进程的隔离net
命名空间:容器之间网络的隔离ipc
命名空间:容器之间信号,消息队列,共享内存等的隔离mnt
命名空间:容器之间文件挂载的隔离uts
命名空间:可以使每个容器在网络上看起来相当于一个独立的节点,而不是一个进程user
命名空间:容器之间用户的隔离
洋葱文件系统
洋葱文件系统(Union file systems),也叫做UnionFS,简单的说也就是一层一层的文件系统,比如第一层是linux基础,第二层是Ubuntu,第三层是Python,这样就构成了一个可以运行python的3层的有ubuntu环境的系统。
Control groups(控制组)
控制组也称CGroups,通过它,我们可以对一些共享资源进行限制,比如:CPU,内存,这样每个容器可以合理的分配的这些资源。
Container format(容器格式)
命名空间,洋葱文件系统,控制组组合起来称为容器格式。
network(网络)
既然上面说明每个容器都相当于一台服务器,那么肯定就有要配置网络的部分啦,这部分需要你自己有网络方面知识的基础。
Docker的网络大概可以分为2种关系
- 主机 - 容器
- 容器 - 容器
Docker的网络构架叫做Container Networking Model (CNM)
- SandBox(网络沙盒):包含了这个网络的全部配置,例如:路由表、DNS服务器…
- Network:抽象网络(implementation of a Network),比如以下:
- none
- host:和主机共用一个网络环境
- bridge:Linux虚拟网络(桥)
- overlay
- macvlan
- flannel
- …
- Endpoint:链接Network和SandBox,一端在容器中,另一端在network中。
指令
容器相关
创建·运行
1 | # 创建容器 |
运行·停止·重启
1 | docker start [OPTIONS] CONTAINER [CONTAINER] |
在指定容器中执行指令
1 | docker exec [OPTIONS] CONTAINER COMMAND [ARGS] |
向容器发送信号
1 | docker kill [OPTIONS] CONTAINER [CONTAINER] |
删除
1 | docker rm [OPTIONS] CONTAINER [CONTAINER] |
暂停
1 | # 暂停容器所有进程 |
列出容器
1 | # 列出容器列表 |
连接容器
1 | docker attach [OPTIONS] CONTAINER |
所有容器事件
1 | docker events [OPTIONS] |
容器进程
1 | docker top [OPTIONS] CONTAINER [OPTIONS] |
容器日志
1 | docker logs [OPTIONS] CONTAINER |
容器阻塞
1 | docker wait [OPTIONS] CONTAINER [CONTAINER] |
更多可自行运行docker
指令查看
容器策略更新
1 | docker update [OPTIONS] CONTAINER [CONTAINER...] |
镜像相关
1 | Usage: docker image COMMAND |
Dockerfile
1 | # 复制文件 |
总结
Docker其实简单来说就是对
- 容器的操作·管理
- 对镜像的管理·创建
- Dockerfile的编写
以此为中心进行理解的话,就会方便很多。