Docker 安装与入门

Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到。

安装 Docker-CE(centos 7)

Docker CE 安装官方文档参考:

注意:docker 要求 centos 系统必须是 centos 7 版本以上,windows 系统必须是 win10 专业版、企业版或教育版。

卸载旧的 docker

如果系统中存在老版本的 docker ,可以使用下面命令卸载旧的 docker:

1
2
3
4
5
6
7
8
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

安装 docker

yum 阿里云镜像设置:https://developer.aliyun.com/mirror/centos

步骤1:安装 docker 软件依赖的工具

1
yum install -y yum-utils device-mapper-persistent-data lvm2

步骤2:设置 docker 安装源,使用阿里云镜像安装源:

1
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

步骤3:设置 yum 使用最快的安装源

1
yum makecache fast

步骤4:执行下面命令,安装 docker-ce

1
yum install -y docker-ce

安装成功之后,控制台提示类似如下信息:

docker 服务相关命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
systemctl start docker.service	 			# 启动docker服务
systemctl stop docker.service # 停止docker服务
systemctl restart docker.service # 重启docker服务

systemctl status docker.service # 查看docker服务运行状态

systemctl enable docker.service # 设置开机自动启动docker服务
systemctl disable docker.service # 设置禁止开机自动启动docker服务

systemctl is-enabled docker.service # 查看docker服务是否自启动
systemctl list-dependencies docker.service # 列出docker服务层级和依赖关系

# 其他命令
systemctl list-units --type=service # 列出系统所有服务的启动情况
systemctl list-unit-files|grep enabled # 列出所有自启动服务

设置阿里云容器镜像代理

访问:https://cr.console.aliyun.com/

注意的是,上述地址需要注册阿里云账号,并开通:容器镜像服务。

按照阿里云文档选择对应的操作系统脚本执行,即可设置阿里云镜像加速服务:

拉取 docker 镜像并运行:

1
2
docker pull hello-world
docker run hello-world

运行效果界面如下:

Docker 的基本概念

Docker 中包括三个基本的概念:

  • Image(镜像)
  • Container(容器)
  • Repository(仓库)

镜像是 Docker 运行容器的前提,仓库是存放镜像的场所,可见镜像更是 Docker 的核心。

Image (镜像)

docker 官网镜像地址:https://hub.docker.com/

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

镜像(Image)就是一堆只读层(read-only layer)的统一视角,也许这个定义有些难以理解,下面的这张图能够帮助读者理解镜像的定义。

从左边我们看到了多个只读层,它们重叠在一起。除了最下面一层,其它层都会有一个指针指向下一层。这些层是Docker 内部的实现细节,并且能够在主机的文件系统上访问到。统一文件系统 (union file system) 技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。我们可以在图片的右边看到这个视角的形式。

Container (容器)

容器 (container) 的定义和镜像 (image) 几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

由于容器的定义并没有提及是否要运行容器,所以实际上,容器 = 镜像 + 读写层。

Repository (仓库)

Docker 仓库是集中存放镜像文件的场所。镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry (仓库注册服务器)就是这样的服务。有时候会把仓库 (Repository) 和仓库注册服务器 (Registry) 混为一谈,并不严格区分。Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。实际上,一个 Docker Registry 中可以包含多个仓库 (Repository) ,每个仓库可以包含多个标签 (Tag),每个标签对应着一个镜像。所以说,镜像仓库是 Docker 用来集中存放镜像文件的地方类似于我们之前常用的代码仓库。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签.。

仓库又可以分为两种形式:

  • public(公有仓库)
  • private(私有仓库)

Docker Registry 公有仓库是开放给用户使用、允许用户管理镜像的 Registry 服务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。

除了使用公开服务外,用户还可以在本地搭建私有 Docker RegistryDocker 官方提供了 Docker Registry 镜像,可以直接使用做为私有 Registry 服务。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

我们主要把 Docker 的一些常见概念如 ImageContainerRepository 做了详细的阐述,也从传统虚拟化方式的角度阐述了 docker 的优势,我们从下图可以直观地看到 Docker 的架构:

Docker 使用 C/S 结构,即客户端/服务器体系结构。 Docker 客户端与 Docker 服务器进行交互,Docker服务端负责构建、运行和分发 Docker 镜像。 Docker 客户端和服务端可以运行在一台机器上,也可以通过 RESTfulstock 或网络接口与远程 Docker 服务端进行通信。

