[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 技术尤为重要。

  1. 镜像(Image)

Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

  1. 容器(Container)

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

  1. 仓库(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 imagesdocker 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(或者虚拟机不过是轻量级的去下载包安装包)
		详情请见阿里云镜像站,产品,容器镜像服务控制台
posted @ 2021-06-22 20:03  刘较瘦丫  阅读(191)  评论(0)    收藏  举报