docker镜像与容器实践

news2024/12/23 22:22:37

一、引子

镜像和容器是不同的概念,本文主要是为了通过实践来强化对这两种不同概念的理解。

二、安装docker

安装docker,执行以下命令即可:

# 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置国内源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker,默认最新版
yum -y install docker-ce
# 启动docker服务
systemctl start docker
# 设置自启动
systemctl enable docker
# 验证
docker -v

三、镜像实践

3.1、Dockerfile详解

请阅读我此前写的一篇博客:Dockerfile详解

3.2、Dockerfile构建镜像

我们以这个Dockerfile来举例(D不能小写):

FROM ubuntu
MAINTAINER docker_user docker_user@email.com
RUN apt-get update && apt-get install -y nginx
CMD ["nginx","-g","daemon off;"]

执行镜像构建命令:

docker build -f Dockerfile -t nginx:v1 .

在这里插入图片描述

经过一通运行之后,镜像够构建成功了

在这里插入图片描述

从该docker build命令中我们可以看出构建的镜像名为nginx:v1,当然开发者也可以自己命名。从上述输出内容的先后顺序我们可以看出,docker构建镜像是按照Dockerfile中开发者定义的命令由上至下依次执行的,且均会生成对应的层。我们可通过如下命令查看该镜像的层:

在这里插入图片描述

3.3、docker commit构建镜像

除了通过Dockerfile构建镜像,我们还可以通过docker commit命令构建镜像,两者主要区别为生成镜像的大小差异,通过Dockerfile构建的镜像只有在docker build时才会增添新的资源,而docker commit基本上是获取运行中的容器快照保存为镜像,如果运行的容器正在生成大量日志或更新包文件,那么当docker commit后这些数据会被保存至镜像中,因而通常docker commit构建的镜像相对Dockerfile构建的要大一些。

下面我们通过docker commit命令构建上述nginx:v1镜像,在此之前,我们需要先将镜像启动为容器,如下所示:

在这里插入图片描述

通过docker exec命令进入容器并安装网络配置工具net-tools,如下所示:

在这里插入图片描述

然后退出容器,在宿主机上通过docker commit构建一个名为nginx:v2的新镜像,如下所示:

在这里插入图片描述

3.4、镜像的其他操作

镜像查看:

docker images
# 得到REPOSITORY、TAG、IMAGE ID、CREATED、SIZE字段值,后续会用到

镜像删除:

docker rmi <REPOSITORY>:<TAG>

镜像上传:

# 给镜像打标签
docker tag <REPOSITORY>:<TAG> <仓库地址>/<项目名>/<REPOSITORY>:<TAG>

# 镜像上传
docker push <仓库地址>/<项目名>/<REPOSITORY>:<TAG>

镜像拉取:

# 拉取私有仓库镜像
docker pull <仓库地址>/<项目名>/<REPOSITORY>:<TAG>

# 拉取官方镜像仓库的镜像
docker pull <REPOSITORY>:<TAG>

镜像的压缩:

docker save nginx:v1 > /tmp/nginx.tar

镜像的导入:

docker load < /tmp/nginx.tar

四、容器实践

4.1、容器创建

通过docker run命令将构建的镜像运行为容器,具体命令如下:

docker run -dt --name nginx -p 8080:80 nginx:v1

其中:

-d:代表docker将容器在后台运行并输出该容器ID;
-t:代表docker为该容器分配一个虚拟终端;
--name:代表为容器取一个名字;
-p:代表设置该容器的端口映射,其中冒号左边代表宿主机映射端口,右边代表容器端口,容器端口也是Dockerfile中设置的暴露端口;
nginx:v1: 代表通过此镜像启动容器

其它命令查看:

docker run --help

4.2、容器执行

在应用开发过程中,我们不可避免要进入容器并进行相应调试,Docker的相应的命令如下:

docker exec -it 422 /bin/bash

其中:

