Docker Image,Container,Repository的概念理解

本文详细解释了Docker中的Image(镜像)、Container(容器)和Repository(仓库)这三个核心概念,包括它们之间的关系及常见命令用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Docker的使用过程中,我们经常说Image,Container,Repository, 他们之间具体是一个什么的关系,又是如何使用的,这里基于自己的理解整理一下。

 

1 Image 镜像

1.1 说明

Image(镜像):是一个只读的特殊的文件系统,它提供容器运行时所需的程序、库、资源、配置等文件,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。

Image采用分层设计,每一层称为“layer”,这些layer存放在/var/lib/docker/<storage-driver>/目录下,这里的storage-driver可以有很多种如:AUFS、OverlayFS、VFS、Brtfs等。可以通过docker info命令查看存储驱动。默认是overlay2

可以把Docker Image理解为一个操作系统的镜像。

关于overlayfs的详细内容可以参阅下面的文章,讲的非常详细。

https://www.cnblogs.com/wdliu/p/10483252.html

 

1.2 命令

1)查看所有镜像

$ docker images

$ docker images

REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE

openjdk                                    17-slim             be3ff95aac30        8 weeks ago         397MB

ubuntu                                     18.04               2c047404e52d        3 months ago        63.3MB

redis                                      eiconfig            2f09e9d4fdc2        7 days ago          162MB

constructor                                eiconfig            7fc57b5502f3        7 days ago          681MB

192.168.1.118:9444/datalabel/confweb       6045da745f76a       7fc57b5502f3        7 days ago          681MB

192.168.1.118:9444/datalabel/confweb       6045dfcf8e5ec       7fc57b5502f3        7 days ago          681MB

192.168.1.118:9444/datalabel/confweb       60485c2d854a1       7fc57b5502f3        7 days ago          681MB

confweb                                    eiconfig            7fc57b5502f3        7 days ago          681MB

<none>                                     <none>              299e9642319a        7 days ago          162MB

<none>                                     <none>              cba1396541a7        7 days ago          681MB

<none>                                     <none>              d88d069849b2        7 days ago          102MB

redis-test                                 latest              a19a87524b01        7 days ago          102MB

2)删除一个镜像

$docker rmi IMAGE-ID

IMAGE-ID是使用docker images命令显示的IMAGE ID

  强制删除一个image,使用 $docker rmi -f IMAGE-ID

3)删除所有镜像

docker rmi -f $(docker images -q)

2 Container 容器

2.1 说明

Container(容器):容器是Image的一个具体的实例,一个image可以启动多个container,这些container是彼此隔离的。

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

2.2 常用命名

1)查看容器

$ docker ps

列出的是正在执行的容器

$ docker ps -a  列出所有容器

$ docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

00dbb09c58a4        ubuntu:18.04        "/bin/bash"         2 minutes ago       Up 2 minutes                            ubuntos

2)删除一个容器

$docker rm CONTAINER-ID

强制删除一个容器使用$docker rm –f CONTAINER-ID

3)删除所有的容器

$docker rm $(docker ps -a -q)

 

3 Repository 仓库

3.1 说明

Repository是Docker用来集中存放镜像文件的地方类似于代码仓库。通常,一个仓库会包含同一个软件不同版本的镜像,标签用于对应该软件的各个版本。可以通过 <仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签.。最常使用的 Registry是官方的 Docker Hub ,这也是默认的 Registry,有大量的高质量的官方镜像。除了使用公开服务外,用户还可以在本地搭建私有Docker Registry。

 

Docker hub作为官方的registry,速度会慢,在docker 安装完毕后,可以修改为国内的registry。

可以使用$docker info 命令查看使用的registry。

$ docker info

Client:

 Debug Mode: false

Server:

 Containers: 11

  Running: 1

  Paused: 0

  Stopped: 10

 Images: 70

 Server Version: 19.03.13

 Storage Driver: overlay2

  Backing Filesystem: extfs

  Supports d_type: true

  Native Overlay Diff: true

 Logging Driver: json-file

 Cgroup Driver: cgroupfs

 Plugins:

  Volume: local

  Network: bridge host ipvlan macvlan null overlay

  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog

 Swarm: inactive

 Runtimes: runc

 Default Runtime: runc

 Init Binary: docker-init

 containerd version: 8fba4e9a7d01810a393d5d25a3621dc101981175

 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd

 init version: fec3683

 Security Options:

  apparmor

  seccomp

   Profile: default

 Kernel Version: 5.4.0-52-generic

 Operating System: Ubuntu 18.04.3 LTS

 OSType: linux

 Architecture: x86_64

 CPUs: 2

 Total Memory: 7.776GiB

 Name: robin

 ID: AMVR:LHED:3HPV:SKZV:TUQ2:TSAF:HLCE:RYFU:YCUU:2HXL:UE42:HYOH

 Docker Root Dir: /var/lib/docker

 Debug Mode: false

 Registry: https://index.docker.io/v1/

 Labels:

 Experimental: false

 Insecure Registries:

  127.0.0.0/8

 Registry Mirrors:

  https://docker.mirrors.ustc.edu.cn/

 Live Restore Enabled: false

 

3.2 命令

1)修改docker的默认registry

1 在/etc/docker/daemon.json文件中加入如下内容:

{

  "registry-mirrors": [

    "https://docker.mirrors.ustc.edu.cn"

  ]

}

2 重启docker

$sudo systemctl restart docker

 

2) 开启docker 的HTTP连接

开启docker的http连接功能。步骤如下:

1编辑docker宿主机文件/lib/systemd/system/docker.service

$sudo vi /lib/systemd/system/docker.service

 

2修改以ExecStart为开头的行

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2379

加上如红色所示的部分,端口可以根据需要自己定义。

3 通知docker服务做出的修改

$systemctl daemon-reload

4 重启docker服务

$sudo systemctl restart docker

重启之后,可以看到dockerd进程启用了2379端口。后面就可以使用http访问docker了。

$ sudo netstat -anp |grep docker

tcp6       0      0 :::2379                 :::*                    LISTEN      941/dockerd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值