官方文档nginx
从前面的课程中咱们能够看到,想要启动并运行容器即 Docker Container,必须基于镜像即 Docker image, 而咱们在使用 docker pull
去拉取镜像时,常常会出现下面的信息:docker
[root@docker-server ~]# docker pull nginx Using default tag: latest latest: Pulling from library/nginx 8d691f585fa8: Pull complete 047cb16c0ff6: Pull complete b0bbed1a78ca: Pull complete Digest: sha256:77ebc94e0cec30b20f9056bac1066b09fbdc049401b71850922c63fc0cc1762e Status: Downloaded newer image for nginx:latest
其中 8d691f585fa8: Pull complete、047cb16c0ff6: Pull complete、b0bbed1a78ca: Pull complete
是什么意思呢?这就是 Docker image 的分层结构,以下图:
那么采用分层技术有哪些好处呢?最直观的就是分层技术支持并发上传、下载,咱们能够快速的下载一个很大的镜像文件;另一个很是重要的缘由是,若是咱们想要修改镜像,至关于在原有的镜像基础上再加“一层”,咱们推送到仓库也不须要所有推送,只需推送新加的“那一层”数据便可。json
镜像是做为容器启动的基础,可是一个镜像能够启动不一样的容器,以下图:
只有容器层才是可读写的,镜像层是只读的,容器运行时产生的全部数据所有存储在容器中,一旦容器关闭这些数据会所有丢失。那若是想保存这些数据该怎么办呢?一是将容器里的数据内容作成镜像存储下来,二是经过持久存储的方式完成数据存储,后面咱们会分别介绍着两种方式分别用于处理哪些问题。安全
当前版本 docker 默认的存储驱动是 overlay2,这也是 docker 官方推荐的驱动方式,不一样的 Linux 发行版请参考以下:官方文档并发
overlay2 (上一代产品是
overlay)是最新的很是简单、高效、稳定的联合文件系统
union filesystem,在
CentOS/RHEL 系统中使用,须要确保系统内核不低于
3.10.0-514 即
"RHEL or CentOS using version 3.10.0-514 and above."
Docker 命令不少,你们能够参考 官方文档 ,文档中对每一个用法都有很是详细的介绍和示例。咱们此处仅介绍一些生产上常用到的。ide
具体使用方式学习
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
最基本的用法很是简单,咱们只须要指定 镜像名称和 tag 信息或者 Digest 即加密摘要,通常咱们都是使用 tag 来指定不一样“版本”的镜像,固然使用加密摘要更加安全,可是相对来讲操做复杂些。若是咱们什么都不指定,则默认使用 latest 标签tag,而 latest 标签通常是默认生成的,会一直指向最新的镜像。好比:
【不指定 tag 信息】ui
[root@docker-server ~]# docker pull busybox Using default tag: latest latest: Pulling from library/busybox Digest: sha256:fe301db49df08c384001ed752dff6d52b4305a73a7f608f21528048e8a08b51e Status: Downloaded newer image for busybox:latest
【指定 tag 信息】阿里云
[root@docker-server ~]# docker pull busybox:1.31.0 1.31.0: Pulling from library/busybox 7c9d20b9b6cd: Already exists Digest: sha256:200659419fb0fa86380fec1802e3b4e7e792c06b5affddc04eba435e64504a88 Status: Downloaded newer image for busybox:1.31.0
【指定加密摘要信息】加密
[root@docker-server ~]# docker pull busybox@sha256:bbb143159af9eabdf45511fd5aab4fd2475d4c0e7fd4a5e154b98e838488e510 sha256:bbb143159af9eabdf45511fd5aab4fd2475d4c0e7fd4a5e154b98e838488e510: Pulling from library/busybox 57c14dd66db0: Pull complete Digest: sha256:bbb143159af9eabdf45511fd5aab4fd2475d4c0e7fd4a5e154b98e838488e510 Status: Downloaded newer image for busybox@sha256:bbb143159af9eabdf45511fd5aab4fd2475d4c0e7fd4a5e154b98e838488e510
注意:默认咱们都是从官方也就是
DockerHub 上下载镜像,那若是咱们从其余第三方仓库下载镜像该怎么指定呢?其实
docker pull
完整的语法应该是:
docker pull [<registry>][:<port>]/[<namespace>/]<name>:<tag>
其中 registry 默认是指 DockerHub 仓库https://index.docker.io/v1/
, namespace 可能不太好理解,你能够理解成 项目名称 或者 帐户名称 可能更接地气一点;而 name 则是指 应用名称 或者 仓库名称(在 docker 仓库中,通常咱们习惯使用一个仓库来存储一个应用,即 Nginx 仓库只用来存储 Nginx 应用镜像,根据不一样 tag 信息来区分镜像版本) ,好比我们有个电商项目 shop,其中有两个应用分别叫作 nginx 和 httpd ,那么你的镜像名称就能够这样指定 shop/nginx 与 shop/httpd,若是在加上标签信息,能够这样 shop/nginx:v1.14.1,若是咱们还有本身的私有镜像仓库https://docker.byte-edu.com:5000
,那么咱们能够这样指定docker.byte-edu.com:5000/shop/nginx:v1.14.1
,注意,在使用docker pull
或者docker push
时,虽然使用 https 协议,可是不要写上 https:// ,也就是上述命令能够这样写:
$ docker pull docker.byte-edu.com:5000/shop/nginx:v1.14.1
咱们在阿里云帐户上申请私有镜像仓库,一个帐户下最多能够设置 5 个名称空间 namespace,可是一个名称空间下能够设置多少个仓库或者应用则没有限制。
这里咱们会有一个问题,是否是全部人使用 docker pull docker.byte-edu.com:5000/shop/nginx:v1.14.1
均可以到这个仓库去下载镜像?这须要根据仓库的性质,即公共仓库仍是私有仓库。若是是公共仓库任何人均可如下载,若是是私有仓库,则须要先登陆认证才能进行上传、下载。登陆使用 docker login
,以下:
语法很是简单,只要指定登陆的地址便可,以下:
$ docker login myregistry:5000
输入正确的用户名和密码便可,这里有个知识点须要你们关注下,若是咱们是在写脚本中须要登陆仓库,可使用 --password-stdin
的方式,好比:
$ cat ~/my_password.txt | docker login myregistry:5000 --username foo --password-stdin
这样咱们把密码写入到 ~/my_password.txt
文件中便可。
注意:当咱们完成登陆以后,用户名和密码默认会写入到配置文件中,文件路径为
~/.docker/config.json
这样下次使用该仓库时就不须要再次输入用户名和密码了。
若是想要登出,则使用
$ docker logout myregistry:5000
登出成功后,会删除配置文件 ~/.docker/config.json 中关于该仓库的认证信息。
这个命令通常用于搜索下载官方镜像,由于该命令并不支持查看镜像 tag 信息,因此通常搜索咱们仍是经过 DockerHub 进行搜索,找打指定标签而后下载。以下:
[root@docker-server ~]# docker search busybox NAME DESCRIPTION STARS OFFICIAL AUTOMATED busybox Busybox base image. 1700 [OK] progrium/busybox 71 [OK] radial/busyboxplus Full-chain, Internet enabled, busybox made f… 25 [OK] arm32v7/busybox Busybox base image. 7 ... ...
注:docker images == docker image ls/list
都是用于查看本地镜像。
docker images
其实还支持不少参数,好比过滤 filter、查看加密摘要 --digests等,可是通常都不怎么用,比较常见的一是不加任何参数,用来显示全部镜像;二是制定镜像名称,仅显示某个镜像列表,以下:
[root@docker-server ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 5a9061639d0a 47 hours ago 126MB busybox 1.31.0 19485c79a9bb 6 weeks ago 1.22MB busybox latest 19485c79a9bb 6 weeks ago 1.22MB registry.cn-beijing.aliyuncs.com/byte-edu/mydocker v0.1 19485c79a9bb 6 weeks ago 1.22MB hello-world latest fce289e99eb9 9 months ago 1.84kB busybox <none> 3a093384ac30 9 months ago 1.2MB
[root@docker-server ~]# docker images busybox REPOSITORY TAG IMAGE ID CREATED SIZE busybox 1.31.0 19485c79a9bb 6 weeks ago 1.22MB busybox latest 19485c79a9bb 6 weeks ago 1.22MB busybox <none> 3a093384ac30 9 months ago 1.2MB
固然,也能够只显示某个标签的镜像。
[root@docker-server ~]# docker images busybox:latest REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 19485c79a9bb 6 weeks ago 1.22MB
这个命令很简单,直接指定镜像名称或者镜像 ID 就能够删除,支持一次删除多个镜像。可是须要注意的是,若是有基于该镜像正在运行的容器,则默认没法删除。
这个命令须要介绍的知识点比较多,咱们专门用一片文章来介绍吧。
注:更多技术博客请关注 字节教育官网,若是在学习或者本身实验的过程当中遇到问题,及时与做者沟通。【QQ群 374106486】