概念理解"/>
Docker Image,Container,Repository的概念理解
在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的详细内容可以参阅下面的文章,讲的非常详细。
.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: /
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
/
Live Restore Enabled: false
3.2 命令
1)修改docker的默认registry
1 在/etc/docker/daemon.json文件中加入如下内容:
{
"registry-mirrors": [
""
]
}
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
更多推荐
Docker Image,Container,Repository的概念理解
发布评论