Docker 实战教程之从入门到提高(一)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: Docker 实战教程之从入门到提高(一)

笔者将自己在云原生开发中的 Kubernetes 工作经验写成了一个系列实战教程:

从本文开始,笔者将开启一个新的系列写作,主题是 Kubernetes 运行的基石之一:Docker 技术。


Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。


这个系列同上面提到的 Kubernetes 实战系列文章一样,分享若干笔者在实际项目中的 Docker 使用案例和经验。

练习1:Ubuntu 系统里 Docker 的安装步骤

由于 Ubuntu 里 apt 官方库里的 docker 版本比较低,因此先用下面的命令行卸载旧版本(如果有的话)

sudo apt-get remove docker docker-engine docker-ce docker.io

更新 apt 包索引:

sudo apt-get update

执行下列命令行,使 apt 可以通过 HTTPS 协议去使用存储库:

sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

添加 Docker 官方提供的 GPG 密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

设置 stable 存储库:

sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”

最后再次更新 apt 包索引:

安装最新版本的 docker-ce:

sudo apt-get install -y docker-ce

安装完毕后,可以看到 Docker 服务已经从 /lib/systemd/system/docker.service 启动了,dockerd 进程 id 为 4921:

命令行 ps -aux 查看进程 id 为 4921 的进程路径:/usr/bin/dockerd -H fd://

使用命令 sudo docker version 可以查看安装 docker 的版本:

使用命令 sudo docker run hello-world,能观察到从远程下载这个测试用的容器:

Pulling from library/hello-world:

然后看到打印消息:Hello from Docker! 说明 Docker 安装成功。

练习2:如何处理 Docker 错误消息 request canceled

在本地安装 Kubernetes 时,遇到错误消息:

request canceled while waiting for connection(Client.Timeout exceeded while awaiting headers)

这个原因是 Docker 应用没有正确设置代理。在 Mac 上设置代理非常方便:

在 Proxies 面板里,选择 Manual proxy configuration, 即手动设置。

设置完之后,点击按钮 Apply & Restart

之后在 shell 里使用命令行 docker pull gcr.io/google_containers/pause-amd64:3.1 可以成功把 Docker 镜像下载到本地。

使用命令 docker images,能够查看到成功安装的镜像:pause-amd64

练习3:如何处理 Docker 错误消息:please add——insecure-registry

本地安装 Kubernetes 时,遇到如下的错误消息:

pleade add --insecure-registry gcr.io to daemon’s arguments

解决方案:点击 Docker 的 Preference 菜单:

点击 Daemon 标签页,在 Insecure registries 里维护记录:

将错误信息里提到的 gcr.io 维护进 Insecure registries, 点击按钮 Apply & Restart, 重新启动Docker Daemon:

之后错误消息消失。本解决方案在 Mac OS 上测试通过。

练习4:从 Hello World 例子学习 Docker 镜像的目录存储设计

我们成功安装完 Docker 后,执行命令行 sudo docker run hello-world, 如果是第一次执行,则会从远程拉取 hello-world 的镜像到本地,然后运行,显示 hello world.

以 ubuntu 系统为例,本地镜像存储于目录 /var/lib/docker 文件夹下:

相关目录介绍如下。

  • /var/lib/dockerker/image/overlay2:存储镜像管理数据的目录,以使用的存储驱动命名,在我的 ubuntu 系统上,使用的驱动为 overlay2。

其中 repositories.json 文件相当于 SAP UI5 里的 manifest.json, 以及 nodejs 项目中的project.json:

  • /var/lib/docker/image/overlay2/distribution$: 从远端拉到本地的镜像相关元数据。

  • /var/lib/docker/image/overlay2/imagedb: 镜像数据库。

  • /var/lib/docker/image/overlay2/imagedb/content:
    每镜像层次的配置 digest, 也就是镜像 ID。content 文件夹里能看到一个 sha256 子文件夹。

进入该子文件夹,会看到一个以镜像 ID 命名的文件,我们用命令行 docker images 看到的镜像 ID 的前 12 位就来自这个文件。

  • /var/lib/docker/image/overlay2/layerdb: 镜像每个 layer 的元数据。

