【docker】之基础篇二

目录

  • 一、docker的数据管理
    • 1、数据卷
    • 2、数据卷容器:
  • 二、端口映射与容器互联
    • 容器之间的通信
  • 三、Docker查看日志
  • 四、Dockerfile定制镜像
    • 1、DockerFile常用的命令
    • 2、DockerFile实操

一、docker的数据管理

在生产环境中使用docker,需要对数据进行持久化,或者多个容器之间进行数据共享。
容器中管理数据的两种方式:
数据卷:容器内的数据直接映射到本地主机环境
数据卷容器:使用特定的容器维护数据卷

1、数据卷

数据卷是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似LINUX的mount行为。
1.创建数据卷

[root@gang ~]# docker volume create -d local test
数据卷的位置:
[root@gang ~]# ll /var/lib/docker/volumes/

docker volume 还支持 inspect(查看详细信息),ls(列出已有数据卷),prune(清理无用数据卷),rm(删除数据卷)等。
2、绑定数据卷
使用旧的-v标记可以在容器内创建一个数据卷:

docker run -d -P --name=web -v /web:/opt/web centos:7

这种挂载数据卷的默认权限是读写(rw),用户也可以通过ro指定为只读:
加了:ro之后,容器内对挂载数据卷中的数据也就无法修改了。

2、数据卷容器:

如果用户需要在多个容器之间共享一些可持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载的。

创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到 /dbdata:

[root@gang ~]# docker run -it -v /dbdata --name=dbdata centos:7

然后在其他容器中使用–volumes-from来挂载dbdata容器中的数据卷,例如创建db1和db2两个容器,并从dbdata容器挂载数据卷。

[root@gang /]# docker run -it --volumes-from dbdata --name=db2 centos:7

可以发现这几个容器共享同一个目录

如果删除了挂载的容器dbdata,数据卷并不会自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载它的容器时显式使用docker rm -v命令来指定同时删除关联的容器。

二、端口映射与容器互联

1.从外部访问容器应用
在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。
要让外部访问这些应用时,可以通过 -P或-p参数来指定端口映射。
使用-P大写标记时,docker会随机映射一个高端端口到内部容器开放的网络端口。
-p:指定可以映射的端口。

[root@redhat nginx]# docker run -d -P training/webapp python app.py

1、映射到所有接口的地址:

[root@redhat nginx]# docker run -d -p 5000:5000 training/webapp python app.py

2、映射到指定地址的指定端口:

[root@redhat nginx]# docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

3.映射到指定地址的任意端口:

[root@redhat nginx]# docker run -d -p 127.0.0.1::5000 training/webapp python app.py

容器之间的通信

使用link方式让容器之间

三、Docker查看日志

docker logs 容器名字/id

docker logs -f -tail=10 mytomcat
docker logs -t --since=“2024-01-18” mytomcat

--since :此参数指定了输出日志开始日期,即只输出指定日期之后的日志。
-f:查看实时日志。
-t:查看日志产生的日期
-tail-10:查看最近的10条日志

四、Dockerfile定制镜像

当官方的镜像不能满足我们的需求时,我们就需要定制镜像
镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本时dockerfile。
Dockerfile是个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每条指令的内容,就是描述该层应当如何构建。

1、DockerFile常用的命令

1.FROM
功能为指定基础镜像,并且必须是第一条指令。 如果不以任何镜像为基础,那么写法为:FROM scratch。 同 时意味着接下来所写的指令将作为镜像的第一层开始 语法:

FROM <image>
FROM <image>:<tag>

2.RUN
RUN指令在镜像的构建过程中执行特定的命令,并生成一个中间镜像。
shell 格式:

RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。

exec格式:

RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

注意:多行命令不要写多个RUN,原因是Dockerfile中每一个指令都会建立一层. 多少个RUN就构建了多 少层镜像,会造成镜像的臃肿、多层,不仅仅增加了构件部署的时间,还容易出错。 RUN书写时的换行 符是\

如果想要具体了解Dockerfile的常用命令可以去看这篇文章:https://blog.csdn.net/m0_51913750/article/details/131563704?

2、DockerFile实操

