当前位置: 首页 > news >正文

【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>,这是因为新镜像跟原来镜像的名称和标签相同。

相关文章:

  • 130 删除二叉搜索树中的节点
  • 怎么提升搜狗网站排名
  • ora-12154无法解析指定的连接标识符
  • OCR识别网络CRNN理解与Pytorch实现
  • 堆优化的dijkstra板子
  • 让页面里的字体变清晰,变细用CSS怎么做?
  • 蓝桥杯省赛无忧 第二章 基础算法 课件33 构造
  • 项目实战————苍穹外卖(DAY11)
  • Mysql运维篇(三) MySQL数据库分库分表方案
  • 测试驱动开发:基于Jenkins+GoTest+HTML的持续化集成
  • vue3-模版引用
  • docker 部署 sentinel
  • stm32 FOC 电机介绍
  • 九、Qt C++ 数据库开发
  • 大语言模型无代码构建知识图谱(2)--环境准备
  • 【EOS】Cleos基础
  • Computed property XXX was assigned to but it has no setter
  • Druid 在有赞的实践
  • idea + plantuml 画流程图
  • Java Agent 学习笔记
  • JavaScript-Array类型
  • Java读取Properties文件的六种方法
  • Node + FFmpeg 实现Canvas动画导出视频
  • React-flux杂记
  • React组件设计模式(一)
  • Sass Day-01
  • 汉诺塔算法
  • 后端_ThinkPHP5
  • 基于axios的vue插件,让http请求更简单
  • 解决iview多表头动态更改列元素发生的错误
  • 前言-如何学习区块链
  • 强力优化Rancher k8s中国区的使用体验
  • 如何在 Tornado 中实现 Middleware
  • 收藏好这篇,别再只说“数据劫持”了
  • 算法-图和图算法
  • 微信小程序:实现悬浮返回和分享按钮
  • 云大使推广中的常见热门问题
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​力扣解法汇总946-验证栈序列
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (四) Graphivz 颜色选择
  • (一)WLAN定义和基本架构转
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET Core引入性能分析引导优化
  • .NET Core中Emit的使用
  • .NET 发展历程
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .net6Api后台+uniapp导出Excel
  • .NET企业级应用架构设计系列之应用服务器
  • @Builder用法
  • [BZOJ 3680]吊打XXX(模拟退火)