devops利器之docker入门篇(代码片段)

author author     2023-04-26     582

关键词:

简介

What?

Docker是基于Go语言实现的开源容器项目,诞生于2013年年初,由dotCloud公司发起,此公司后改名为Docker Inc.Docker项目已加入Linux基金会,并遵循Apache2.0协议,代码托管在Github:Docker源码地址

各大操作系统现都支持Docker,并且最新的Linux发行版RedHat、CentOS、Ubuntu中均已默认带有Docker软件包.

Docker的构想是要实现“Build,Ship and Run Any App, Anywhere”,即通过对应用的封 装( Packaging)、分发( Distribution)、部署( Deployment)、运行( Runtime)生命周期进行管 理,达到应用组件级别的“ 一次封装 ,到处运行” 。 这里的应用组件, 既可以 是一个 Web 应 用、一个编译环境,也可以是一套数据库平台服务,甚至是一个操作系统或集群。

基于 Linux 平 台上的多项开源技术, Docker 提供了高效、敏捷和轻量级的容器方案,并 支持部署到本地环境和多种主流云平台 。 可以说 , Docker首次为应用 的开发 、运行和部署提 供了“一站式”的实用解决方案。

早期Docker代码实现是基于LXC(Linux Containers,即Linux容器),自0.9版本开始,Docker开发了libcontainer项目作为更广泛的容器驱动实现.

简单地讲,读者可以将 Docker 容器理解为一种轻量级的沙盒( sandbox)。 每个容器内 运行着一个应用,不同的容器相互隔离,容器之间也可以通过网络互相通信。 容器的创建和 停止十分快速,几乎跟创建和终止原生应用 -致;另外,容器自身对系统资源的额外需求也十分有限,远远低于传统虚拟机 。 很多时候,甚至直接把容器当作应用本身也没有任何 问题。

Why?

  • 新型的创建分布式应用程序的方式,快速分发和部署
  • 通过容器来打包应用、解藕应用和运行平台
  • 更快速的交付和部署,启动快速,启动和停止可以在妙计实现,节约开发、测试、部署的大量时间
  • 更高效的资源利用,一台主机上可以运行上千个Docker容器,运行Docker不需要额外的虚拟化管理程序(virtual machine manager,以及Hypervisor)的支持,Docker是内核级的虚拟化,可以实现更高级的性能
  • 更轻松的迁移和扩展,Docker容器几乎可以在任意的平台上运行,包括物理机、虚
    拟机、公有云、私有云 、 个人电脑 、 服务器等
  • 更简单的更新管理,使用Dockerfile,只需要小小的配置修改就可以实现以前繁琐的更新,提高工作效率,并标准 化流程
  • Docker通过类似 Git设计理念的操作来方便用户获取、分发和更新应用镜像,存储复 用,增量更新
  • Docker与传统虚拟机的比较如下图

技术图片

How?

Docker 运行基本命令和模式:
技术图片

Docker Engine:
技术图片

Docker architecture:
技术图片

Docker与虚拟化

虚拟化 (virtualization)技术是一个通用的概念,在不同领域有不同的理解。 在计算领 域,一般指的是计算虚拟化 (computingvirtualization),或通常说的服务器虚拟化。 维基百科 上的定义如下:

“在计 算机技 术中,虚拟化 是 一种资 源管理技术,是将 计 算机 的各种实 体资 源,如服务器 、 网络、 内存及存储等,予以抽 象、转换后呈现出来,打破实体 结 构间的不可切割的障碍,使用户可以用比原本的纽态更好的方式来应用这些资源 。”

可见,虚拟化的核心是对资源的抽象,目标往往是为了在同一个主机上同时运行多个系
统或应用,从而提高系统资源的利用率,并且带来降低成本、方便管理和容错容灾等好处 。

Docker 和常见的虚拟机方式的不同之处:
技术图片

安装

