docker基础实战教程:入门(代码片段)

ZSYL ZSYL     2022-12-09     377

关键词:

Docker 基础实战教程:入门

前言

Docker是一个操作系统级的虚拟化技术,是基于LXC技术构建的轻量级容器引擎。与传统的虚拟化技术相比,Docker具有更高效的系统资源利用率、更快速的启动时间、提供一致的运行环境、更轻松的迁移等众多优势。自2013年0.1版本发布以来,围绕Docker逐渐形成了繁荣的生态,迅速的成为国内外各大云计算厂商和开发者手中的利器,并得到大规模的实践应用。


“没有集装箱,就不会有全球化”,集装箱的出现改变了全球化的现代生产与运输体系。Docker是一套以容器技术为核心的思想和一套标准化的体系,是IT领域的“集装箱”。只是,这个“集装箱”会改变整个IT世界吗?

Hello Docker !

镜像

镜像可以理解为一个打包了运行环境的特殊文件系统,它包含了容器启动运行所需的所有信息,包括运行程序和配置数据等。镜像不包含任何动态数据,其内容在构建之后也不会改变。

例如,一个官方的Ubuntu14.04镜像,就包含了一套完整的Ubuntu14.04最小系统的root文件系统。

容器

镜像容器的关系,类似于面向对象程序设计中的实例一样,镜像是静态的定义,而容器是镜像运行时的实体,可以看成是一个具备某个运行环境的非常轻量的虚拟机。容器可以被创建、启动、停止和删除等。在创建容器时,需要显示地为容器指定镜像。指定镜像之后,容器就具备了镜像中保存的运行环境了。

例如,可以为容器指定Ubuntu14.04的镜像,然后该容器就具备Ubuntu14.04的运行环境了。

Docker使用的基本过程

容器需要基于一个镜像来创建和使用。因此,Docker容器的使用一般有以下三个步骤:

1.获取一个镜像;  
2.基于该镜像创建并启动一个容器;  
3.进入该容器,执行“程序”。  
  • 第一步:获取镜像;
    上面我们提到了“镜像”可以理解为一个打包了运行环境的文件系统。然而在安装完Docker服务之后,本地是没有任何镜像的,所以首先需要获取所需要的镜像。

  • 第二步:创建并启动容器;
    在获取到所需的镜像之后,就可以基于该镜像创建并启动一个容器,该容器就具备了镜像包含的运行环境了。同时,在创建容器时也可以设置容器的启动命令,该命令会在容器启动时执行。

  • 第三步:进入容器并执行程序;
    在容器成功创建并启动之后,该容器就具备了ubuntu的运行环境。我们可以进入该容器内部,并在其内部执行任何在ubuntu系统上的程序了。这里的“程序”可以是“Linux命令”、“shell脚本”、“C++程序”等。

Docker使用基本实例

启动一个容器并输出“Hello Docker”的基本语句如下:

docker pull busybox:latest  
docker run --name first_docker_container busybox:latest echo "Hello Docker"  
  • 第一条命令:获取一个名为busybox:latest的镜像。这条命令会从Docker Hub官方镜像仓库获取一个名为busybox:latest的镜像(busybox的最新版),并把它下载到宿主机。其中busybox是最小的Linux系统。
  • 第二条命令: 创建并启动一个容器,并执行相应命令。首先,--name设置容器的名字为first_docker_container,然后为容器指定了busybox:latest作为启动镜像,最后设置了该容器的启动命令为echo "Hello Docker"。容器启动并输出 “Hello Docker”后,将其停止。
  • 其实我们也可以去掉第一条命令,直接使用第二条命令即可完成同样的功能。后台在执行命令时,发现本地没有busybox:latest镜像,会首先自动执行docker pull busybox:latest,将busybox:latest镜像下载到宿主机,然后再以busybox镜像作为基础,创建一个名为first_docker_container的镜像,并执行echo “Hello Docker”命令。