-t:代表分配一个伪终端;
-i:代表保持交互模式;
422:代表容器ID,只要是能够证明唯一就可以,不用全输入;
/bin/bash:代表以bash方式与容器进行交互;

其它命令查看:

docker exec --help

4.3、容器删除

删除容器命令:

docker rm <CONTAINER ID>

强制删除容器命令:

docker rm -f <CONTAINER ID>

4.4、停止运行的容器

停止运行的容器命令:

docker stop <CONTAINER ID>

4.5、容器查看

查看正在运行的容器

docker ps

查看所有容器(包括正在运行的以及停止运行的):

docker ps -a

查看单一容器

docker inspect <CONTAINER ID>

查看容器日志:

docker logs <CONTAINER ID>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168740.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

显示Linux系统上的服务

init 和 systemd 都是 Linux的 init 守护进程&#xff0c;systemd出现较晚&#xff0c;最近的 Linux 发行版中很常用。init 使用service命令管理服务&#xff0c;而Systemd用systemctl命令管理服务。init 和 systemd 都是 Linux的 init 守护进程&#xff0c;即使你的 Linux 系统…

Maven3.8.*系列 settings.xml详解

文章目录文末,拿完整Settings配置文件设置参考介绍简要概述设置详细信息简单的价值观插件组服务器密码加密的镜像代理配置文件激活性能库插件的储存库活动概况直达文末,拿完整Settings配置文件结语文末,拿完整Settings配置文件 设置参考 介绍 简要概述 的 settings 元素 set…

返乡上云图

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

PicGo+Github搭建图床

文章目录一、Github仓库创建二、配置PicGo三、实际体验四、PicGo 2.3.1参考资料一、Github仓库创建 PS&#xff1a;它只会显示一次&#xff0c;所以最好把它复制下来到你的备忘录存好&#xff0c;方便下次使用&#xff0c;否则下次有需要重新新建&#xff1b; 二、配置PicGo …

Linux进程控制(进程退出+进程等待)

