docker镜像使用
本文最后更新于:2022年10月21日 晚上
Docker 镜像使用
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。
下面我们来学习:
管理和使用本地 Docker 主机镜像
创建镜像
列出镜像列表
我们可以使用docker images
来列出本地主机上的镜像。
输出介绍:
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
同一仓库源可以有多个标签(TAG),代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 18.04、20.04 等多个不同的版本,我们使用REPOSITORY:TAG
来定义不同的镜像。
例如,如果要使用版本为 18.04 的 ubuntu 系统镜像来运行容器时,命令如下:
1 |
|
如果要使用版本为 20.04 的 ubuntu 系统镜像来运行容器时,命令如下:
1 |
|
如果不指定一个镜像的版本标签,例如只使用 ubuntu,docker 将默认使用ubuntu:latest
镜像。
获取一个新的镜像
当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用docker pull
命令来下载它。
查找镜像
我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为:https://hub.docker.com/
我们也可以使用docker search
命令来搜索镜像。比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。
1 |
|
输出介绍:
NAME:镜像仓库源的名称
DESCRIPTION:镜像的描述
OFFICIAL:是否 docker 官方发布
stars:类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED:自动构建。
删除镜像
镜像删除使用docker rmi
命令,比如我们删除 hello-world 镜像:
1 |
|
创建镜像
当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
从已经创建的容器中更新镜像,并且提交这个镜像
使用 Dockerfile 创建一个新的镜像
更新镜像
更新镜像是首先利用镜像创建一个容器,然后按照需求更改容器,最后将容器保存为新的镜像。
比如我们使用 ubuntu 18.04 创建一个容器:
1 |
|
执行ping
命令,发现没有这个命令:
使用下列命令安装:
1 |
|
运行ping
命令,可以运行。
输入exit
退出这个容器,这个ID为9fa201c74faa
的容器是按照我们的需求更改的容器,我们可以通过docker commit
来提交该容器的副本。
1 |
|
参数说明:
- -m:提交的描述信息
- -a:指定镜像作者
- e218edb10161:容器 ID
- runoob/ubuntu:v2:指定要创建的目标镜像名
此时本地已经有了ubuntu:my
镜像。
使用新镜像启动一个容器:
1 |
|
此时已经可以直接使用ping
命令了。
构建镜像
我们使用命令docker build
, 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
接下来我们创建一个test
文件夹,并新建一个 Dockerfile 文件。
1 |
|
输入以下内容:
1 |
|
注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:
1
2
3
4
>FROM centos
>RUN yum -y install wget
>RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
>RUN tar -xvf redis.tar.gz以上执行会创建 3 层镜像。可简化为以下格式:
1
2
3
4
>FROM centos
>RUN yum -y install wget \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& tar -xvf redis.tar.gz如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。
使用docker build
命令构建一个镜像:
1 |
|
参数说明:
- -t :指定要创建的目标镜像名
- . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
指令最后一个
.
又被称为上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。
如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。
上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。
使用docker images
查看镜像列表:
我们可以使用新的镜像来创建容器
1 |
|
从上面看到新镜像已经包含我们创建的用户 runoob。
设置镜像标签
我们可以使用docker tag
命令,为镜像添加一个新的标签。
1 |
|
docker tag 镜像ID,这里是 a50c05872c53 ,用户名称、镜像源名(repository name)和新的标签名(tag)。
使用docker images
命令可以看到,ID为 a50c05872c53 的镜像多了一个标签。