生命是自然的赏赐,但幸福的生活,则是智慧的赏赐。

拉取镜像

在没有使用Docker之前,如果我们要准备一个ubuntu的运行环境,那么首先我们得安装一个ubuntu的系统,多么麻烦,多么耗时啊!!而使用Docker之后,只需要从Docker Hub中拉取一个ubuntu镜像,基于该ubuntu镜像启动一个容器,就可以在容器中做任何在ubuntu系统中做的事情,整个过程大约2-3分钟,而且主要的时间是用于下载镜像!是不是非常方便呢?


在Docker的官方镜像仓库Docker Hub中保存了各种各样的镜像,这些镜像中保存了各种各样的运行环境。例如包含Linux运行环境的“ubuntu”镜像、“centos”镜像、“busybox”镜像等。

获取镜像

默认情况下,使用docker pull命令,会从官方的Docker Hub库中将镜像拉取到本地。

docker pull [OPTIONS] <仓库名><标签>  

其中,

  • docker pull:Docker拉取镜像的命令关键词;
  • [OPTIONS]:命令选项;
  • 仓库名:仓库名的格式一般为<用户名>/<软件名>。对于Docker Hub,如果不指定用户名,则默认为library,即官方镜像;
  • 标签:标签是区分镜像不同版本的一个重要参数,<仓库名>:<标签>会唯一确定一个镜像。默认为latest

例如,我们要从Docker Hub官方仓库拉取一个Ubuntu 14.04的官方镜像,其语句如下:

docker pull ubuntu:14.04  

docker pull命令背后的工作

首先,如果tag值为空,即没有指定标签,就会使用默认tag,也就是latest,如果tag值不为空,就使用指定的tag。

然后,默认情况下,会在Docker Hub中寻找名为“repoName”的仓库,如果仓库不存在,返回错误信息。如果仓库存在,就从仓库中拉取对应tag的镜像。

例如:如果执行docker pull ubuntu:14.04,那么将从“ubuntu”仓库中拉取tag为14.04的镜像,而如果执行docker pull ubuntu,会从“ubuntu”仓库中拉取tag为latest的镜像。
(在Docker Hub中有很多个镜像仓库,一般情况下会将同一类型的镜像放在同一个仓库中,例如在一个ubuntu仓库中由很多个ubuntu镜像组成,包括ubuntu:14.04、ubuntu:16.04、ubuntu:latest等等镜像)。

最后,将拉取的镜像存储到本地的指定位置。

docker pull的两个基本实例

执行docker pull ubuntu之后,会有下面的执行结果。(执行命令之前,本地并不存在ubuntu:latest镜像)。

如下图所示,因为没有显示地指定tag,所以就使用默认tag,也就是latest。于是会在Docker Hub中从ubuntu仓库中拉取ubuntu:latest镜像,当将镜像一层层下载完成后,存储到本地。

[root@localhost Desktop]# docker pull ubuntu  
Using default tag: latest  
latest: Pulling from library/ubuntu  
e0a742c2abfd: Pull complete   
486cb8339a27: Pull complete   
dc6f0d824617: Pull complete   
4f7a5649a30e: Pull complete   
672363445ad2: Pull complete   
Digest: sha256:84c334414e2bfdcae99509a6add166bbb4fa4041dc3fa6af08046a66fed3005f  
Status: Downloaded newer image for ubuntu:latest  
[root@localhost Desktop]#   

那从Docker Hub中拉取一个不存在的镜像会怎么样呢?如下所示,执行docker pull aaa后,会在Docker Hub中查找aaa仓库,由于不存在aaa仓库,所以没有找到,返回了错误信息。

[root@localhost Desktop]# docker pull aaa  
Using default tag: latest  
Error response from daemon: repository aaa not found: does not exist or no pull access  

设置镜像加速器

由于“伟大的墙”的原因,在国内从Docker Hub中拉取镜像的速度可能会比较慢,国内很多云服务商都提供了镜像加速器服务,例如阿里、网易等等。