用户可以访问 Docker 官网的 Get Docker Docker 官网页面,查看获取 Docker 的方式,以及 Docker 支持的平台类型目前 Docker 支持 Docker 引 擎、 Docker Hub、 Docker Cloud 等多种服务 。

  • Docker 引擎:包括支持在桌面系统或云平台安装 Docker,以及为企业提供简单安全
    弹性的容器集群编排和管理;
  • DockerHub:官方提供的云托管服务,可以提供公有或私有的镜像仓库;
  • DockerCloud :官方提供的容器云服务,可以完成容器的部署与管理,可以完整地支
    持容器化项目,还有CI、 CD功能。

Linux安装

$sudo apt-get update
$sudo apt-get install docker-ce docker-ce-cli containerd.io

Mac安装

$brew cask install docker

或者:

手动下载安装 :Docker Mac传送门

运行:

安装完成后启动Docker服务,然后尝试运行如下命名:

$docker run -d -p 80:80 --name webserver_test nginx

# 然后在浏览器访问:http://127.0.0.1 看看效果,一个nginx服务器已经搭建完成了,是不是很香

Docker有三大核心概念:

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

镜像 (Image)

镜像是Docker三大核心概念中最重要的,是创建 Docker容器的基础。本质上是一个文件,通过版本管理和增量的文件系统, Docker 提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并直接使用.

Docker 运行容器前需要本地存在对应的镜像, 如果镜像不存在, Docker 会尝试先从默 认镜像仓库下载(默认使用 Docker Hub 公共注册服务器中的仓库), 用户也可以通过配置, 使用自定义的镜像仓库。

获取镜像

$docker pull NAME [:TAG] 
$docker pull ubuntu:18.04
命令相当于
docker pull registry.hub.docker.com/ubuntu:18.04
如果从非官方的仓库下载,则需要在仓库名称前指定完整的仓库地址

NAME:镜像仓库名称
TAG:镜像标签,如果不指定默认为latest,即会下载仓库中最新版本的镜像

注意:
一般来说,镜像的latest 标签意味着该镜像的内容会跟踪最新版本的变更而变化,内容是不稳定的。因此,从稳定性上考虑,不要在生产环境中忽略镜像的标签信息或使 用默认的latest 标记的镜像。

查看镜像信息

  1. 查看本地主机上的镜像列表:
$docker images
或者
$docker image ls

# 参数
> --digests=true|false: 列出镜像的数字摘要值,默认为否;
> -f, --filter=[] : 过滤列出的镜像, 如dangling=true 只显示没有被使用的
镜像;也可指定带有特定标注的镜像等;
> --format="TEMPLATE" : 控制输出格式,如: .ID代表ID信息,.Repository
代表仓库信息等;
> -q, --quiet=true|false: 仅输出ID信息, 默认为否

更多子命令选项还可以通过man docker-images来查看

显示如图:

技术图片

  • REPOSITORY:来自于哪个仓库
  • TAG: 镜像的标签信息
  • IMAGE ID:镜像的ID,这里同样的ID可以是不同TAG,完整的ID是由64个十六进制字符,这里默认展示前12位
  • CREATED: 镜像的创建时间
  • SIZE: 镜像大小,优秀的镜像往往都比较小,镜像大小信息只是表示了该镜像的逻辑体积大小, 实际上由于相同的镜像层本地只会存储一份, 物理上占用的存储空间会小于各镜像逻辑体积之和
  1. 添加镜像标签

为了方便在后续工作中使用特定镜像,还可以使用docker tag命令来为本地镜像任 意添加新的标签。 例如,添加一个新的myubuntu: latest镜像标签:

$docker tag ubuntu:latest myubuntu:latest
  1. 查看镜像详细信息

使用 docker inspect 命令可以获取该镜像的详细信息,包括制作者、适应架构、各层的数字摘要等:

$docker inspect ubuntu:18.04

# 上面代码返回的是一个JSON格式的消息,如果我们只要其中一项内容时,可以使用 -f 来指定,例如,获取镜像的ContainerConfig:

$docker inspect -f ".ContainerConfig" ubuntu:18.04
  1. 使用history命令查看镜像历史
    既然镜像文件由多个层组成,那么怎么知道各个层的内容具体是什么呢?这时候可以使用 history子命令,该命令将列出各层的创建信息。

