docker 系列(二) - docker的核心组件

整体架构

整体架构

由图可知,docker整体分为三个部分:

  1. docker客户端(client)
  2. docker服务器(host)= 守护进程(Docker daemon)+ 容器(Container )+ 镜像(Images)
  3. 仓库(registry)

客户端

一个负责接收用户输入,并且把输入传给docker daemon的工具,类似于我们的redis客户端等。常见的docker客户端就是docker命令,除了docker命令,还可以用rest api和服务器交流。

Docker daemon

Docker daemon是Linux上的一个服务,它负责创建、运行、监控容器,构建、存储镜像。

  1. 启动
    systemctl start docker
  2. 关闭
    systemctl stop docker
  3. 查看状态
    systemctl status docker
[root@VM_90_159_centos _data]# systemctl status docker
docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2018-10-20 15:10:05 CST; 19s ago
     Docs: https://docs.docker.com
 Main PID: 14970 (dockerd)
    Tasks: 41
   Memory: 68.4M
   CGroup: /system.slice/docker.service
           14970 /usr/bin/dockerd
           14976 docker-containerd --config /var/run/docker/containerd/containerd.toml

Oct 20 15:10:05 VM_90_159_centos dockerd[14970]: time="2018-10-20T15:10:05.277903374+08:00" level=info msg="pickfirstBalancer: HandleSubConnStateChange: 0xc42017feb0, CONNECTING" module=grpc
Oct 20 15:10:05 VM_90_159_centos dockerd[14970]: time="2018-10-20T15:10:05.278102871+08:00" level=info msg="pickfirstBalancer: HandleSubConnStateChange: 0xc42017feb0, READY" module=grpc
Oct 20 15:10:05 VM_90_159_centos dockerd[14970]: time="2018-10-20T15:10:05.278126340+08:00" level=info msg="Loading containers: start."
Oct 20 15:10:05 VM_90_159_centos dockerd[14970]: time="2018-10-20T15:10:05.655354379+08:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to set a preferred IP address"
Oct 20 15:10:05 VM_90_159_centos dockerd[14970]: time="2018-10-20T15:10:05.748168307+08:00" level=info msg="Loading containers: done."
Oct 20 15:10:05 VM_90_159_centos dockerd[14970]: time="2018-10-20T15:10:05.758837605+08:00" level=info msg="Docker daemon" commit=e68fc7a graphdriver(s)=devicemapper version=18.06.1-ce
Oct 20 15:10:05 VM_90_159_centos dockerd[14970]: time="2018-10-20T15:10:05.759869686+08:00" level=info msg="Daemon has completed initialization"
Oct 20 15:10:05 VM_90_159_centos dockerd[14970]: time="2018-10-20T15:10:05.764327185+08:00" level=warning msg="Could not register builder git source: failed to find git binary: exec: \"git\": executable file not found in $PATH"
Oct 20 15:10:05 VM_90_159_centos systemd[1]: Started Docker Application Container Engine.
Oct 20 15:10:05 VM_90_159_centos dockerd[14970]: time="2018-10-20T15:10:05.798973361+08:00" level=info msg="API listen on /var/run/docker.sock"

镜像

类似于重装系统中的ISO或者ghost文件,通过这个文件我们可以重装很多系统;同样的docker中的镜像也是系统(可能少了内核)和一些软件或者服务的结合体,通过镜像我们可以运行很多个容器。
比如某个镜像可能含有一个centos系统,一个redis服务,那么我们可以用这个镜像启动多个容器,这些容器都有redis服务。

镜像的制作
  • 通过编写Dockerfile,利用docker build来构建镜像
  • 在已有镜像启动的容器中,运行各种命令,得到一个新的环境;再通过docker commit把这个环境制作成镜像
容器

docker容器是docker镜像运行的实例;如果把镜像看做是maven的打包阶段,那么容器就是打出来的jar或者war包运行的结果。

仓库(registry)

  • 仓库是存放镜像的地方,我们可以通过仓库找到各种各样别人制作的镜像。
  • 仓库也分为公有仓库和私有仓库。默认的docker仓库就是公有仓库,Docker Hub(https://hub.docker.com/),它由Docker公司维护。但是公有仓库访问很慢,为了快速和安全,我们一般还会搭建私人仓库。
命令
  • docker search image-name 查看某个镜像是否存在
  • docker pull image-name 拉取镜像

docker run的整个过程

docker run -d -p 8020:80 httpd

  1. docker客户端接收到该命令并且把它传给Docker daemon
  2. Docker daemo收到命令后,先查找本地仓库是否有httpd的镜像
  3. 如果没有该镜像,它会先从docker register中下载该镜像 (docker images 查看本地镜像)
  4. 服务器运行该镜像 (docker ps/docker container ls 查看本地运行的docker进程)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 用骨血铸就我的生命 用温情与汗水把我养大 把最好的全都给了我 把我装饰成你们一生中 最宝贵的财富 年幼时淘气的我 ...
    荒草_冯权加阅读 163评论 0 2
  • 第一次收到, 那么大的一个快递箱子。
    十八呆阅读 182评论 0 0
  • 当你拿到别人的代码在自己的电脑上运行的时候,有时候会发现用CocoaPods导入的框架报错了,例如AFNetwor...
    zhouios阅读 735评论 0 1
  • 1. 老纪在单位工作三十年,在他工作的科室,他送走了一个又一个领导,也带起一个又一个未来的领导。一些同事特别为老纪...
    袁大岛阅读 437评论 1 1