C/S架构:
Docker Client: 发起docker相关的请求;
Docker Server: 容器运行的节点;
核心组件:
docker client:docker的客户端工具,是用户使用docker的主要接口,docker client与docker daemon通信并将结果返回给用户;
docker deamon:运行于宿主机上,Docker守护进程,用户可通过docker client与其交互;
image:镜像文件是只读的;用来创建container,一个镜像可以运行多个container;镜像文件可以通过Dockerfile文件创建,也可以从公共仓库docker hub/registry下载;
repository
公共仓库:Docker hub/registry
私有仓库:docker registry
docker container:docker的运行实例,容器是一个隔离环境;
Docker Images
About Docker Images
Docker镜像含有启动容器所需要的文件系统及其内容,因此,其用于创建并启动docker容器;
采用分层构建机制,最底层为bootfs,其之为rootfs
bootfs:用于系统引导的文件系统,包括bootloader和kernel,容器启动完 成后会被卸载以节约内存资源;
rootfs:位于bootfs之上,表现为docker容器的根文件系统;
传统模式中,系统启动之时,内核挂载rootfs时会首先将其挂载为“只读”模式, 完整性自检完成后将其重新挂载为读写模式; docker中,rootfs由内核挂载为“只读”模式,而后通过“联合挂载 ”技术额外挂 载一个“可写”层。
Docker Image Layer
位于下层的镜像称为父镜像(parent image),最底层的称为基础 镜像(base image) v 最上层为“可读写”层,其下的均为“只读”层。
Aufs
advanced multi-layered unification filesystem:高级多层统一文件系统
用于为Linux文件系统实现“联合挂载”
aufs是之前的UnionFS的重新实现,2006年由Junjiro Okajima开发;
Docker最初使用aufs作为容器文件系统层,它目前仍作为存储后端之 一来支持;
aufs的竞争产品是overlayfs,后者自从3.18版本开始被合并到Linux内 核;
docker的分层镜像,除了aufs,docker还支持btrfs, devicemapper和vfs 等
在Ubuntu系统下,docker默认Ubuntu的 aufs;而在CentOS7上,用的是 devicemapper
Devicemapper
Device Mapper 是 Linux2.6 内核中支持逻辑卷管理的通用设备 映射机制,它为实现用于存储资源管理的块设备驱动提供了一 个高度模块化的内核架构
在内核中它通过一个一个模块化的 target driver 插件实现对 IO 请求的过滤或者重新定向等工作,当前已经实现的 target driver 插件包括软 raid、软加密、逻辑卷条带、多路径、镜像、快照 等;
[root@node5 ~]# docker login -u wangjinhuai
Password:
Login Succeeded
[root@node5 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos/nginx v0.1.0 3c6bc6ca3188 19 minutes ago 314 MB
docker.io/container/httpd v0.1.0 7bfc3c50a470 31 minutes ago 305 MB
docker.io/centos latest 1e1148e4cc2c 13 days ago 202 MB
docker.io/busybox latest 59788edf1f3e 2 months ago 1.15 MB
[root@node5 ~]# docker tag docker.io/busybox:latest docker.io/wangjinhuai/busybox:v0.1.0
[root@node5 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos/nginx v0.1.0 3c6bc6ca3188 26 minutes ago 314 MB
docker.io/container/httpd v0.1.0 7bfc3c50a470 37 minutes ago 305 MB
docker.io/centos latest 1e1148e4cc2c 13 days ago 202 MB
docker.io/busybox latest 59788edf1f3e 2 months ago 1.15 MB
docker.io/wangjinhuai/busybox v0.1.0 59788edf1f3e 2 months ago 1.15 MB
[root@node5 ~]# docker push docker.io/wangjinhuai/busybox:v0.1.0
The push refers to a repository [docker.io/wangjinhuai/busybox]
8a788232037e: Mounted from library/busybox
Head https://registry-1.docker.io/v2/wangjinhuai/busybox/blobs/sha256:59788edf1f3e78cd0ebe6ce1446e9d10788225db3dedcfd1a59f764bad2b2690: dial tcp 69.172.201.153:443: getsockopt: connection refused
[root@node5 ~]# docker push docker.io/wangjinhuai/busybox:v0.1.0
The push refers to a repository [docker.io/wangjinhuai/busybox]
8a788232037e: Layer already exists
v0.1.0: digest: sha256:915f390a8912e16d4beb8689720a17348f3f6d1a7b659697df850ab625ea29d5 size: 527
[root@node5 ~]# docker pull docker.io/wangjinhuai/busybox:v0.1.0
[root@node5 ~]# docker images
[root@node5 ~]# docker run --name b1 -it docker.io/wangjinhuai/busybox:v0.1.0
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:06
inet addr:172.17.0.6 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe11:6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:508 (508.0 B) TX bytes:508 (508.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
/ # mkdir /var/www/html
/ # vi /var/www/html/index.html
<h1>Test Server</h1>
/ # httpd -h /var/www/html/
/ # netstat -tunl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 :::80 :::* LISTEN
/ #
客户端测试:
[root@node5 ~]# curl http://172.17.0.6
<h1>Test Server</h1>
[root@node5 ~]#
/ # ps
PID USER TIME COMMAND
1 root 0:00 sh
11 root 0:00 httpd -h /var/www/html/
15 root 0:00 ps
/ # kill 11
/ # ps
PID USER TIME COMMAND
1 root 0:00 sh
16 root 0:00 ps