文章目录

  • Docker镜像使用和命令
  • 列出本机镜像
  • 查找镜像
  • 拉取镜像
  • 删除镜像
  • 删除所有镜像
  • 镜像的原理


Docker镜像使用和命令

镜像就是一个轻量级的,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

所有的应用,直接打包docker镜像,就可以直接跑起来。

获取镜像的方式:

  • 从远程仓库下载
  • 从别人那里拷贝
  • 自己制作一个镜像DockerFile

列出本机镜像

我们可以使用 docker images 来列出本地主机上的镜像。

docker镜像获取其他镜像信息 golang 从docker镜像中提取代码_ubuntu


各个选项说明:

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。

所以,我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:

docker run -t -i ubuntu:15.10 /bin/bash

参数说明:

  • -i: 交互式操作。
  • -t: 终端。
  • ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

如果要使用版本为 14.04 的 ubuntu 系统镜像来运行容器时,命令如下:

docker run -t -i ubuntu:14.04 /bin/bash

如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。

查找镜像

我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/

我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个 redis 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。

docker search redis

docker镜像获取其他镜像信息 golang 从docker镜像中提取代码_docker_02

NAME: 镜像仓库源的名称

DESCRIPTION: 镜像的描述

OFFICIAL: 是否 docker 官方发布

stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。

AUTOMATED: 自动构建。

拉取镜像

我们决定使用上图中的最新redis镜像,使用命令 docker pull 来下载镜像,如果要下载指定版本的镜像,可以在镜像的后面加上:版本号

# 下载最新版本
docker pull redis
# 下载指定版本
docker pull redis:5.0

docker镜像获取其他镜像信息 golang 从docker镜像中提取代码_文件系统_03

删除镜像

镜像删除使用 docker rmi 命令,比如我们删除redis镜像:

# 用名称删除
docker rmi redis:5.0
# 用Image ID删除
docker rmi 7614ae9453d1

删除所有镜像

# 删除所有redis镜像
docker rmi $(docker images -q)

镜像的原理

首先来看Linux的文件系统:

Linux文件系统由bootfs 和rootfs 两部分组成

  • bootfs:包含bootloader(引导加载程序)和kernel(内核)
  • rootfs:root文件系统,包含的就是典型的Linux 系统中的/dev、/proc、/bin等标准目录和文件
  • 不同的Linux 发行版,bootfs 基本一样,而rootfs 不同,如ubuntu,CentOS等

Docker 镜像原理:

  • Docker 镜像是由特殊的文件系统叠加而成
  • 最低端是bootfs,并使用宿主机的bootfs
  • 第二层是root 文件系统rootfs ,称为base iamge
  • 然后再往上可以叠加其他的镜像文件
  • 统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统
  • 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像称为基础镜像
  • 当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器

镜像制作:

容器转为镜像:

docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load -i 压缩文件名称