Docker-基本用法

191 阅读7分钟

本教程转自www.lanqiao.cn/

Docker 实战课程适用于有一定 Linux 系统基础,想快速上手 Docker 的同学。学习方法是多实践,多提问。启动实验后按照实验步骤逐步操作,同时理解每一步的详细内容。

课程为纯动手实验教程,为了能说清楚实验中的一些操作会加入理论内容。理论内容不会涉及太多,因为已经有太多好文章了,会精选最值得读的文章推荐给你,在动手实践的同时扎实理论基础。如果实验开始部分有推荐阅读的材料,请务必先阅读后再继续实验,理论知识是实践必要的基础。

知识点

本实验中我们初步接触 Docker 的概念和基本用法。需要依次完成下面几项任务:

  • Docker 基本概念
  • 安装 Docker
  • Docker 运行 Hello World

推荐阅读

本节实验推荐先阅读下述内容:

这篇文章介绍了 Docker 产生的技术发展历程,Docker 中的核心技术以及相关的子项目,非常好的入门资料。

这篇 Docker 官方的文章详细介绍了 Docker 的运行机制和必要的组件。不涉及到很底层的技术,可以做为对 Docker 的一个初步了解。

Docker 概念

Linux 容器技术很早就有了,比较有名的是被集成到主流 Linux 内核中的 LXC 项目。容器通过对操作系统的资源访问进行限制,构建成独立的资源池,让应用运行在一个相对隔离的空间里,同时容器间也可以进行通信。

容器技术对比虚拟机技术,容器更轻量级,对资源的消耗小很多。容器操作也更快捷,启动和停止都要比虚拟机快。但容器需要与主机共享操作系统内核,不能像虚拟机那样运行独立的内核。

Docker 是一个基于 LXC 技术构建的容器引擎,基于 Go 语言开发,遵循 Apache2.0 协议开源。Docker 的发展得益于为使用者提供了更好的容器操作接口。包括一系列的容器,镜像,网络等管理工具,可以让用户简单的创建和使用容器。

Docker 支持将应用打包进一个可以移植的容器中,重新定义了应用开发,测试,部署上线的过程,核心理念就是「Build once, Run anywhere」。它带来了快速高效的开发生命周期,构建了「Build, Ship and Run」流程,统一了整个开发、测试和部署的环境和流程。

Docker 容器技术的典型应用场景是开发运维上提供持续集成和持续部署的服务。

下面我们开始介绍 Docker 中的几个基本概念。

镜像

Docker 的镜像概念类似于虚拟机里的镜像,是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。

镜像可以基于 DockerFile 构建,DockerFile 是一个描述文件,里面包含若干条命令,每条命令都会对基础文件系统创建新的层次结构。

用户可以通过编写 DockerFile 创建新的镜像,也可以直接从 Docker 的官方仓库 Docker Hub 上下载镜像使用。

容器

Docker 容器是由 Docker 镜像创建的运行实例。Docker 容器类似虚拟机,可以支持的操作包括启动,停止,删除等。每个容器间是相互隔离的,但隔离的效果比不上虚拟机。容器中会运行特定的应用,包含特定应用的代码及所需的依赖文件。

在 Docker 容器中,每个容器之间的隔离使用 Linux 的 CGroups(Control Groups)和 Namespace 技术实现的。CGroups(控制组)提供了资源控制: CPU、内存、磁盘等资源的访问限制。Namespaces (命名空间)提供了系统资源的隔离:进程、网络、文件系统等。

仓库

如果你使用过 Git 和 GitHub 就很容易理解 Docker 的仓库概念。Docker 仓库相当于一个 GitHub 上的代码库。

Docker 仓库是用来包含镜像的位置,Docker 提供一个注册服务器(Registry)来保存多个仓库,每个仓库又可以包含多个具备不同 tag 的镜像。Docker 运行中使用的默认仓库是 Docker Hub 公共仓库。

仓库支持的操作类似 Git,创建了新的镜像后,我们可以 Push 提交到仓库,也可以从指定仓库 Pull 拉取镜像到本地。

设置存储库

首先更新 apt 软件包数据库,以确保软件包列表是最新的。所有的命令均在终端 Terminal 中执行:

sudo apt-get update

执行 sudo 时可能会出现 “sudo: 无法解析主机:xxxxxx” 这样的提示,这是因为云主机的 hostname 不是 localhost,而在 /etc/hosts 中定义了 127.0.0.1 localhost

该提示可以忽略。如果不想要终端出现这样的提示,可以执行以下命令 sudo hostname localhost

安装一些软件包,以允许 apt 通过 HTTPS 使用存储库:

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

首先,我们添加阿里云提供的镜像源以便于加快国内安装速度,先添加相应的密钥:

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

再添加相应源的信息:

sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

安装 docker-engine

我们环境中已经有 Docker 了,你可以在本地使用以下命令安装【可跳过步骤】:

# 更新 apt 索引库
sudo apt-get update
# 安装 docker-ce
sudo apt-get install docker-ce

在安装成功后,Docker 的守护进程自动启动,不需要手动启动服务。此时,我们可以查看其版本信息,使用如下命令:

docker version

线上环境中的 Docker 版本信息如下图所示:

此处输入图片的描述

如果你是 自己搭建的 Docker 环境,可能会提示我们没有相应的权限连接到 Docker 守护进行绑定的 Unix 套接字。这是因为,默认情况下,该套接字归属于 root 用户,对于其它用户只能通过 sudo 来进行访问。

如果要让 shiyanlou 用户可以直接执行 Docker 命令而不必在每次执行时都输入 sudo 来获得权限,我们可以将要执行 Docker 命令的用户添加到用户组 Docker 中。该用户组会在安装后自动创建,我们只需执行添加用户到 Docker 用户组的操作【可跳过步骤】:

sudo gpasswd -a shiyanlou docker

添加用户到一个用户组中的方式有很多,例如我们还可以使用如下命令【可跳过步骤】:

sudo usermod -aG docker shiyanlou

在添加成功后,我们还需要重新打开一个 shell 修改才能生效。这时可以尝试打开一个新的终端或者使用如下命令【可跳过步骤】:

sudo su shiyanlou

启动 Docker 服务

使用阿里云镜像源

国内拉取 Docker Hub 的速度非常慢,好在阿里云提供了镜像加速器。

首先,我们需要编辑 /etc/docker/daemon.json 文件【可跳过步骤】:

sudo vim /etc/docker/daemon.json

然后加入如下内容【可跳过步骤】:

{
  "registry-mirrors": ["https://n6syp70m.mirror.aliyuncs.com"]
}

修改之后,需要重启 Docker 服务,让修改生效。使用如下命令【可跳过步骤】:

sudo service docker restart

Hello world

在安装之后,我们可以通过运行一个 hello-world 的镜像来验证 Docker CE 是否被正确的安装,使用如下命令:

docker run hello-world

该命令会下载一个名为 hello-world 的镜像并运行于一个容器中。当这个容器运行时,会输出一些信息并退出:

此处输入图片的描述

如上图中标注出的提示信息所示,提示我们安装正确。

  • Docker 基本概念
  • 安装 Docker
  • Docker 运行 Hello World

实验总结

本节实验主要讲解了 Docker 的相关概念以及如何安装 Docker。