Docker入门(二)

Docker的安装与使用

Docker 有两个主要的版本:Community Edition(CE)和 Enterprise Edition(EE
CE 即社区版(免费,支持周期 7 个月), EE 即企业版,(强调安全,付费使用,支持周期 24 个月)

获取docker最新支持

  • 卸载旧版本docker
$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
  • 安装依赖包
$ sudo yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2
  • 安装Docker
$ sudo yum install docker

curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh
  • 查看是否安装成功
docker version
or
docker info
  • 启动Docker-CE
sudo systemctl enable docker
sudo systemctl start docker

###例子

  1. 拉取镜像

    docker pull library/hello-world
    或
    docker pull hello-world
    

    这里libraryimage 文件所在的组, hello-worldimage 文件的名字

  2. 之后可以看到拉取的镜像

    docker images
    
  3. 可以运行 hello-world 这个 image 文件

    docker run hello-world
    

hello-world运行后就会停止运行,容器自动终止。有些容器不会自动终止,因为提供的是服务,比如Mysql,Redis镜像
我们可以通过网络直接下载一个已经创建好了的应用镜像,并通过 Docker RUN 命令就可以直接使用。当镜像通过 RUN 命令运行成功后,这个运行的镜像就是一个 Docker 容器啦,容器可以理解为一个轻量级的沙箱, Docker 利用容器来运行和隔离应用,容器是可以被启动、停止、删除的,这并不会影响 Docker 镜像。

容器启动过程如下:

  • Docker 客户端执行 docker run 命令
  • Docker daemon 发现本地没有 hello-world 镜像
  • daemon 从 Docker Hub 下载镜像
  • 下载完成,镜像 hello-world 被保存到本地
  • Docker daemon 启动容器
    c5d60c60f5824f058e71f016d227e71f

Docker的核心组件

  • Docker Daemon
  • Docker Client
  • Docker Images
  • Docker Registry
  • Docker Container

Docker Daemon(守护进程)

Docker Daemon(守护进程),也称为Docker引擎,是Docker的后台服务,它是Docker架构中的核心组件。它负责响应来自 Docker Client 的请求,然后将这些请求翻译成系统调用完成容器管理操作。该进程会在后台启动一个 API Server ,负责接收由 Docker Client 发送的请求,接收到的请求将通过Docker daemon 内部的一个路由分发调度,由具体的函数来执行请求。

大致来说Docker Daemon可分为以下几部分

  • Docker Server
  • Engine
  • Job

Docker Daemon 可以认为是通过 Docker Server 模块接受 Docker Client 的请求,并在 Engine 中处理请求,然后根据请求类型,创建出指定的 Job 并运行。 Docker Daemon 运行在 Docker host 上,负责创建、运行、监控容器,构建、存储镜像。

启动 Docker Daemon

docker --daemon = true
docker –d
docker –d = true

命令通过dockermain() 函数来解析以上命令的相应 flag 参数,并最终完成 Docker Daemon 的启动

这里的话只能通过本地的host才能请求,如果需要远程客户端请求则需要有些修改如下

  1. 编辑配置文件 /etc/systemd/system/multi-user.target.wants/docker.service ,在环境变量 ExecStart后面添加 -H tcp://0.0.0.0,允许来自任意 IP 的客户端连接
  2. 重启并通信
systemctl daemon-reload
或
systemctl restart docker.service
docker -H 服务器IP地址 info

Docker Client

Docker客户端是用户与Docker守护进程交互的主要方式,它通过命令行接口发送命令给Docker守护进程。用户可以在本地或远程使用Docker客户端

Docker Image

Docker镜像是一个只读的模板,包含了运行容器所需的指令。镜像用于创建Docker容器,通常一个镜像包含了运行一个应用所需的所有内容——代码、运行时、库、环境变量和配置文件。镜像不包含任何动态数据,其内容在构建之后也不会被改变
我们可以将镜像的内容和创建步骤描述在一个文本文件中,这个文件被称作 Dockerfile ,通过执行 docker build 命令可以构建出 Docker 镜像

Docker Registry

Docker registry 是存储 docker image 的仓库.运行docker push、docker pull、docker search时,实际上是通过 docker daemon 与 docker registry 通信

Docker Container

Docker 容器就是 Docker 镜像的运行实例,是真正运行项目程序、消耗系统资源、提供服务的地方。 Docker Container 提供了系统硬件环境,我们可以使用 Docker Images 这些制作好的系统盘,再加上我们所编写好的项目代码, run 一下就可以提供服务啦。