【docker】之基础篇二

目录

一、docker的数据管理

在生产环境中使用docker,需要对数据进行持久化,或者多个容器之间进行数据共享。

容器中管理数据的两种方式:

数据卷:容器内的数据直接映射到本地主机环境

数据卷容器:使用特定的容器维护数据卷

1、数据卷

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

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

docker volume 还支持 inspect(查看详细信息),ls(列出已有数据卷),prune(清理无用数据卷),rm(删除数据卷)等。
2、绑定数据卷

使用旧的-v标记可以在容器内创建一个数据卷:

c 复制代码
docker run -d -P --name=web -v /web:/opt/web centos:7

这种挂载数据卷的默认权限是读写(rw),用户也可以通过ro指定为只读:

加了:ro之后,容器内对挂载数据卷中的数据也就无法修改了。

2、数据卷容器:

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

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

c 复制代码
[root@gang ~]# docker run -it -v /dbdata --name=dbdata centos:7

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

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

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

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

二、端口映射与容器互联

1.从外部访问容器应用

在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。

要让外部访问这些应用时,可以通过 -P或-p参数来指定端口映射。

使用-P大写标记时,docker会随机映射一个高端端口到内部容器开放的网络端口。

-p:指定可以映射的端口。

cpp 复制代码
[root@redhat nginx]# docker run -d -P training/webapp python app.py

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

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

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

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

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

bash 复制代码
[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

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

四、Dockerfile定制镜像

当官方的镜像不能满足我们的需求时,我们就需要定制镜像

镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本时dockerfile。

Dockerfile是个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每条指令的内容,就是描述该层应当如何构建。

1、DockerFile常用的命令

1.FROM

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

c 复制代码
FROM <image>
FROM <image>:<tag>

2.RUN

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

c 复制代码
RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。

exec格式:

c 复制代码
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

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

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

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

相关推荐
BugShare3 分钟前
告别来回切换,Navop:一站式整合数据库、SSH、终端与 AI 的开发运维工作台
运维·数据库·ssh
奈斯先生Vector16 分钟前
从“能调用”到“可替换”:Coze 多模型 API 编排层设计指南
linux·运维·人工智能·ubuntu·平面·ios
技术不支持24 分钟前
wsl 离线安装 Debian 11, Debian 12等指定版本
运维·debian
Databuff27 分钟前
使用Pinpoint作分布式链路跟踪系统
运维·分布式·运维开发·开源软件
李少兄29 分钟前
Linux 服务器从零部署 kkFileView 完全指南(Docker 方案)
linux·服务器·docker
小张同学a.31 分钟前
OpenStack 私有云实战 3—— Neutron 网络服务与 Dashboard 控制台部署
linux·运维·服务器·openstack
2301_旺仔36 分钟前
【Docker 镜像仓库】
docker·云原生·仓库
味悲36 分钟前
HAProxy 负载均衡实战:从环境搭建到七层/四层/HTTPS 全解析
运维·https·负载均衡
2401_8346369942 分钟前
Docker 容器化技术全解:从镜像构建到容器编排的完整教案1
java·docker·容器
^酸酸1 小时前
Prometheus 监控架构部署实战:二进制与 Docker 双方案
docker·架构·prometheus