目录 一、子进程创建 1.1 fork函数深入 1.2 写时拷贝 二、进程退出 2.1.1 进程退出码概念 2.1.2 系统退出码文字描述 2.1.3 _exit和exit函数 2.1.4 查看退出码 三、进程等待 3.1 进程等待解决僵尸进程 3.2 进程等待方法 3.2.1 wait 3.2.2 waitpid(&#xff09; 四、…

seata部署指南(v1.6.1)

Seata 搭建 db模式版本 V1.6.1一、 简介二、下载三、建表&#xff08;仅db&#xff09;四、配置 seata server 参数4.1、V1.4.2之前方式4.2、V1.4.2 之后推荐方式(seataServer.properties)五、配置Server5.1、 修改 appplication.yml5.1.1、 修改 appplication.yml seata.store…

文件操作(File类)

文章目录一、初识文件二、File类构造方法常用方法一、初识文件 我们目前是如何存储数据的?弊端是什么? int a 1; int[] arr new int[5];我们这些数据是在内存中存储的&#xff0c;是不能够长久保存的。 那么&#xff0c;我们的计算机当中有没有一块硬件可以长久存储数据…

PostgreSQL(一)Windows安装

目录一、下载二、安装PostgreSQL三、安装StackBuilder四、打开PostgreSQL管理工具pgAdmin五、打开命令行一、下载 下载地址&#xff1a; https://www.enterprisedb.com/downloads/postgres-postgresql-downloads 下载后安装包如下&#xff1a; 二、安装PostgreSQL 双击打开安…

DataX使用入门

DataX 是阿里云 DataWorks数据集成 的开源版本&#xff0c;在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS 等各种异构数据…

Java 日志框架 Log4J

文章目录引言什么是Log4JLog4J三大组件Log4J日志级别Log4J基本使用自定义配置文件Appender示例FileAppenderDailyRollingFileAppenderRollingFileAppenderJDBCAppender自定义Logger引言 Java 日志框架 JUL 在这篇文章中已经向大家介绍了我们为什么要使用日志文件、常见的日志…

张力调节(精密调节气阀应用)

跳舞轮对应张力调节范围&#xff0c;我们可以通过改变气缸的气压方式间接改变&#xff0c;张力跳舞轮在收放卷闭环控制上的详细应用&#xff0c;可以参看下面的文章链接&#xff0c;这里我们主要讨论精密可调气阀的模拟量编程问题。 PLC张力控制&#xff08;开环闭环算法分析&…

【实践向】当移除了三级缓存……

本文会手把手带你一起把使用二级缓存替换三级缓存&#xff0c;看下移除了三级缓存&#xff0c;只有二级缓存会出什么问题&#xff0c;用实践回答那个被问了无数次的“为什么要有三级缓存&#xff1f;”以及“二级缓存解决不了循环依赖问题吗&#xff1f;”等类似问题(&#xff…

“Flash配置不当漏洞”详解

危害 可被用来进行跨域访问&#xff0c;可能会导致“跨站点伪造请求”或“跨站点跟踪”&#xff08;“跨站点脚本编制”的变体&#xff09;之类的攻击&#xff0c;从而导致其它用户的信息被非法读取。 导致不受信任的第三方域的flash也能访问当前域的资源&#xff0c;绕过同源策…

一、构建自己的图像分类数据集(Datawhale组队学习)

文章目录安装配置环境图像采集采集函数爬取一类图片爬取多类图片一些参考类别的关键词制作图像分类数据集的注意事项删除多余文件删除系统自动生成的多余文件删除gif格式的图像文件删除非三通道的图像统计图像尺寸、比例分布采用的数据集统计数据集的基本信息可视化图像尺寸分布…

Embarcadero Dev-C++第一次使用注意事项

Embarcadero Dev-C第一次使用注意事项 Embarcadero Dev-C简介 2000年左右&#xff0c;Bloodshed software开发了Dev-C &#xff0c;提供轻量、免费、开源的C/CIDE。Dev-C是最适合初学C语言的IDE之一&#xff0c;但至2015年Dev C5.11&#xff0c;停止了更新维护了。 后来&…

springboot,vue电影院售票系统

开发工具&#xff1a;IDEA服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8项目构建&#xff1a;maven数据库&#xff1a;mysql5.7系统用户前台和管理后台两部分&#xff0c;项目采用前后端分离前端技术&#xff1a;vue elementUI服务端技术&#xff1a;springbootmybatis项目功…

pom文件中自定义的repository不生效

问题描述 对应的pom中依赖获取失败 pom文件依赖配置如下: <dependencies><dependency><groupId>it.geosolutions</groupId><artifactId>geoserver-manager</artifactId><version>1.7.0</version><exclusions><excl…

verilog学习笔记- 15)动态数码管显示实验

目录 简介&#xff1a; 实验任务&#xff1a; 硬件设计&#xff1a; 程序设计&#xff1a; 下载验证&#xff1a; 简介&#xff1a; 由于一般的静态驱动操作虽然方便&#xff0c;但占用的 I/0 口较多&#xff0c;例如要驱动6 位 8 段数码管&#xff0c;以静态驱动方式让数…

值得收藏的30道Python基础练手题(附详解)

今天给大家分享30道Python练习题&#xff0c;建议大家先独立思考一下解题思路&#xff0c;再查看答案。 1. 已知一个字符串为 “hello_world_JMzz”&#xff0c;如何得到一个队列 [“hello”,”world”,”JMzz”] &#xff1f; 使用 split 函数&#xff0c;分割字符串&…

ESP8266 ArduinoIDE 闪存文件操作系统

一、闪存文件系统基本操作 esp8266 的采用 SPIFFS 嵌入式文件系统&#xff0c;在内部 Flash 为 4M&#xff0c;其中 1M 用于存储程序&#xff0c;其他的空间有一部分用于系统&#xff0c;3M 中剩下的大部分空间可以用来存放文件。 其中这个空间大小是可以自定义的&#xff0c;…