案例1:创建一个镜像(基于tomcat),里面要有一个index.html页面,并写入hello,docker!
创建一个dockerfile的目录并创建一个Dockerfile的文件。
mkdir /dockerfile
注意:这个文件名必须为Dockerfile

[root@redhat dockerfile]# cat Dockerfile 
FROM tomcat:7
WORKDIR /usr/local/tomcat/webapps/
RUN mkdir ROOT/ && echo 'hello docker!' > ./ROOT/index.html
[root@redhat dockerfile]# docker build -t mytomcat:1.0 .   .表示当前文件

可以用docker images验证是否成功了。

虚悬镜像:没有名字,也没有标签,为< none>,这是因为新镜像跟原来镜像的名称和标签相同。

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

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

相关文章

R语言的ggplot2绘制分组折线图?

R绘制分组折线图.R 首先看数据情况&#xff1a;group有3组。Time有3组&#xff0c;数据意思是在3组3个时间点测量了某指标&#xff0c;现在要绘制组1、组2、组3某指标y按时间的变化趋势 数据情况&#xff1a; 看看最终的效果图如下&#xff1a; 下面是本次使用的代码 .libPat…

OpenHarmony 应用开发入门 (二、应用程序包结构理解及Ability的跳转,与Android的对比)

在进行应用开发前&#xff0c;对程序的目录及包结构的理解是有必要的。如果之前有过android开发经验的&#xff0c;会发现OpenHarmony的应用开发也很简单&#xff0c;有很多概念是相似的。下面对比android分析总结下鸿蒙的应用程序包结构&#xff0c;以及鸿蒙对比android的诸多…

Spring第七天(AOP)

简介 AOP(Aspect Oriented Programing)面向切面编程&#xff0c;一种编程范式&#xff0c;指导开发者如何组织程序结构 作用 在不惊动原始设计的基础上为其进行功能增强 Spring理念&#xff1a;无入侵式/无侵入式 基本概念 连接点(JoinPoint) : 程序执行过程中的任意位置&a…

ros2学习笔记-CLI工具,记录命令对应操作。

目录 环境变量turtlesim和rqt以初始状态打开rqt node启动节点查看节点列表查看节点更多信息命令行参数 --ros-args topic话题列表话题类型话题列表&#xff0c;附加话题类型根据类型查找话题名查看话题发布的数据查看话题的详细信息查看类型的详细信息给话题发布消息&#xff0…

html Canvas粒子文字特效

代码有点长&#xff0c;下面是代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>HTML5 Canvas粒子效果文字动画特效DEMO演示</title><link rel"stylesheet" href"css/normalize.c…

Bit.Store 加密卡集成主流 BRC20通证,助力 BTC 生态流动性

“Bit.Store 首创性的将包括 ORDI、SATS、以及 RATS 在内的主流 BRC20 资产集成到其加密卡支付中&#xff0c;通过以其推出的加密银行卡为媒介&#xff0c;助力 BTC 生态 Token 的流动性与消费。” 比特币网络在被设计之初&#xff0c;就是以一种去中心化、点对点的现金系统为定…

shardingsphere 出现 Cannot support database type ‘MySQL‘

场景 近日一个项目使用了shardingsphere后出现 java.lang.UnsupportedOperationException: Cannot support database type MySQL , 重点是在dev-pre环境中无法出现这个问题&#xff0c;而是在prod环境中会发生&#xff0c;且prod也不是100%发生&#xff0c; 当流量过大时会发…

js-cookie的使用--token的数据实现持久化

1.下载 npm install js-cookie 2.引入 import Cookies from "js-cookie"; 3.使用 // 写入cookie Cookies.set(name, value) // 读取 Cookies.get(name) // > value Cookies.get(nothing) // > undefined // 读取所有可见的cookie Cookies.get() // 删除某项co…

Vue2:全局事件总线

一、场景描述 之前我们学习了&#xff0c;通过props实现父子组件之间的通信。通过自定义组件&#xff0c;实现了子给父传递数据。 那么&#xff0c;兄弟关系的组件&#xff0c;如何通信了&#xff1f;任意组件间如何通信了&#xff1f; 这个时候&#xff0c;就要学习全局事件总…

JavaScript快速入门一

