第二章 Docker的镜像

本章将介绍什么是Docker 的镜像、如何管理 Docker的镜像,以及如何构建自己的私 有镜像仓库。

2.1 什么是Docker的镜像

     Docker的镜像是一个模板,或者说其是一个只读文件。在该模板中包含应用和应用运行 时所需要的依赖环境。Docker的镜像采用的是分层的文件系统,每一次对镜像的修改将 以“读写层”的形式增加到原来的只读文件的模板上。

     如图展示了Docker镜像的分层结构。下面进行介绍。

      内核(bootfs):用来加载 Linux的内核以启动Linux环境。Docker 的用户不会 与这一层直接打交道。 

     根镜像:可以将其理解成操作系统,图中的根镜像使用的是 CentOS。

     在根镜像之上就是叠加的每一层应用,图2-1中的MySQL、Tomcat 等。 另外,在物理存储上,镜像的本质其实是磁盘上一系列文件的集合,如图所示。

     Docker 默认的镜像存储路径是“/var/lib/docker",也可以自定义其他路径

2.1.1 使用Docker 默认的镜像存储路径

通过执行以下语句可以得知Docker镜像的存储路径,可以看出在默认情况下,Docker将 拉取的镜像存储在“/var/lib/docker"目录下,如图所示

[root@centos7 ~]# docker info | grep "Docker Root Dir"

1.拉取nginx镜像

下面是具体步骤

(1)在镜像仓库中搜索Nginx的镜像,如图1-49所示。其中,OFFICAL列中标有[OK] 的镜像是 Docker官方提供的镜像

[root@node7 ~]# docker search nginx

(2)通过以下命令从镜像仓库拉取 Nginx的镜像到本地,这里拉取了 docker.io/library/nginx镜像,即官方提供的Nginx镜像

[root@node7 ~]# docker pull nginx

(3)使用“docker images”命令查看本地的镜像信息,如图所示

[root@node7 ~]# docker images

(4)执行以下的命令将使用镜像来创建 Nginx的容器

[root@node7 ~]# docker run ‐d ‐p 1234:80 nginx

(5)在容器创建并启动成功后,可以查看Docker的容器信息,如图所示。

[root@node7 ~]# docker ps

2.以拉取的 Nginx镜像为例,通过以下步骤可以得知该Nginx镜像的存储路径。

(1)确定镜像的ID,这里是a6bd71f48f68,如图所示

(2)切换到“/var/lib/docker”目录下

[root@node7 ~]# cd /var/lib/docker/

(3)执行“find”命令查找镜像文件,如图2-5所示。

[root@node7 docker]# find . -name a6bd71f48f68*

2.1.2 自定义Docker的镜像存储路径

在实际生产环境中,Docker默认的镜像存储路径往往不能满足磁盘空间大小的要求。 可以根据以下步骤来修改这个存储路径。

(1)创建新的镜像存储路径“/data/docker”,该路径用于保存 Docker的镜像文件。

[root@node7 docker]# mkdir -p /data/docker

(2)创建Docker守护进程的配置文件。

[root@node7 docker]# cd /etc/docker
[root@node7 docker]# vim deamon.json

(3)在daemon.json文件中输入以下内容

1 {
2 "graph": "/data/docker"
3 }

(4)重新加载Docker的服务,并重启Docker

[root@node7 docker]# systemctl daemon-reload
[root@node7 docker]# systemctl restart docker.service

(5)重新查看Docker的镜像存储路径,会发现路径变成了“/data/docker”.如图所示

2.2 使用Docker的公有镜像仓库 存储Docker 镜像的地方叫作镜像仓库。镜像仓库分为公有镜像仓库和私有镜像仓库。 下面通过实战来介绍如何使用Docker 公有镜像仓库

2.2.1【实战】访问Docker官方的公有镜像仓库 Docker官方提供了一个公有镜像仓库Docker Hub。在通过Docker客户端操作 Docker 时,如果没有指定镜像仓库的地址,则默认使用该镜像仓库的地址。

(1)使用“docker search”命令搜索镜像仓库中的一个镜像,如MySQL.

[root@node7 ~]# docker search mysql

(2)使用“docker search”命令拉取 MySQL的镜像。如果在拉取镜像时没有指定版 本,则默认拉取最新版本的镜像。也可以在拉取时指定版本信息,例如拉取 mysql:5.7.19。

[root@node7 ~]# docker pull mysql:5.7.19

(3)用拉取的MySQL 镜像创建一个容器,用来运行MySQL 数据库。

 [root@node7~]# docker run ‐‐name my_mysql ‐p 2206:3306 \
> ‐e MYSQL_ROOT_PASSWORD=123.123 \
> ‐d mysql:5.7.19

     -p:2206表示宿主机的端口号:3306表示容器的端口号。这里是将容器的 3306端口映射到了宿主机的2206端口

-e:传递一个变量给容器。这里通过变量MYSQL_ROOT_PASSWORD 设置 了MySQL的root用户的密码为 123.123。

(4)查看容器的信息,如图所示。

(5)使用 Docker命令行进入容器。

[root@node5 ~]# docker exec ‐it  1d0b37603361 /bin/bash

(6)登录MySQL 数据库时输入密码“123.123”,如图所示

(7)在MySQL的命令行中执行以下命令则允许 root用户远程登录(mysql> grant all privileges on *.* to root@"%" identified by "123.123" with grant option;),

 mysql> grant all privileges on *.* to root@"%" identified by "123.123"
with grant option;

(8)重新使用MySOL客户端登录,这时就可以成功访问Docker 容器中的MySQL 数据库了,如图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值