Docker实战(一)之使用Docker镜像

简介: 镜像是Docker三大核心概念中最为重要的,自Docker诞生之日起“镜像”就是相关社区最为热门的关键字。Docker运行容器前需要本地存在对应的镜像,如果镜像没有保存至本地,Docker会尝试先从默认镜像仓库中下载,用户也可以通过配置,使用自定义的镜像仓库。

镜像是Docker三大核心概念中最为重要的,自Docker诞生之日起“镜像”就是相关社区最为热门的关键字。

Docker运行容器前需要本地存在对应的镜像,如果镜像没有保存至本地,Docker会尝试先从默认镜像仓库中下载,用户也可以通过配置,使用自定义的镜像仓库。

1.获取镜像

docker pull ubuntu 获取ubuntu最新镜像

如果要获得指定的ubuntu镜像可以写成这样 docker pull ubuntu:14.04

注意:

一般来说,镜像的latest标签意味着该镜像的内容会跟踪最新的非稳定版本而发布,内容是不稳定的。当前Ubuntu最新的发行版本为16.04,latest镜像实际上就是16.04镜像,用户可以下载ubuntu:16.04镜像并查看,两者的数字摘要值是否一致的。从稳定性上考虑,不要在生产环境中忽略镜像标签信息或使用默认的latest标记的镜像。

 

2.查看镜像信息

(1)使用image命令查看镜像信息

docker images 该命令可以查看docker容器所有的镜像

在列出的信息中,可以看到以下几个字段的信息:

来自哪个仓库,比如ubuntu仓库用来保存ubuntu的镜像;

镜像的标签信息,比如latest标注不同的版本信息.标签只是标记,并不能标识镜像内容;

镜像的ID,如nginx的ID为cd5239a0906a,当两个镜像的ID相同时,说明它们目前实际上指向同一个镜像;

创建时间,说明镜像最后的更新时间;

镜像大小,优秀的镜像往往体积都比较小;

其中镜像ID非常重要,它唯一标识镜像,在使用镜像ID的时候,一般可以使用该ID的前很多个字符组成的可区分串来代替完整的ID。'

 

(2)使用tag命令添加镜像标签

为了方便在后续工作中使用特定的镜像,还可以使用docker tag命令来为本地镜像任意添加新的标签。例如添加一个新的myubuntu:latest镜像标签:

docker tag ubuntu:latest myubuntu:latest

docker images

 

(3).使用inspect命令查看详细信息

使用docker inspect命令可以获取该镜像的详细信息,包括制作者,适应架构,各层数字摘要等:

docker inspect ubuntu:14.04

 

返回的是一个JSON格式的消息,如果我们只要其中一项内容时,可以使用参数-f来指定,例如,获取镜像的Os:

docker inspect -f {{.Os}}

 

(4).使用history命令查看镜像历史

例如,查看ubuntu:14.04镜像的创建过程,可以使用如下命令:

docker history ubuntu:14.04

注意过长的命令被自动截断了,可以使用前面提到的--no-trunc选项来输出完整命令

 

3.搜寻镜像

使用docker search命令可以搜索远端仓库中共享的镜像,默认搜索官方仓库中的镜像。用法为docker search 镜像名

例如搜寻tomcat的镜像

可以看到返回了很多包含关键字的镜像,其中包括镜像名字,描述,星级(表示该镜像受欢迎程度)、是否官方创建、是否自动创建等。

默认的输出结果将按照星级评价进行排序。

4.删除镜像

(1)使用标签删除镜像

例如我要删除之前定义的mybuntu:latest镜像,可以使用下面的命令:

docker rmi myubuntu:latest

 

当镜像只剩下一个标签的时候就要特别小心,此时再使用docker rmi命令会彻底删除镜像。

例如删除的标签为ubuntu:14.04的镜像,由于该镜像没有额外的标签指向它,执行docker rmi命令,可以看出它会删除这个镜像文件的所有层:

 

 

(2)使用id删除镜像

注意:当有该镜像创建的容器存在时,镜像文件默认是无法被删除的,例如,先利用ubuntu:14.04镜像创建一个简单的容器并输出一句话

示例如下:

 

docker ps -a 命令可以看到本机上存在的所有容器:

 

可以看出,后台存在一个退出状态的容器,是刚基于ubuntu:14.04镜像创建的。

试图删除该镜像,Docker会提示有容器正在运行,无法删除:

 

如果想要强行删除镜像,可以使用-f参数。

 注意:通常并不推荐使用-f参数来强制删除一个存在容器依赖的镜像。正确的做法是先删除依赖该镜像的所有容器,再来删除镜像。