概述 JavaScript ECMAScript JavaScript特有的东西(BOM DOM) ECMAScript&#xff1a;客户端脚本语言&#xff0c;是欧洲计算机制造商协会ECMA&#xff0c;制定的标准&#xff0c;统一了所有客户端脚本语言的编码方式BOM&#xff1a;Browser Object Model&#xff0c;浏览器…

C#调用C动态链接库

前言 已经没写过博客好久了&#xff0c;上一篇还是1年半前写的LTE Gold序列学习笔记&#xff0c;因为工作是做通信协议的&#xff0c;然后因为大学时没好好学习专业课&#xff0c;现在理论还不扎实&#xff0c;不敢瞎写&#xff1b; 因为工作原因&#xff0c;经常需要分析一些字…

Gin之gin介绍和安装

1、gin介绍 1.1 gin 是什么&#xff1f; Gin 是一个用 Go (Golang) 编写的 HTTP web 框架。 它是一个类似于 martini 但拥有更好性能的 API 框架&#xff0c;由于 httprouter&#xff0c;速度提高了近 40 倍。如果你需要极好的性能&#xff0c;使用 Gin 吧。 https://githu…

Unity-Arduino Bluetooth Plugin蓝牙插件使用时需要注意的一些事项(附插件下载链接)

一些参考链接 1.Android 无法扫描蓝牙设备踩坑 2.权限相关 1-首先要明确你的蓝牙设备是经典蓝牙还是低功耗&#xff08;BLE)蓝牙&#xff1a; 转载&#xff1a;Android蓝牙开发—经典蓝牙和BLE&#xff08;低功耗&#xff09;蓝牙的区别 2.如果是BLE蓝牙&#xff0c;需要打勾…

display布局实现一侧的盒子高度与另一侧盒子的高度等高

实现两边容器的高度等高主要是用 align-items: stretch 这个属性 stretch 拉伸: 子元素没有高度或高度为auto&#xff0c;将占满整个容器的高度 <template><div><h3>我是测试页面</h3><div class"container"><div class"left-…

原码,补码的除法

目录 一.原码的除法 &#xff08;1&#xff09;恢复余数法 重点看这 &#xff08;2&#xff09;不恢复余数法&#xff08;加减交替法&#xff09; 重点看这 二. 补码除法运算 重点看这 我们已经学习了如何进行原码&#xff0c;补码的乘法&#xff1a; http://t.csdnimg…

RibbonGroup 添加QAction下拉带Menu

实现代码如下所示&#xff1a; { QMenu* pMenu new QMenu(this); pMenu->addAction(QIcon(":/QRibbonDemo/res/smallpaste.png"), tr("Menu1")); pMenu->addAction(QIcon(":/QRibbonDemo/res…

Django随笔

关于Django的admin 1. 在url中把 from django.contrib import admin 重新解开 把path(admin/,admin.site.urls), 解开 2. 注册app&#xff0c;在配置文件中写 django.contrib.admin, 3.输入命令进行数据库迁移 Django国际化 配置文件中&#xff08;改成中文&#xff09; LA…

NLP自然语言处理介绍

自然语言处理&#xff08;NLP&#xff0c;Natural Language Processing&#xff09;是一门涉及计算机与人类语言之间交互的学科。它的目标是使计算机能够理解和生成人类语言&#xff0c;从而更好地处理和解析大量的文本数据。NLP不仅是人工智能领域中一个重要的分支&#xff0c…

62 C++ 多线程 -- mutex互斥量只能使用一次的问题分析-----以及解决方案递归mutex:recursive_mutex。

一 前提 以及问题 我们注意到&#xff0c;如果mutex.lock()两次&#xff0c;就会有问题 如下的代码有runtime exception mutex mymutex;mymutex.lock();mymutex.lock();//共享数据访问处理代码mymutex.unlock();mymutex.unlock(); 但是有这样的case存在 class Teacher183 …

SPI 动态服务发现机制

SPI&#xff08;Service Provier Interface&#xff09;是一种服务发现机制&#xff0c;通过ClassPath下的META—INF/services文件查找文件&#xff0c;自动加载文件中定义的类&#xff0c;再调用forName加载&#xff1b; spi可以很灵活的让接口和实现分离&#xff0c; 让API提…