1、Docker镜像讲解
1.1、镜像是什么
镜像,即创建容器的模版,含有启动容器所需要的文件系统及所需要的内容,因此镜像主要用于方便和快速的创建并启动容器,它包含了运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。所有的应用,直接打包docker镜像,就可以直接跑起来。
1.2、镜像原理
镜像含里面是一层层的文件系统,叫做 UnionFS(联合文件系统),联合文件系统,可以将几层目录挂载到一起(就像千层饼,洋葱头,俄罗斯套娃一样),形成一个虚拟文件系统,虚拟文件系统的目录结构就像普通 linux 的目录结构一样,镜像通过这些文件再加上宿主机的内核共同提供了一个 linux 的虚拟环境,每一层文件系统叫做一层 layer,联合文件系统可以对每一层文件系统设置三种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是镜像中每一层文件系统都是只读的,构建镜像的时候,从一个最基本的操作系统开始,每个构建提交的操作都相当于做一层的修改,增加了一层文件系统,一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样,当使用镜像的时候,我们只会看到一个完全的整体,不知道里面有几层也不需要知道里面有几层,结构如下:
一个典型的 Linux文件系统由bootfs和rootfs两部分组成,bootfs(boot file system) 主要包含bootloader和kernel,bootloader主要用于引导加载 kernel,当 kernel 被加载到内存中后bootfs会被umount 掉,rootfs (root file system) 包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc 等标准目录和文件,下图就是镜像中最基础的两层结构,不同的 linux 发行版(如 ubuntu 和 CentOS ) 在 rootfs 这一层会有所区别。
一般的镜像通常都比较小,官方提供的Ubuntu镜像只有60MB多点,而CentOS基础镜像也只有200MB左右,一些其他版本的镜像甚至只有几MB,比如:busybox 才1.22MB,alpine镜像也只有5M左右。镜像直接调用宿主机的内核,镜像中只提供rootfs,也就是只需要包括最基本的命令、工具和程序库就可以了。
下图就是有两个不同的镜像在一个宿主机内核上实现不同的rootfs。
容器、镜像父镜像:
2、Docker镜像命令
2.1、Docker帮助命令
docker version #查看版本
docker info #查看系统信息
docker 命令 --help #查看命令帮助
2.2、命令帮助文档地址
#国外官方帮助文档地址
https://docs.docker.com/reference/
#国内官方帮助文档地址
https://dockerdocs.cn/reference/index.html
2.3、Docker镜像命令
(1)dcoker images
#查看所有本地主机镜像,可选项如下:
示例1:显示本地镜像
[root@localhost ~]# docker images
REPOSITORY(#镜像仓库源) TAG(#镜像标签) IMAGE ID(#镜像ID) CREATED(#创建时间) SIZE(#镜像大小)
hello-world latest 9c7a54a9a43c 2 months ago 13.3kB
示例2:显示本地所有镜像ID
[root@localhost ~]# docker images -aq
9c7a54a9a43c
(2)docker search
#搜索镜像,可选参数如下:
示例1:搜索mysql镜像
[root@localhost ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 14336 [OK]
mariadb MariaDB Server is a high performing open sou… 5473 [OK]
percona Percona Server is a fork of the MySQL relati… 618 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 840 [OK]
bitnami/mysql Bitnami MySQL Docker Image 93 [OK]
circleci/mysql MySQL is a widely used, open-source relation… 29
bitnami/mysqld-exporter 5
ubuntu/mysql MySQL open source fast, stable, multi-thread… 51
cimg/mysql 0
rapidfort/mysql RapidFort optimized, hardened image for MySQL 23
rapidfort/mysql8-ib RapidFort optimized, hardened image for MySQ… 9
google/mysql MySQL server for Google Compute Engine 23 [OK]
hashicorp/mysql-portworx-demo 0
rapidfort/mysql-official RapidFort optimized, hardened image for MySQ… 7
newrelic/mysql-plugin New Relic Plugin for monitoring MySQL databa… 1 [OK]
databack/mysql-backup Back up mysql databases to... anywhere! 89
bitnamicharts/mysql 0
linuxserver/mysql A Mysql container, brought to you by LinuxSe… 38
mirantis/mysql 0
docksal/mysql MySQL service images for Docksal - https://d… 0
linuxserver/mysql-workbench 50
vitess/mysqlctld vitess/mysqlctld 1 [OK]
eclipse/mysql Mysql 5.7, curl, rsync 0 [OK]
drupalci/mysql-5.5 https://www.drupal.org/project/drupalci 3 [OK]
drupalci/mysql-5.7 https://www.drupal.org/project/drupalci 0
示例2:通过条件来过滤
查找收藏大于3000以上的mysql镜像
[root@localhost ~]# docker search -f stars=3000 mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 14336 [OK]
mariadb MariaDB Server is a high performing open sou… 5473 [OK]
(3)docker pull
#下载镜像,可选参数如下:
示例1:拉取mysql镜像
[root@localhost ~]# docker pull mysql #可指定版本下载,参数-a
Using default tag: latest #如果不写tag,默认以最新镜像拉取mysql
latest: Pulling from library/mysql
49bb46380f8c: Pull complete #分层下载,docker image的核心 联合文件系统
aab3066bbf8f: Pull complete
d6eef8c26cf9: Pull complete
0e908b1dcba2: Pull complete
480c3912a2fd: Pull complete
264c20cd4449: Pull complete
d7afa4443f21: Pull complete
d32c26cb271e: Pull complete
f1f84a2204cb: Pull complete
9a41fcc5b508: Pull complete
7b8402026abb: Pull complete
Digest: sha256:51c4dc55d3abf4517a5a652794d1f0adb2f2ed1d1bedc847d6132d91cdb2ebbf #签名信息
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址,等价于:docker pull mysql
示例2:指定版本下载mysql
例如下载mysql5.7版本
[root@localhost ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Pull complete
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
查看当前本机所有镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 7c5ae0d3388c 2 days ago 577MB
hello-world latest 9c7a54a9a43c 2 months ago 13.3kB
mysql 5.7 c20987f18b13 19 months ago 448MB
(4)docker rmi
#删除镜像,可选参数如下:
示例1:通过镜像ID的方式删除,
[root@localhost ~]# docker images #查询本地所有镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 7c5ae0d3388c 2 days ago 577MB
hello-world latest 9c7a54a9a43c 2 months ago 13.3kB
mysql 5.7 c20987f18b13 19 months ago 448MB
[root@localhost ~]# docker rmi 7c5ae0d3388c #删除ID为7c5ae0d3388c的镜像,删除多个之间用空格隔开
Untagged: mysql:latest
Untagged: mysql@sha256:51c4dc55d3abf4517a5a652794d1f0adb2f2ed1d1bedc847d6132d91cdb2ebbf
Deleted: sha256:7c5ae0d3388cc6f2c72e73c8b1b9a7ba29347d9d7117d426b5cd83c3b71fe2b9
Deleted: sha256:1835f63a5c50ac6bb1c76f3638c0dc1f12cb83e8785bbf0eaaf8b00394053537
Deleted: sha256:788096e6099967e0445ccdc4e3325c8b5d7bc9c01a4ce088809b8326cf89411b
Deleted: sha256:878ac3c36da9ad2b13267633221bfe86c766d695c3262cd45a009cbbcb5eee80
Deleted: sha256:b43c1c5f46700a04d887f5cc287135201e998c78e1d409ac7ce0d99bdb10e40f
Deleted: sha256:a08656a69d8bcec37e2edc478f21859d2a59d6344bad7016572bcb32ed9e1bf8
Deleted: sha256:7c324acd73d89feffe4d9870915c21aa9fc57159cd3a990a54cc1a10bc0b5282
Deleted: sha256:7b935957c6b8cb4cfecb1109ffceacbf3b100d48c2c842bffbe667ada0d7bf51
Deleted: sha256:798dc96d1cbbb087d228d7ee1542e81181d99c5feef7d646061fb1be60f0a600
Deleted: sha256:ac5998110c5937efa17d9ab7a09324d73ed1b8626c623d4f079d73d92bb573a6
Deleted: sha256:55cba8d2bd703353ff4e0958d6cf47d334cf2b7af665d18e7524d5e062d36a14
Deleted: sha256:32f7f5f86853e4f33f21f8c84cb800dcad0b678f3571e5ef342cfbb0a369b103
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 9c7a54a9a43c 2 months ago 13.3kB
mysql 5.7 c20987f18b13 19 months ago 448MB
示例2:删除所有镜像
[root@localhost ~]# docker rmi -f $(docker images -qa) #以递归的方式删除所有镜像
Untagged: hello-world:latest
Untagged: hello-world@sha256:926fac19d22aa2d60f1a276b66a20eb765fbeea2db5dbdaafeb456ad8ce81598
Deleted: sha256:9c7a54a9a43cca047013b82af109fe963fde787f63f9e016fdc3384500c2823d
Untagged: mysql:5.7
Untagged: mysql@sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Deleted: sha256:c20987f18b130f9d144c9828df630417e2a9523148930dc3963e9d0dab302a76
Deleted: sha256:6567396b065ee734fb2dbb80c8923324a778426dfd01969f091f1ab2d52c7989
Deleted: sha256:0910f12649d514b471f1583a16f672ab67e3d29d9833a15dc2df50dd5536e40f
Deleted: sha256:6682af2fb40555c448b84711c7302d0f86fc716bbe9c7dc7dbd739ef9d757150
Deleted: sha256:5c062c3ac20f576d24454e74781511a5f96739f289edaadf2de934d06e910b92
Deleted: sha256:8805862fcb6ef9deb32d4218e9e6377f35fb351a8be7abafdf1da358b2b287ba
Deleted: sha256:872d2f24c4c64a6795e86958fde075a273c35c82815f0a5025cce41edfef50c7
Deleted: sha256:6fdb3143b79e1be7181d32748dd9d4a845056dfe16ee4c827410e0edef5ad3da
Deleted: sha256:b0527c827c82a8f8f37f706fcb86c420819bb7d707a8de7b664b9ca491c96838
Deleted: sha256:75147f61f29796d6528486d8b1f9fb5d122709ea35620f8ffcea0e0ad2ab0cd0
Deleted: sha256:2938c71ddf01643685879bf182b626f0a53b1356138ef73c40496182e84548aa
Deleted: sha256:ad6b69b549193f81b039a1d478bc896f6e460c77c1849a4374ab95f9a3d2cea2
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
评论区