企业级微服务实战(三)

Docker 实战应用

1. 关于 Docker 镜像、容器、存储驱动的说明

官方文档nginx

1.1 镜像分层(Image and Layers)

从前面的课程中咱们能够看到,想要启动并运行容器即 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 的分层结构,以下图:
image.png
那么采用分层技术有哪些好处呢?最直观的就是分层技术支持并发上传、下载,咱们能够快速的下载一个很大的镜像文件;另一个很是重要的缘由是,若是咱们想要修改镜像,至关于在原有的镜像基础上再加“一层”,咱们推送到仓库也不须要所有推送,只需推送新加的“那一层”数据便可。json

1.2 容器与分层技术(Container and Layers)

镜像是做为容器启动的基础,可是一个镜像能够启动不一样的容器,以下图:
image.png
只有容器层才是可读写的,镜像层是只读的,容器运行时产生的全部数据所有存储在容器中,一旦容器关闭这些数据会所有丢失。那若是想保存这些数据该怎么办呢?一是将容器里的数据内容作成镜像存储下来,二是经过持久存储的方式完成数据存储,后面咱们会分别介绍着两种方式分别用于处理哪些问题。安全

1.3 Docker 存储驱动(Storage Drivers)

当前版本 docker 默认的存储驱动是 overlay2,这也是 docker 官方推荐的驱动方式,不一样的 Linux 发行版请参考以下:官方文档
image.png并发

overlay2 (上一代产品是 overlay)是最新的很是简单、高效、稳定的联合文件系统 union filesystem,在 CentOS/RHEL 系统中使用,须要确保系统内核不低于 3.10.0-514"RHEL or CentOS using version 3.10.0-514 and above."

2. Docker 经常使用命令

Docker 命令不少,你们能够参考 官方文档 ,文档中对每一个用法都有很是详细的介绍和示例。咱们此处仅介绍一些生产上常用到的。ide

2.1 docker pull:获取镜像

具体使用方式学习

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,其中有两个应用分别叫作 nginxhttpd ,那么你的镜像名称就能够这样指定 shop/nginxshop/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,以下:

2.2 docker login/logout:登陆/登出 registry

语法很是简单,只要指定登陆的地址便可,以下:

$ 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 中关于该仓库的认证信息。

2.3 docker search:搜索镜像

这个命令通常用于搜索下载官方镜像,由于该命令并不支持查看镜像 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
... ...
2.4 docker images:查看本地镜像

注: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
2.5 docker rmi:删除镜像

这个命令很简单,直接指定镜像名称或者镜像 ID 就能够删除,支持一次删除多个镜像。可是须要注意的是,若是有基于该镜像正在运行的容器,则默认没法删除。

2.6 docker run/create:启动/建立镜像
这个命令须要介绍的知识点比较多,咱们专门用一片文章来介绍吧。

注:更多技术博客请关注 字节教育官网,若是在学习或者本身实验的过程当中遇到问题,及时与做者沟通。【QQ群 374106486】

相关文章
相关标签/搜索