Docker学习记录

01、前言

docker在环境部署的时候就接触过了,因为没有系统地学习过docker,docker-compose,nginx等相关知识,导致在部署网站的时候浪费了很多时间,而且网上的代码也没有解释的很清楚,所以只能ctrl c+v一点点的尝试。光是配置nginx就折磨了我一天,也激发了学习的欲望。

没正式学习之前谈谈我在部署中领悟到的,对于docker的理解:docker感觉就像python创建的虚拟环境一样,知识这些“虚拟环境”之间能够连接相互作用。使用docker的时候,docker-compose down/up都害怕数据库里的数据没了,但其实数据库并没有被初始化。因为真实的数据和配置是在容器里面的,而我们在操作的只是镜像。

主要学习docker的网站:https://yeasy.gitbook.io/docker_practice/

下面的笔记不止docker,还会涉及其他部署中疑惑的知识点。
由于是学习笔记,里面有一些理解得有偏差的地方,烦请指出,感谢!

02、Docker基本概念

1)镜像

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

镜像就像是一个创建好的类,或者是一个虚拟机,镜像里面有一套文件系统,所有的配置和资源都不变。

2)容器

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

3)仓库

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

一个 Docker Registry 中可以包含多个 仓库(Repository);每个仓库可以包含多个 标签(Tag);每个标签对应一个镜像。

可以理解为类似于github之类的仓库,专门存放镜像的地方

通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

03、使用镜像

1)获取镜像

镜像可以从 Docker Hub 上获取的

从 Docker 镜像仓库获取镜像的命令是 docker pull。其命令格式为:

$ docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
$ docker pull ubuntu:18.04
  • Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub(docker.io)。
  • 仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。

2)列出镜像

docker image ls

列表包含了 仓库名、标签、镜像 ID、创建时间 以及 所占用的空间。

镜像体积

docker image ls 列表中的镜像体积总和并非是所有镜像实际硬盘消耗。由于 Docker 镜像是多层存储结构,并且可以继承、复用,因此不同镜像可能会因为使用相同的基础镜像,从而拥有共同的层。

查看镜像、容器、数据卷所占用的空间:

$ docker system df

虚悬镜像

新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为 <none> 的镜像。
用下面的命令专门显示这类镜像:

$ docker image ls -f dangling=true

一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除。

$ docker image prune

中间层镜像

为了加速镜像构建、重复利用资源,Docker 会利用 中间层镜像。所以在使用一段时间后,可能会看到一些依赖的中间层镜像。

$ docker image ls -a

只要删除那些依赖它们的镜像后,这些依赖的中间层镜像也会被连带删除。

类似python环境下安装sklearn包,sklearn包依赖numpy,若环境中没有numpy这个包,则在安装sklearn过程中会自动安装numpy


列出部分镜像

根据仓库名列出镜像

$ docker image ls ubuntu

指定仓库名和标签

$ docker image ls ubuntu:18.04

docker image ls 还支持强大的过滤器参数 --filter,或者简写 -f
比如,我们希望看到在 mongo:3.2 之后建立的镜像,可以用下面的命令:

$ docker image ls -f since=mongo:3.2

以特定格式显示

利用 docker image ls 把所有的虚悬镜像的 ID 列出来

$ docker image ls -q

5f515359c7f8

直接列出镜像结果,并且只包含镜像ID和仓库名:

$ docker image ls --format "{{.ID}}: {{.Repository}}"

5f515359c7f8: redis

以表格等距显示,并且有标题行,和默认一样,不过自己定义列:

$ docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

IMAGE ID            REPOSITORY          TAG
5f515359c7f8        redis               latest
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值