这可能是最为详细的Docker入门吐血总结(中)

简介: 这可能是最为详细的Docker入门吐血总结

安装Docker

Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装 docker,只需要运行下面的 yum 命令

$ sudo yum install docker

当然在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS 系统上可以使用这套脚本安装:

curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh

具体可以参看 docker-install 的脚本:

https://github.com/docker/docker-install

执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker CEEdge 版本安装在系统中。

安装完成后,运行下面的命令,验证是否安装成功:

docker version
or
docker info

返回docker的版本相关信息,证明 docker 安装成功

1100338-20181011200342486-1791743202.png


启动Docker-CE

$ sudo systemctl enable docker
$ sudo systemctl start docker

Docker的简单运用---Hello World

由于服务器日常崩溃了, docker 出了点问题,所以以下案例的演示是基于 Kali Linux 环境下进行的。

我们通过最简单的 image 文件 hello world,感受一下 Docker 的魅力吧!

我们直接运行下面的命令,将名为 hello-worldimage 文件从仓库抓取到本地。

docker pull library/hello-world

docker pull images 是抓取 image 文件, library/hello-worldimage 文件在仓库里面的位置,其中 libraryimage 文件所在的组, hello-worldimage 文件的名字。


1100338-20181011200342100-457982713.png

抓取成功以后,就可以在本机看到这个 image 文件了。

docker images

我们可以看到如下结果:


1100338-20181011200341767-414070160.png


现在,我们可以运行 hello-world 这个 image 文件

docker run hello-world

我们可以看到如下结果:


1100338-20181011200341270-1701862326.png


输出这段提示以后,hello world 就会停止运行,容器自动终止。有些容器不会自动终止,因为提供的是服务,比如Mysql镜像等。


是不是很 easy 呢?我们从上面可以看出, docker 的功能是十分强大的,除此之外,我们还可以拉去一些 UbuntuApache 等镜像,在未来的教程中我们将会一一提到。


Docker 提供了一套简单实用的命令来创建和更新镜像,我们可以通过网络直接下载一个已经创建好了的应用镜像,并通过 Docker RUN 命令就可以直接使用。当镜像通过 RUN 命令运行成功后,这个运行的镜像就是一个 Docker 容器啦,容器可以理解为一个轻量级的沙箱, Docker 利用容器来运行和隔离应用,容器是可以被启动、停止、删除的,这并不会影响 Docker 镜像。


我们可以看看下面这幅图:

1100338-20181011200340694-1202370283.png

Docker 客户端是 Docker 用户与 Docker 交互的主要方式。当您使用 docker 命令行运行命令时, Docker 客户端将这些命令发送给服务器端,服务端将执行这些命令。 docker 命令使用 docker APIDocker 客户端可以与多个服务端进行通信。

我们将剖析一下 Docker 容器是如何工作的,学习好Docker容器工作的原理,我们就可以自己去管理我们的容器了。

Docker架构

在上面的学习中,我们简单地讲解了Docker的基本架构。了解到了Docker 使用的是 C/S 结构,即客户端/服务器体系结构。明白了 Docker 客户端与 Docker 服务器进行交互时, Docker 服务端负责构建、运行和分发 Docker 镜像。 也知道了Docker 客户端和服务端可以运行在一台机器上,可以通过 RESTfulstock 或网络接口与远程 Docker 服务端进行通信。

我们从下图可以很直观的了解到Docker的架构:


1100338-20181012214103608-969706945.png


Docker 的核心组件包括:

  1. Docker Client
  2. Docker daemon
  3. Docker Image
  4. Docker Registry
  5. Docker Container

Docker 采用的是 Client/Server 架构。客户端向服务器发送请求,服务器负责构建、运行和分发容器。客户端和服务器可以运行在同一个 Host 上,客户端也可以通过 socketREST API 与远程的服务器通信。可能很多朋友暂时不太理解一些东西,比如 REST API 是什么东西等,不过没关系,在后面的文章中会一一给大家讲解清楚。

Docker Client

Docker Client ,也称 Docker 客户端。它其实就是 Docker 提供命令行界面 (CLI) 工具,是许多 Docker 用户与 Docker 进行交互的主要方式。客户端可以构建,运行和停止应用程序,还可以远程与Docker_Host进行交互。最常用的 Docker 客户端就是 docker 命令,我们可以通过 docker 命令很方便地在 host 上构建和运行 docker 容器。


1100338-20181012214102869-1003920118.png

Docker daemon

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


image.png


我们大致可以将其分为以下三部分:

  • Docker Server
  • Engine
  • Job

Docker Daemon的架构如下所示:


1100338-20181012214101184-1339527466.jpg



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

运行过程的作用有以下几种可能:

  • Docker Registry 获取镜像
  • 通过 graphdriver 执行容器镜像的本地化操作
  • 通过 networkdriver 执行容器网络环境的配置
  • 通过 execdriver 执行容器内部运行的执行工作

由于 Docker DaemonDocker Client 的启动都是通过可执行文件 docker 来完成的,因此两者的启动流程非常相似。 Docker 可执行文件运行时,运行代码通过不同的命令行 flag 参数,区分两者,并最终运行两者各自相应的部分。

启动 Docker Daemon 时,一般可以使用以下命令来完成

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

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

下图可以很直观地看到 Docker Daemon 的启动流程:


1100338-20181012214100787-426925315.jpg

默认配置下, Docker daemon 只能响应来自本地 Host 的客户端请求。如果要允许远程客户端请求,需要在配置文件中打开 TCP 监听。我们可以照着如下步骤进行配置:

1、编辑配置文件 /etc/systemd/system/multi-user.target.wants/docker.service ,在环境变量 ExecStart 后面添加 -H tcp://0.0.0.0,允许来自任意 IP 的客户端连接。

1100338-20181012214100440-905260954.jpg


2、重启 Docker daemon

systemctl daemon-reload
systemctl restart docker.service

3、我们通过以下命令即可实现与远程服务器通信

docker -H 服务器IP地址 info

-H 是用来指定服务器主机, info 子命令用于查看 Docker 服务器的信息

Docker Image

Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。我们可将 Docker 镜像看成只读模板,通过它可以创建 Docker 容器。

镜像有多种生成方法:

  1. 从无到有开始创建镜像
  2. 下载并使用别人创建好的现成的镜像
  3. 在现有镜像上创建新的镜像

我们可以将镜像的内容和创建步骤描述在一个文本文件中,这个文件被称作 Dockerfile ,通过执行 docker build <docker-file> 命令可以构建出 Docker 镜像,在后续的教程中,我们会用一篇专门讨论这个问题。

Docker Registry

Docker registry 是存储 docker image 的仓库,它在 docker 生态环境中的位置如下图所示:



1100338-20181012214100277-775657574.jpg


运行docker pushdocker pulldocker search时,实际上是通过 docker daemondocker registry通信。

Docker Container

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

Docker组件是如何协作运行容器

看到这里,我相信各位读者朋友们应该已经对Docker基础架构已经熟悉的差不多了,我们还记得运行的第一个容器吗?现在我们再通过hello-world这个例子来体会一下 Docker 各个组件是如何协作的。

容器启动过程如下:

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

具体过程可以看如下这幅演示图:


1100338-20181012214059835-734054348.png

我们可以通过docker images 可以查看到 hello-world 已经下载到本地

1100338-20181012214059170-1387452245.png


我们可以通过docker ps 或者 docker container ls 显示正在运行的容器,我们可以看到, hello-world在输出提示信息以后就会停止运行,容器自动终止,所以我们在查看的时候没有发现有容器在运行。

1100338-20181012214058803-1594502697.png

我们把 Docker 容器的工作流程剖析的十分清楚了,我们大体可以知道 Docker 组件协作运行容器可以分为以下几个过程:

  1. Docker 客户端执行 docker run 命令
  2. Docker daemon 发现本地没有我们需要的镜像
  3. daemonDocker Hub 下载镜像
  4. 下载完成后,镜像被保存到本地
  5. Docker daemon 启动容器

了解了这些过程以后,我们再来理解这些命令就不会觉得很突兀了,下面我来给大家讲讲 Docker 常用的一些命令操作吧。

目录
相关文章
|
1月前
|
关系型数据库 MySQL Java
Docker Compose详细教程(从入门到放弃)
Docker Compose详细教程(从入门到放弃)
188 0
|
4天前
|
监控 Docker 容器
Docker从入门到精通:Docker log 命令学习
了解 Docker 日志管理对容器监控至关重要。`docker logs` 命令用于查看和管理容器日志,例如,`docker logs &lt;container_name&gt;` 显示容器日志,`-f` 或 `--follow` 实时跟踪日志,`--tail` 显示指定行数,`--timestamps` 添加时间戳,`--since` 按日期筛选。Docker 支持多种日志驱动,如 `syslog`,可通过 `--log-driver` 配置。有效管理日志能提升应用程序的稳定性和可维护性。
7 0
|
8天前
|
机器学习/深度学习 数据挖掘 Docker
《Docker 简易速速上手小册》第1章 Docker 基础入门(2024 最新版)
《Docker 简易速速上手小册》第1章 Docker 基础入门(2024 最新版)
21 1
|
16天前
|
存储 Ubuntu 关系型数据库
Docker从入门到精通:ubuntu系统安装docker
本文介绍了Docker的安装过程。首先,文章简述了Docker的组成部分:镜像(如模板用于创建容器服务)、容器(运行应用的独立实体)和仓库(存储镜像的库)。接着,针对Ubuntu系统,详细阐述了卸载旧版本Docker、更新软件包、安装依赖、添加Docker官方GPG密钥和软件源、安装Docker以及配置用户组的步骤。最后,通过启动Docker、验证安装是否成功(运行`hello-world`镜像)和查看Docker版本来确认安装完成。
53 12
|
24天前
|
Ubuntu Linux Shell
docker学习笔记3,从入门到精通
docker学习笔记3,从入门到精通
|
24天前
|
应用服务中间件 Shell nginx
docker学习笔记2,入门到精通
docker学习笔记2,入门到精通
|
24天前
|
Ubuntu 网络协议 Docker
docker学习笔记1,入门到精通
docker学习笔记1,入门到精通
|
2月前
|
Java Linux Docker
Docker入门到实战
Docker入门到实战、Centos7安装Docker
|
2月前
|
IDE 数据中心 Docker
使用PyCharm与Docker容器进行开发:从入门到精通
使用PyCharm与Docker容器进行开发:从入门到精通
361 0
|
2月前
|
消息中间件 RocketMQ Docker
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)
53 0