进入 sha256,会看到 layer 的 chain ID:

chain ID 内的内容:

总结

本文首先介绍了 Docker 在 Ubuntu 系统上的安装步骤,然后通过本地安装 Kubernetes 时遇到的两个和 Docker 相关的错误,分享了实际项目中 Docker Proxy 和 Insecure Registry 的设置步骤,最后从 Docker Hello World 级别的入门例子入手,介绍了 Docker 镜像存储目录的设计原理。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
9天前
|
Docker 容器
Docker自建仓库之Harbor高可用部署实战篇
关于如何部署Harbor高可用性的实战教程,涵盖了从单机部署到镜像仓库同步的详细步骤。
41 15
Docker自建仓库之Harbor高可用部署实战篇
|
9天前
|
算法 Linux 调度
Docker的资源限制实战篇
本文详细介绍了如何利用Docker对容器的资源进行限制,包括内存和CPU的使用。文章首先概述了资源限制的重要性及其在Linux系统中的实现原理,并强调了不当设置可能导致的风险。接着,通过一系列实战案例展示了如何具体设置容器的内存限制,包括硬性限制、动态调整以及软限制等。最后,文章还提供了限制容器CPU访问的具体方法和示例,如指定容器使用的CPU核心数和基于`--cpu-shares`参数对CPU资源进行分配。通过这些实践,读者可以更好地理解和掌握Docker资源管理技巧。
38 14
Docker的资源限制实战篇
|
9天前
|
存储 数据管理 应用服务中间件
Docker的数据管理实战篇
关于Docker数据管理实战的教程,涵盖了Docker数据卷的使用、特点、场景以及数据卷容器的概念和应用。
37 13
Docker的数据管理实战篇
|
9天前
|
Ubuntu Linux Docker
Ubuntu 18.04 安装Docker实战案例
关于如何在Ubuntu 18.04系统上安装Docker的实战案例,包括安装步骤、配置镜像加速以及下载和运行Docker镜像的过程。
66 3
Ubuntu 18.04 安装Docker实战案例
|
9天前
|
存储 Linux Docker
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
关于如何在CentOS 7.6上安装Docker、介绍Docker存储引擎以及服务进程关系的实战案例。
47 3
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
|
9天前
|
存储 测试技术 数据安全/隐私保护
Docker自建仓库之Harbor部署实战
关于如何部署和使用Harbor作为Docker企业级私有镜像仓库的详细教程。
30 12
|
6天前
|
Cloud Native 持续交付 Docker
云原生技术实践:Docker容器化部署教程
【9月更文挑战第4天】本文将引导你了解如何利用Docker这一云原生技术的核心工具,实现应用的容器化部署。文章不仅提供了详细的步骤和代码示例,还深入探讨了云原生技术背后的哲学,帮助你理解为何容器化在现代软件开发中变得如此重要,并指导你如何在实际操作中运用这些知识。
|
9天前
|
运维 数据安全/隐私保护 Docker
Docker自建仓库之Docker Registry部署实战
关于如何使用Docker Registry镜像搭建本地私有Docker仓库的实战教程,包括了下载镜像、创建授权目录和用户名密码、启动Registry容器、验证端口和容器、测试登录仓库、上传和下载镜像的详细步骤。
44 5
|
9天前
|
NoSQL 关系型数据库 数据库
JumpServer的Docker部署实战案例
JumpServer的Docker部署实战案例,详细介绍了JumpServer的概述、环境准备、基于Docker的快速部署步骤,以及如何访问JumpServer的WebUI。
11 0
|
11天前
|
运维 开发者 Docker
Docker容器部署实战:从入门到精通
【8月更文挑战第31天】 本文将引导读者了解如何使用Docker容器技术来简化和加速应用程序的部署过程。文章将通过实际案例探讨Docker的基本概念、架构,以及如何创建、管理和维护Docker容器。我们将通过详细的代码示例和操作指导,展示如何在本地环境或云基础设施上部署应用,并讨论如何克服在实际部署中可能遇到的挑战。无论你是DevOps工程师、软件开发者还是IT专业学生,本文都将为你提供深入理解并有效使用Docker的全面指南。