[Docker 入门、Docker的安装、Docker核心之镜像]
[Docker 入门、Docker的安装、Docker核心之镜像]
第 1 章: Docker 入门到精通
docker简介
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上 进行维护。Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操 作一个快速轻量级的虚拟机一样简单。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植 的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不 会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
一、 为什么要使用 Docker
1、 Docker 容器虚拟化的好处
在云时代,开发者创建的应用必须要能很方便地在网络上传播,也就是说应用必须脱离底层物理硬件的限制; 同时必须满足“任何时间任何地点”可获取可使用的特点。因此,开发者们需要一种新型的创建分布式应用程序 的方式,快速分发部署,而这正是 Docker 所能够提供的最大优势。Docker 提供了一种更为聪明的方式,通过 容器来打包应用、解耦应用和运行平台。这意味着迁移的时候,只需要在新的服务器上启动需要的容器就可以了, 无论新旧服务器是否是同一类别的平台。这无疑帮助我们节约了大量的宝贵时间,并降低部署过程出现问题的风 险。
2、 Docker 在开发和运维中的优势
对于开发和运维人员来说,最梦寐以求的效果可能就是一次创建和配置,之后可以在任意地方、任意时间让 应用正常运行,而 Docker 恰恰可以实现这一中级目标。具体来说,在开发和运维过程中,Docker 具有以下几 个方面的优势:
更快的交付和部署:
使用 Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完之 后,测试和运维人员可以直接使用完全相同的环境来部署代码。只要是开发测试过的代码,就可以确保 在生产环境无缝运行。Docker 可以快速创建和删除容器,实现快速迭代,节约开发、测试及部署的时 间。
更高效的利用资源:
运行 Docker 容器不需要额外的虚拟化管理程序的支持,Docker 是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低,与传统的虚拟机方式相比,Docker 的性能要 提高 1 ~ 2 个数量级。
更轻松的迁移和扩展:
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私 有云、个人电脑等等,同时支持主流的操作系统发行版本。这种兼容性能让用户可以在不同的平台之间 轻松的迁移应用。
更轻松的管理和更新:
使用 Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。所 有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理。
3、 Docker 与虚拟机的比较
作为一种轻量级的虚拟化方式,Docker 在运行应用上跟传统的虚拟机的方式相比具有如下显著优势:
Docker 容器启动很快,启动和停止可以实现秒级,相比传统的虚拟机方式(分钟级)要快速很多。
Docker 容器对系统资源需求很少,一台主机上可以同时运行数千个 Docker 容器。
Docker 通过类似 git 设计理念的操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新。
Docker 通过 Dockerfile 支持灵活的自动化创建和部署机制,可以提高工作效率,并标准化流程。
| 特性 | 容器 | 虚拟机 |
|---|---|---|
| 启动速度 | 秒级 | 分钟级 |
| 性能 | 接近原生 | 较好 |
| 内存 | MB级 | GB级 |
| 硬盘适应 | MB级 | GB级 |
| 运行密度 | 单台主机支持上千个 | 单台主机支持几个 |
| 隔离性 | 安全隔离 | 完全隔离 |
| 迁移 | 优秀 | 一般 |
二、 Docker 与虚拟化
Docker 以及其他容器技术,都属于操作系统虚拟化范畴,操作系统细腻化最大的特点就是不需要额外的 supervisor 支持。Docker 虚拟化方式之所以有众多优势,跟操作系统虚拟化技术自身的设计和实现分不开。