Linux系统配置阿里云加速器为例,只需要将下面的命令复制到Linux的终端,以root用户的身份执行之后,就成功的配置了阿里云加速器了!

#以root用户执行以下操作  
mkdir -p /etc/docker  
tee /etc/docker/daemon.json <<-'EOF'  
#下面的URL可以替换为你自己的阿里云加速地址  
"registry-mirrors": ["https://jxus37ad.mirror.aliyuncs.com "]  
  
EOF  
systemctl daemon-reload  
systemctl restart docker  

导入导出容器

#以busybox为镜像创建一个容器,容器名为busyboxContainer
#拉取busybox 最新镜像,实际生产中,docker pull 这一步可以省略,docker run的时候会自己去拉取。
docker pull busybox

docker run --name busyboxContainer busybox echo "hello"
#1.然后将busyboxContainer导出为容器快照:busybox.tar
#********** Begin *********#
docker export busyboxContainer > busybox.tar
#********** End **********#

#2.最后使用该容器快照导入镜像,镜像名为busybox:v1.0。
#********** Begin *********#
cat busybox.tar | docker import - busybox:v1.0
#********** End **********#

docker export和docker save的区别

首先,两者的操作对象不同。docker save是将一个镜像保存为一个tar包,而docker export是将一个容器快照保存为一个tar包。

然后,docker export导出的容器快照文件将丢弃所有的历史记录和元数据信息,即仅保存容器当时的快照状态;而docker save保存的镜像存储文件将保存完整记录,体积也要大。下图就能够很好的说明,ubuntu:test仅仅占97.8MB而ubuntu:latest却占了120MB。

[root@localhost step2]# docker images ubuntu  
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE  
ubuntu              test                34be0173049d        5 seconds ago       97.8 MB  
ubuntu              latest              14f60031763d        2 weeks ago         120 MB  
[root@localhost tempdir]# docker run ubuntu:test ls /dir1  
1.txt  
2.txt  

加油!

感谢!

努力!

docker从入门到实战应用(代码片段)

...作-容器第4章容器的修改及保存第5章容器进阶操作第6章Dockerfile第1章概念什么是沙箱机制#1、沙箱是一个虚拟系统程序,沙箱提供的环境相对于每一个运行的程序都是独立的,而且不会对现有的系统产生影响。#2、沙箱具有非常... 查看详情

从实战开始,零基础docker入门教程

前提本文是基于windows环境下使用docker的学习文章其实我也有很长的一段时期在ubuntu系统下开发,很喜欢linux系统的纯净方便,但是当你身边同事都是使用windows与你交流沟通传输资料的时候,使用linux系统开发倒是一件不方便的事情,... 查看详情

docker基础入门实战

Docker基础入门实战第1章         docker简介1.1 whatisDockerDocker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源,源代码部署在GitHub上。Docker是通过内核虚拟技术来提供容器的资源隔... 查看详情

微服务springcloud+docker入门到高级实战(教程详情)

第一章课程介绍和学习路线1、微服务架构SpringCloud课程介绍 简介:课程介绍和课程大纲讲解,讲课风格和重点内容理解技巧 2、技术选型和学后水平 简介:课程所需基础和技术选型讲解,学完课程可以到达怎样的程度, 1、... 查看详情

❤️docker超详细基础教程,快速入门docker首选❤️(万字长文建议收藏)(代码片段)

一、docker概述1.什么是dockerDocker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可... 查看详情

mongodb入门实战教程(代码片段)

...用、何时使用及使用限制。本系列教程目录:MongoDB入门实战教程(1)MongoDB入门实战教程(2)MongoDB入门实战教程(3)MongoDB入门实战教程(4)MongoDB入门实战教程(5)MongoDB入门实战教程(6)前面我 查看详情

轻松掌握docker使用-基础入门(代码片段)