技术图片

搜索镜像

$ docker search nginx

参数:
-f, --filter filter: 过滤输出内容
--format string: 格式化输出内容
--limit int: 显示个数,默认25
--no-trunc: 不截断输出结果

$ docker search --filter=is-official=true nginx

删除和清理镜像

使用 docker rmidocker image rm 命令可以删除镜像, 命令格式为 docker<br/>rmi IMAGE [IMAGE ... ], 其中 IMAGE 可以为标签或 ID。

$docker rmi myubuntu:latest

参数:
-f, -force: 强制删除镜像, 即使有容器依赖它;
-no-prune: 不要清理未带标签的父镜像。

注意:
当同 一 个镜像拥有多个标签的时候,docker rmi 命令只是删除了该镜像多个标签中的指定 标签而巳, 并不影响镜像文件

# 删除所有镜像
$docker rmi $(docker ps -a)  # 慎用啊!!!!

使用Docker一段时间后, 系统中可能会遗留一些临时的镜像文件, 以及一些没有被使 用的镜像, 可以通过docker image prune命令来进行清理。

创建镜像

创建镜像的方法主要有三种:

  • 基于已有镜像的容器创建
  • 基千本地模板导入
  • 基于Dockerfile创建(比较常用)
利用Dockerfile创建镜像

Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile来快速创建自定义的镜像。由一行行命令语句组成,并且支持以#开头的注释行。一般而言,Dockerfile主体内容分为四部分:

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行指令

未完待续......

docker从入门到实践系列四-docker容器编排利器dockercompose(代码片段)

文章目录Compose简介概念组成安装与卸载二进制包方式安装测试卸载docker-compose.yml文件详解概念案例versionservicesimagebuildcontextdockerfilecontainer_namedepends_onportsexposerestartenvironmentenv_filecommandvolumesnetwork_modenetworksali 查看详情

爬虫+自动化利器selenium之自学成才篇(代码片段)

...窗口切换表单切换弹窗处理❤系列内容❤爬虫+自动化利器selenium之自学成才篇(一)主要内容:selenium简介、selenium安装、安装浏览器驱动、8种方式定位页面元素、浏览器控制、鼠标控制、键盘控制爬虫+自动化... 查看详情

docker系列教程之四dockerfile入门(代码片段)

在上一篇的文章中,我们把 Docker 容器的工作流程剖析的十分清楚了,我们大体可以知道 Docker 组件协作运行容器可以分为以下几个过程:Docker 客户端执行 dockerrun 命令Dockerdaemon 发现本地没有我们需... 查看详情

爬虫+自动化利器selenium之自学成才篇(代码片段)

...前页面对当前页面进行截图❤系列内容❤爬虫+自动化利器selenium之自学成才篇(一)主要内容:selenium简介、selenium安装、安装浏览器驱动 查看详情

如何入门爬虫(基础篇)

...Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺三、爬虫利器Python爬虫利器一之Requests库的用法Python爬虫利器二之BeautifulSoup的用法Python爬虫利器三之Xpath语法与lxml库的用法Python爬虫利器四之PhantomJS的用法Python爬虫利器五之Selenium... 查看详情

devops之harbor(代码片段)

...货物呢,是装在集装箱中的,说到集装箱,就不得不提到Docker容器,因为docker容器的技术正是借鉴了集装箱的原理。所以,Harbor正是一个用于存储Docker镜像的企业级Registry服务。  Harbor通过添加一些企业必需的功能特性,... 查看详情

docker入门基础篇(代码片段)

查看docker教学视频,请点击《狂神说java》:https://www.bilibili.com/video/BV1og4y1q7M4?p=1记得投币三连呀~~Docker学习Docker概述Docker安装Docker命令镜像命令容器命令操作命令......Docker镜像容器数据卷DockerFileDocker网络原理Idea整合DockerDockerCompose... 查看详情

系统重构数据同步利器之canal实战篇(代码片段)