比如我要删除nginx

我通过docker ps -a命令查看所有容器

找到ID

执行如下命令即可删除依赖容器最后再删除nginx镜像

docker rm e69099851e18

删除容器成功后再执行如下删除镜像命令

 

5.创建镜像

创建镜像的方法主要有三种:基于已有的镜像的容器创建、基于本地模板导入、基于Dockerfile创建。

(1)基于容器创建

该方法主要是使用docker commit命令。命令格式为docker commit 主要选项有:

-a,  --author--"":作者信息

-c,  --change--[]:提交的时候执行Dockerfile指令,包括CMD|ENTRYPOINT|ENV|EXPOSE|LABLE|ONBUILD|USER|VOLUME|WORKDIR等;

-m, --message="" 提交的信息

-p, --pause=true:提交时暂停容器运行。

下面演示如何使用命令创建一个新镜像。首先启动一个镜像,并在其中进行修改操作,例如创建一个test文件,之后退出:

docker run -it ubuntu:14.04 /bin/bash

touch test

exit

退出后执行docker ps -a命令获得容器ID

记住这个ID:471e0c7a7176

此时该容器跟原ubuntu:14.04镜像相比,已经发送了改变,可以使用docker commit 命令来提交一个新的镜像。提交时可以使用ID或名称来指定容器。

docker commit -m "Added a new file" -a "Docker Newbee" 471e0c7a7176 test:0.1

顺利的话,会返回新创建的镜像ID信息,例如7273577e3795e15cf04d715c29283acaf8d61de8be0409ec2eb03f2d776b883b

此时查看本地镜像列表,会发现新创建的镜像已经存在了。

 

(2)基于本地模板导入

用户可以直接从一个操作系统模板文件导入一个镜像,主要使用docker import 命令。

模板网址:https://openvz.org/Download/template/precreated

wget http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz 远程下载模板

 

下载成功后执行该命令即可实现基于本地模板导入镜像:

cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04

 

查看镜像:

docker images

 

 6.存入镜像和载入镜像

用户可以使用docker save和docker load命令来存入和载入镜像。

1.存出镜像

如果要导出镜像到本地文件,可以使用docker save命令。例如,导出本地的ubuntu:14.04镜像为文件ubuntu_14.04.tar,如下所示:

 docker save -o ubuntu_14.04.tar ubuntu:14.04

 

 2.载入镜像

可以使用docker load将导出的tar文件再导入到本地镜像库,例如从文件ubuntu_14.04.tar导入镜像到本地镜像列表,如下所示:

docker load --input ubuntu_14.04.tar 或docker load < ubuntu_14.04.tar

 

这将导入镜像及其相关的元数据信息(包括标签等)。导入成功后,可以使用docker images命令进行查看。

 

7.上传镜像

可以使用docker push命令进行镜像上传,默认上传到Docker Hub官方仓库(需要登录)。命令格式为:

docker push NAME[:TAG] | [REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]

用户在Docker Hub网站注册后可以上传自制的镜像。例如用户user上传本地的test:latest镜像,可以先添加user/test:latest,然后用docker push命令上传镜像:

docker tag test:latest user/test:latest

第一次上传时,会提示输入登录信息或进行注册。

目录
相关文章
|
27天前
|
Docker 容器
将本地的应用程序打包成Docker镜像
将本地的应用程序打包成Docker镜像
|
11天前
|
NoSQL PHP MongoDB
docker push推送自己搭建的镜像
本文详细介绍了如何搭建和复盘两个Web安全挑战环境:人力资源管理系统和邮件管理系统。首先,通过Docker搭建MongoDB和PHP环境,模拟人力资源管理系统的漏洞,包括nosql注入和文件写入等。接着,复盘了如何利用这些漏洞获取flag。邮件管理系统部分,通过目录遍历、文件恢复和字符串比较等技术,逐步绕过验证并最终获取flag。文章提供了详细的步骤和代码示例,适合安全研究人员学习和实践。
36 3
docker push推送自己搭建的镜像
|
11天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
35 3
实战~如何组织一个多容器项目docker-compose
|
15天前
|
Docker 容器
|
27天前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
54 9
|
27天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
67 7
|
27天前
|
存储 缓存 运维
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像。此机制减少存储占用,提高构建和传输效率。Docker还通过缓存机制提升构建和运行效率,减少重复工作。文章深入解析了Docker镜像分层存储与缓存机制,包括具体实现、管理优化及实际应用案例,帮助读者全面理解其优势与挑战。
44 4
|
1月前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
1月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
29天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
79 0

热门文章

最新文章