前言Docker自2013年以来非常火热,很多人也津津乐道于它,网上也很多关于Docker的文章和学习教程。这里我再重新提及“docker的入门使用”无非是想整理一下以前学的知识,方便查阅和用于分享。  在学习Docker使用... 查看详情

轻松掌握docker使用-基础入门(代码片段)

前言Docker自2013年以来非常火热,很多人也津津乐道于它,网上也很多关于Docker的文章和学习教程。这里我再重新提及“docker的入门使用”无非是想整理一下以前学的知识,方便查阅和用于分享。  在学习Docker使用... 查看详情

微服务系列教程

...SpringBoot入门IDEA版本、SpringBoot实战与原理分析视频课程、docker构建微服务、docker入门、docker进阶、docker解析及轻量级PAAS平台演练等视频 查看详情

docker入门到实战(代码片段)

1、系统要求DockerCE支持64位版本CentOS7,并且要求内核版本不低于3.10。CentOS7满足最低内核的要求,但由于内核版本比较低,部分功能(如overlay2存储层驱动)无法使用,并且部分功能可能不太稳定。2、配置阿里云DockerYum源sudoyumins... 查看详情

qgis入门实战精品教程8.1:qgis制作地图案例教程(代码片段)

...修饰元素七、地图输出一、加载矢量数据加载本实验数据基础数据.gpkg中的甘肃省政区矢量数据,如下所示:二、加载影像底图QGIS加载在线地图案例教程参考:【QGIS入门实战精品教程】14.1:QGIS如何加载各种在线地图?底图的加... 查看详情

docker入门与实战(代码片段)

what什么是docker?dockker就想它的logo一样,docker是一只大鲸鱼,然后每个镜像container就是对应的集装箱docker是一款用go语言开发的容器docker的核心思想就是隔离,通过隔离机制,既可以保障每个集装箱里面的东西... 查看详情

docker小白从零入门实战(代码片段)

...:Centos6.90.查看是否满足安装需求。先检查服务器环境,docker要求操作系统CentOS6以上,kernel版本必须2.6.32-431或更高,即>=CentOS6.5,[[email protected]~]#uname-r2.6.32-696.23.1.el6.x86_64docker的存储驱动是DeviceMapper,看下你的驱动是否符... 查看详情

保姆级java入门练习教程,附代码讲解,小白零基础入门必备(建议收藏)(代码片段)

...#x1f332;本文收录于专栏《技术专家修炼》试用于学完「Java基础语法」后的巩固提高及「LeetCode刷题」前的小试牛刀。作者其它优质专栏推荐:📚《源码中的设计模式》——理论和实战的完美结合📚《leetcode300题》——... 查看详情

3.docker技术入门与实战---使用docker镜像(代码片段)

第3章 使用Docker镜像 镜像是docker三大核心概念中最重要的,docker运行容器前需要本地存在对应的镜像,如果镜像不存在,docker会尝试先从默认镜像仓库下载(默认使用DockerHub公共注册服务器中的仓库),用户也可以通过配置,使... 查看详情

urlos开发入门docker官方系统镜像——alpine入门教程(代码片段)

我们在进行URLOS应用开发时,经常会用到一些基础系统镜像,如:ubuntu、CentOS、Debian等,我们可以通过dockerpull命令直接拉取官方镜像。[email protected]:~#dockerpullubuntu:18.0418.04:Pullingfromlibrary/ubuntu898c46f3b1a1:Alreadyexists63366dfa0a50:Al 查看详情

mongodb入门实战教程(代码片段)

...些数据转化为期望的格式。本系列教程目录:MongoDB入门实战教程(1)MongoDB入门实战教程 查看详情

pythonmap函数-python零基础入门教程(代码片段)

...四.Pythonmap函数效率对比五.Pythonmap函数总结六.猜你喜欢零基础Python学习路线推荐:Python学习目录>>Python基础入门一.前言截至到目前为止,其实我们已经接触了不少的Python内置函数,而map函数也是其中之一, 查看详情