一、背景二话不说,先上图上图来自于官网(https://github.com/alibaba/canal),基本上涵盖了目前生产环境使用场景了,众所周知,Canal做数据同步已经是行业内标杆了。我们生产环境也用Canal监听binlog数据变更,然后解析成对应数据发... 查看详情

docker入门篇񔯱(代码片段)

目录Linux容器Docker的优势Docker三大概念安装使用Docker补充知识原文:http://blog.gqylpy.com/gqy/327"@***所谓DockerDocker最初是dotCloud公司创始人SolomonHykes在法国期间发起的一个公司内部项目,于2013年3月以Apache2.0授权协议开源,主要项目... 查看详情

docker基础知识-入门篇(代码片段)

1.Docker简介和KVM区别1.1docker的三大理念构建运输运行ps:有点类似于java代码,一次构建到处运行1.2docker结构相关说明:image:和虚拟机的镜像类似container:用镜像创建的实例repository:类似于yum仓库dockerclient:命令行输入的docker命令dockerserv... 查看详情

爬虫+自动化利器selenium之自学成才篇(代码片段)

文章目录selenium简介selenium安装安装浏览器驱动确定浏览器版本下载驱动定位页面元素打开指定页面id定位name定位class定位tag定位xpath定位css定位link定位partial_link定位浏览器控制修改浏览器窗口大小浏览器前进&后退浏览器刷新... 查看详情

docker从入门到实践系列四-docker容器编排利器dockercompose(代码片段)

文章目录Compose简介概念组成安装与卸载二进制包方式安装测试卸载docker-compose.yml文件详解概念案例versionservicesimagebuildcontextdockerfilecontainer_namedepends_onportsexposerestartenvironmentenv_filecommandvolumesnetwork_modenetworksaliasesvolumesnetworksCompose常... 查看详情

docker系列:入门篇-安装docker(代码片段)

Docker提供了两个版本:社区版(CE)和企业版(EE)。Docker社区版(CE)是开发人员和小型团队开始使用Docker并尝试使用基于容器的应用的理想之选,所以这里我们来说一下Docker社区版的安装操作系统要求64位CentOS这里只说明centos上的安装方... 查看详情

pandas高级数据分析快速入门之二——基础篇(代码片段)

Pandas高级数据分析快速入门之一——Python开发环境篇Pandas高级数据分析快速入门之二——基础篇Pandas高级数据分析快速入门之三——统计分析篇Pandas高级数据分析快速入门之四——表内、表间数据处理篇Pandas高级数据分析快速入... 查看详情

pandas高级数据分析快速入门之四——数据可视化篇(代码片段)

Pandas高级数据分析快速入门之一——Python开发环境篇Pandas高级数据分析快速入门之二——基础篇Pandas高级数据分析快速入门之三——数据挖掘与统计分析篇Pandas高级数据分析快速入门之四——数据可视化篇Pandas高级数据分析快速... 查看详情

pandas高级数据分析快速入门之五——机器学习特征工程篇(代码片段)

Pandas高级数据分析快速入门之一——Python开发环境篇Pandas高级数据分析快速入门之二——基础篇Pandas高级数据分析快速入门之三——数据挖掘与统计分析篇Pandas高级数据分析快速入门之四——数据可视化篇Pandas高级数据分析快速... 查看详情

pandas高级数据分析快速入门之五——机器学习特征工程篇(代码片段)

Pandas高级数据分析快速入门之一——Python开发环境篇Pandas高级数据分析快速入门之二——基础篇Pandas高级数据分析快速入门之三——数据挖掘与统计分析篇Pandas高级数据分析快速入门之四——数据可视化篇Pandas高级数据分析快速... 查看详情

pandas高级数据分析快速入门之六——机器学习预测分析篇(代码片段)

Pandas高级数据分析快速入门之一——Python开发环境篇Pandas高级数据分析快速入门之二——基础篇Pandas高级数据分析快速入门之三——数据挖掘与统计分析篇Pandas高级数据分析快速入门之四——数据可视化篇Pandas高级数据分析快速... 查看详情