三、 Docker 概念和使用
Docker 中有三个核心概念:镜像、容器和仓库。因此,准确把握这三大概念对于掌握 Docker 技术尤为重要。
-
镜像(Image)
Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
-
容器(Container)
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
-
仓库(Repository)
用来保存镜像的仓库。当我们构建好自己的镜像之后,需要存放在仓库中,当我们需要启动一个镜像时, 可 以在仓库中下载下来
1、 Docker 安装
Docker 引擎是使用 Docker 容器的核心组件,可以在主流的操作系统和云平台上使用,包括 Linux 操作系统、 MacOSS 和 Windows 系统上。用户可以访问 Docker 官网 去获取 Docker 安装包。
## 安装网址
windows:
https://desktop.docker.com/win/stable/amd64/Docker%20Desktop%20Installer.exe?utm_source=docker&utm_medium=webreferral&utm_campaign=dd-smartbutton&utm_location=header
MAC:
https://desktop.docker.com/mac/stable/amd64/Docker.dmg
Linux:
https://docs.docker.com/engine/install/centos/
1.1、 在 CentOS 系统上安装 Docker
# 按步骤依次执行即可
1、删除老版本的Dockers残留
[root@python ~]# yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、更换源
(这个源是安装docker)
[root@python ~]# cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
[root@python ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
3、建立yum源缓存
yum makecache
4、更新操作系统
[root@python ~]# yum update -y --exclud=kernel*
5、安装基础软件
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
6、安装docker yum源
[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
7、安装docker
[root@localhost ~]# yum makecache fast
[root@localhost ~]# yum -y install docker-ce
8、启动Docker
[root@localhost ~]# systemctl start docker
9、验证Docker
[root@localhost ~]# docker run -p 8080:80 -d nginx
注:测试能够通过8080访问我们的服务器就算成功
2、 使用 Docker 镜像
docker 镜像是 docker 中三大概念之一,其主要作用是作为启动容器的模板。
1、获取镜像
docker镜像启动容器的模板,镜像一般情况下定义的是容器启动的服务。
docker(容器)去拿仓库中的镜像
仓库,镜像,容器
docker pull nginx
(默认去官网下载,hub.docker)docker.io就可以看出是官方
1、公共的仓库(dockerHub[官方]、阿里云镜像仓库、华为云镜像仓库、腾讯云镜像仓库)
例如: registry.cn-hangzhou.aliyuncs.com/alvinos/docsfiy:v2
docker pull alvinos/django:v3
镜像仓库URL:registry.cn-hangzhou.aliyuncs.com(默认:docker.io)
命名空间:alvinos(默认:library)
仓库名称:docsfiy
版本号:v2(默认:latest最新版本)
2、私有的仓库(Harbor)
登录仓库:docker login [仓库url,默认:docker.io] # 可指定自己的
输入用户名密码即可登录
也可以docker login -u 用户名 [仓库url,默认:docker.io]
输入密码即可登录
3、获取镜像
#
# 下载镜像的格式:docker pull [仓库的 URL]/[名称空间]/[仓库的名称]:[版本号]
# 例如:
# docker pull registry.cn-hangzhou.aliyuncs.com/alvinos/docsfiy:v2
# docker pull [仓库的 URL] [名称空间][仓库的名称]:[版本号]
3.1、 查看镜像信息
##### <font color='blue'>镜像主要包括镜像文件、镜像 tag 以及镜像详细信息等等。</font>
1、使用 docker images 或 docker images ls 命令可以列举本地主机上已有镜像的基本信息

# 列举信息中,可以看到几个字段信息:
镜像来源:来自哪个仓库,默认来自:hub.docker.com
镜像标签:比喻 1.17、1000-teach-2020-10-28-13-40-27
镜像 ID:例如 22fdec3d9a6d
镜像创建时间:例如:3 weeks ago
镜像大小:127MB
-------------------------------------------------------------------------------------
其中镜像的 ID 信息十分重要,它唯一标识了镜像。在使用镜像 ID 的时候,一般可以使用该 ID 的前若干个 字符组成的可区分串来替代完整的 ID。
TAG 信息用于标记来自同一个仓库的不同镜像。TAG 在同一个仓库中是唯一的。
镜像大小信息只是表示了该镜像的逻辑体积大小,实际上由于相同的镜像层本地只会存储一份,物理上占用 的存储空间会小于各镜像逻辑体积之和
image 子命令主要支持如下选项:
-a : 列出所有(包括临时文件)镜像文件
--digests=true|false:列出镜像的数字摘要值
-q : 仅显示 ID 信息
3.2、 为镜像添加 tag
为了方便后续工作中使用特定的镜像,还可以使用 docker tag 命令来为本地的镜像添加标签。
# 格式:
# docker tag [原来的tag] [新的tag]
# 例如:docker tag nginx:latest registry.cn-hangzhou.aliyuncs.com/liujiaoshou/nginx:v13

3.3使用 inspect 命令查看镜像详细信息
使用 docker inspect 命令获取镜像的详细信息,包括 PID、作者、架构等等。
# docker inspect [镜像名称|ID] # 写入镜像名称或者ID都可以
----------------------------------------------------------------------
#
[root@alvin-test-os ~]# docker inspect redis
[
{
"Id":
"sha256:74d107221092875724ddb06821416295773bee553bbaf8d888ababe9be7b947f",
"RepoTags": [
"myredis:latest",
"redis:latest" ],
"RepoDigests": [
"redis@sha256:5b98e32b58cdbf9f6b6f77072c4915d5ebec43912114031f37fa5fa25b032489"
],
... 此处略去千百行
-------------------------------------------------------------------
-f : 获取镜像部分详细信息
docker inspect -f "{{ .Id }}" [镜像名称或ID] # 获取的是只有一个id
例如:
[root@afei linux]# docker inspect -f "{{.ID }}" d1a364dc548d
sha256:d1a364dc548d5357f0da3268c888e1971bbdb957ee3f028fe7194f1d61c6fdee
4、上传镜像
# 以阿里云仓库为例
1、创建阿里云仓库
2、登录阿里云仓库
docker login [阿里云url]
3、修改镜像名称(修改镜像标签)
docker tag
# 主要是为了上传的时候,能控制上传的仓库url、空间名称、镜像仓库名称、版本号
4、上传镜像
docker push [镜像tag]
# 依次完成即可
5、删除镜像
pip3 uninstall django
docker rmi [镜像ID或镜像名称] # 指定删除一个镜像
-f : 强制删除镜像 # 因为某些原因不可删除的话 可以使用加-f强制删除
清空机器上所有的镜像
docker rmi $(docker images -q)
# 固定命令 相当于先运行括号内的 而括号内拿到的就是id值
# 拿到id值删除镜像
部署一个django
1、拉取镜像
docker pull alvinos/django:v3
2、启动
docker run -d -p 80:80 alvinos/django:v3
3、关闭服务
docker stop [容器名称]
相当于yum(或者虚拟机不过是轻量级的去下载包安装包)
详情请见阿里云镜像站,产品,容器镜像服务控制台

浙公网安备 33010602011771号