- 容器化和 Docker 简介
- 初识 Docker - 介绍 Docker 基本知识
- Docker 容器操作基础知识
- 2e7ef5098bab92f4536eb9a372d9b99ed852a9a816c341127399f51a6d053856
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 2e7ef5098bab fhsinchy/hello-dock “/docker-entrypoint.…” 30 seconds ago Created hello-dock
- hello-dock
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 2e7ef5098bab fhsinchy/hello-dock “/docker-entrypoint.…” About a minute ago Up 29 seconds 0.0.0.0:8080->80/tcp hello-dock
容器化和 Docker 简介
容器化意味着封装或打包软件代码及其所有依赖项,以便它可以在任何基础架构上统一且一致地运行。
版本查看
docker —version docker-compose —version
初识 Docker - 介绍 Docker 基本知识
运行第一个容器
docker run hello-world
# Unable to find image 'hello-world:latest' locally
# latest: Pulling from library/hello-world
# 0e03bdcc26d7: Pull complete
# Digest: sha256:4cf9c47f86df71d48364001ede3a4fcd85ae80ce02ebad74156906caff5378bc
# Status: Downloaded newer image for hello-world:latest
#
# Hello from Docker!
# This message shows that your installation appears to be working correctly.
#
# To generate this message, Docker took the following steps:
# 1. The Docker client contacted the Docker daemon.
# 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
# (amd64)
# 3. The Docker daemon created a new container from that image which runs the
# executable that produces the output you are currently reading.
# 4. The Docker daemon streamed that output to the Docker client, which sent it
# to your terminal.
#
# To try something more ambitious, you can run an Ubuntu container with:
# $ docker run -it ubuntu bash
#
# Share images, automate workflows, and more with a free Docker ID:
# https://hub.docker.com/
#
# For more examples and ideas, visit:
# https://docs.docker.com/get-started/
hello-world 镜像是使用 Docker 进行最小化容器化的一个示例。它有一个从 hello.c 文件编译的程序,负责打印出终端看到的消息。
现在,在终端中,可以使用 docker ps -a
命令查看当前正在运行或过去运行的所有容器:
docker ps -a
# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 128ec8ceab71 hello-world "/hello" 14 seconds ago Exited (0) 13 seconds ago exciting_chebyshev
在输出中,使用 hello-world 镜像运行了名为 exciting_chebyshev 的容器,其容器标识为 128ec8ceab71。它已经在 Exited (0) 13 seconds ago,其中 (0) 退出代码表示在容器运行时未发生任何错误。
Docker 体系结构和三个非常基本的容器化概念,如下所示:
什么是 Docker 镜像?
镜像是分层的自包含文件,充当创建容器的模板。它们就像容器的冻结只读副本。 镜像可以通过仓库进行共享。
什么是仓库?
镜像仓库是一个集中式的位置,可以在其中上传镜像,也可以下载其他人创建的镜像。 Docker Hub 是 Docker 的默认公共仓库。另一个非常流行的镜像仓库是 Red Hat 的 Quay。 除了 Docker Hub 或 Quay,还可以创建自己的镜像仓库来托管私有镜像。计算机中还运行着一个本地仓库,该仓库缓存从远程仓库提取的镜像。
Docker 架构概述
既然已经熟悉了有关容器化和 Docker 的大多数基本概念,那么现在是时候了解 Docker 作为软件的架构了。
该引擎包括三个主要组件:
- Docker 守护程序: 守护程序(dockerd)是一个始终在后台运行并等待来自客户端的命令的进程。守护程序能够管理各种 Docker 对象。
- Docker 客户端: 客户端(docker)是一个命令行界面程序,主要负责传输用户发出的命令。
- REST API: REST API 充当守护程序和客户端之间的桥梁。使用客户端发出的任何命令都将通过 API 传递,最终到达守护程序。
根据官方文档,
“ Docker 使用客户端-服务器体系结构。Docker client 与 Docker daemon 对话,daemon 繁重地构建、运行和分发 Docker 容器”。
作为用户,通常将使用客户端组件执行命令。然后,客户端使用 REST API 来访问长期运行的守护程序并完成工作。
全景图
好吧,说的够多了。 现在是时候了解刚刚学习的所有这些知识如何和谐地工作了。在深入解释运行 docker run hello-world 命令时实际发生的情况之前,看一下下面的图片:
该图像是在官方文档中找到的图像的略微修改版本。 执行命令时发生的事件如下:
- 执行 docker run hello-world 命令,其中 hello-world 是镜像的名称。
- Docker 客户端访问守护程序,告诉它获取 hello-world 镜像并从中运行一个容器。
- Docker 守护程序在本地仓库中查找镜像,并发现它不存在,所以在终端上打印 Unable to find image ‘hello-world:latest’ locally。
- 然后,守护程序访问默认的公共仓库 Docker Hub,拉取 hello-world 镜像的最新副本,并在命令行中展示 Unable to find image ‘hello-world:latest’ locally。
- Docker 守护程序根据新拉取的镜像创建一个新容器。
- 最后,Docker 守护程序运行使用 hello-world 镜像创建的容器,该镜像在终端上输出文本。
Docker 守护程序的默认行为是在 hub 中查找本地不存在的镜像。但是,拉取了镜像之后,它将保留在本地缓存中。因此,如果再次执行该命令,则在输出中将看不到以下几行:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9
Status: Downloaded newer image for hello-world:latest
如果公共仓库中有可用镜像的更新版本,则守护程序将再次拉取该镜像。那个 :latest 是一个标记。镜像通常包含有意义的标记以指示版本或内部版本。
Docker 容器操作基础知识
怎样运行容器
1.13版本之前,通用语法:docker run 1.13版本之后,命令行重构后语法:docker