这张图展示了 Docker 客户端、服务端和 Docker 仓库(即 Docker HubDocker Cloud ),默认情况下Docker 会在 Docker 中央仓库寻找镜像文件,这种利用仓库管理镜像的设计理念类似于 Git ,当然这个仓库是可以通过修改配置来指定的,甚至我们可以创建我们自己的私有仓库。

常用命令

Docker容器信息

1
2
3
docker version	# 查看docker容器版本
docker info # 查看docker容器信息
docker --help # 查看docker容器帮助

镜像操作

提示:对于镜像的操作可使用镜像名、镜像长ID和短ID。

镜像查看

1
2
3
4
5
6
7
docker images				# 列出本地images
docker images -a # 含中间映像层
docker images -q # 只显示镜像ID
docker images -qa # 含中间映像层
docker images --digests # 显示镜像摘要信息(DIGEST列)
docker images --no-trunc # 显示镜像完整信息
docker history -H redis # 显示指定镜像的历史创建;参数:-H 镜像大小和日期,默认为true;--no-trunc 显示完整的提交记录;-q 仅列出提交记录ID

镜像搜索

1
2
3
4
docker search mysql						# 搜索仓库MySQL镜像
docker search --filter=stars=600 mysql # --filter=stars=600:只显示 starts>=600 的镜像
docker search --no-trunc mysql # --no-trunc 显示镜像完整 DESCRIPTION 描述
docker search --automated mysql # --automated :只列出 AUTOMATED=OK 的镜像

镜像下载

1
2
3
docker pull redis			# 下载Redis官方最新镜像,相当于:docker pull redis:latest
docker pull -a redis # 下载仓库所有Redis镜像
docker pull bitnami/redis # 下载私人仓库镜像

镜像删除

1
2
3
4
docker rmi redis					# 单个镜像删除,相当于:docker rmi redis:latest
docker rmi -f redis # 强制删除(针对基于镜像有运行的容器进程)
docker rmi -f redis tomcat nginx # 多个镜像删除,不同镜像间以空格间隔
docker rmi -f $(docker images -q) # 删除本地全部镜像

镜像操作

提示:对于容器的操作可使用CONTAINER ID 或 NAMES。

容器启动

1
2
3
4
docker run -i -t --name mycentos	# 新建并启动容器,参数:-i  以交互模式运行容器;-t  为容器重新分配一个伪输入终端;--name  为容器指定一个名称
docker run -d mycentos # 后台启动容器,参数:-d 已守护方式启动容器
docker start redis # 启动一个或多个已经被停止的容器
docker restart redis # 重启容器

查看容器

1
2
3
4
5
6
7
8
9
docker ps				# 查看正在运行的容器
docker ps -q # 查看正在运行的容器的ID
docker ps -a # 查看正在运行+历史运行过的容器
docker ps -s # 显示运行容器总文件大小
docker ps -l # 显示最近创建容器
docker ps -n 3 # 显示最近创建的3个容器
docker ps --no-trunc # 不截断输出
docker inspect redis # 获取镜像redis的元信息
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis # 获取正在运行的容器redis的 IP

容器的停止与删除

1
2
3
4
5
6
7
8
docker stop redis					# 停止一个运行中的容器
docker kill redis # 杀掉一个运行中的容器
docker rm redis # 删除一个已停止的容器
docker rm -f redis # 删除一个运行中的容器
docker rm -f $(docker ps -a -q) # 删除多个容器
docker ps -a -q | xargs docker rm # 删除多个容器
docker rm -l db # -l 移除容器间的网络连接,连接名为 db
docker rm -v redis # -v 删除容器,并删除容器挂载的数据卷

# ##查看docker容器信息 docker info ##查看docker容器帮助 docker –help

参考文档

10分钟快速掌握Docker必备基础知识

Docker 入门教程

Docker — 从入门到实践

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

updated updated 2020-05-28 2020-05-28
本文结束感谢阅读

本文标题:Docker 安装与入门

本文作者:木鲸鱼

微信公号:木鲸鱼 | woodwhales

原始链接:https://woodwhales.cn/2020/05/28/069/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%