栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

docker之数据挂载&&端口暴漏

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

docker之数据挂载&&端口暴漏

文章目录
  • 前言
  • docker数据管理
    • 数据卷
    • 挂载
  • 数据卷容器
  • 容器互联(使用centos镜像)
  • 暴露端口
    • ① -p:指定端口
    • ② -P:随机端口
            • /sbin/init 内核启动时主动呼叫的第一个进程

前言

docker 的镜像是由多个只读文件系统叠加在一起形成的,当我们在启动一个容器的时候,docker会加载这些只读层并在这些只读层的上面(栈顶)增加一个读写层,这是如果修改正在运行的容器中已有的文件,那么这个文件会从只读层复制到读写层。文件中的只读版本还在,只是被上门读写层的该文件副本隐藏,当删除docker 或者重新启动时,之前的更改将会消失。docker中,只读层及在顶部的读写层的组合被称为union file system (联合文件系统)。

  • 为了很好的实现数据保存和数据共享,docker提出了volume概念,就是将绕过默认的联合文件系统,以正常的文件或者目录的形式存在于宿主机上即数据卷
docker数据管理

docker在容器中管理数据主要由两种方式

  • 数据卷
  • 挂载主机目录
数据卷

他是一个可供一个或者是多个容器使用的特殊目录。绕过ufs,可以提供很多有用的特性:数据卷可以在容器之间共享和重用 - 对数据卷的修改会立马生效 - 对数据卷的更新,不会影响镜像 - 数据卷默认会一直存在,即使容器被删除 Docker中提供了两种挂载方式,-v和-mount

[root@localhost ~]# docker volume ls  #查看所有数据卷
DRIVER    VOLUME NAME
[root@localhost ~]# docker volume create mydata  #创建mydata数据卷
mydata
[root@localhost ~]# docker volume inspect mydata  #查看Mydata数据卷的详细
[
    {
        "CreatedAt": "2021-11-29T21:33:25+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/mydata/_data",
        "Name": "mydata",
        "Options": {},
        "Scope": "local"
    }
]
  • 注:Mountpoint为数据在本机存储的位置,如果磁盘存储空间不足可修改此位置
挂载

方式一:

格式:docker run -v 宿主机目录:挂载容器中的目录

#例
docker run -it -v /var/www/html:/data1 --name xiaobai nginx /bin/bash

#这时候另开一个终端,去宿主机创建一个abc
cd /var/www/html
touch abc

#再回到上一个终端查看/data1目录下就会多出一个abc
[root@localhost ~]# docker run -it -v /var/www/html:/data1 --name xiaobai nginx /bin/bash
root@8cf48d86e03c:/# ls
bin    dev                   etc   lib64  opt   run   sys  var
boot   docker-entrypoint.d   home  media  proc  sbin  tmp
data1  docker-entrypoint.sh  lib   mnt    root  srv   usr
root@8cf48d86e03c:/# ls /data/
111
root@8cf48d86e03c:/# etit

[root@localhost ~]# cd /var/www/html/
[root@localhost html]# touch 111
[root@localhost html]# ls
111
数据卷容器

原理:让两个容器实现数据共享

1.创建一个数据卷容器,指定名字为web100,两个卷:/data1 和 /data2
docker run -it --name web100 -v /data1 -v /data2 nginx /bin/bash

2.另起一个终端,将这个数据卷容器挂载到centos:7的容器上
docker run -it --name db1 --volumes-from web100 nginx /bin/bash
#此时 ls / 查看就会发现有 /data1 和 /data2 两个目录


容器互联(使用centos镜像)
docker run -itd -P --name web1 centos:7 /bin/bash		//创建并运行容器取名web1,端口号随机映射
docker exec -it 容器ID /bin/bash

#另起一个终端
docker run -itd -P --name web2 --link web1:web1 centos:7 /bin/bash	//创建并运行容器取名web2,链接到web1和其通信
#--link:打通隧道
docker exec -it 容器ID /bin/bash

#两个容器都下载
yum -y install net-tools	//各自下载ifconfig的工具
验证:
进web2容器 ping web1

暴露端口 ① -p:指定端口
docker run -itd -p 8081:80 nginx:latest /bin/bash	
//暴露端口8081,相当于把容器的80端口映射到宿主机上的8081端口

docker exec -it d144113140b5 /bin/bash -c nginx
//进入这个容器并启动nginx
//-c:在宿主机环境执行容器内命令


② -P:随机端口
docker run -itd -P nginx:latest /bin/bash

docker exec -it 12fda7fd0f3c /bin/bash -c nginx


在宿主机环境执行容器内命令

docker exec -it 容器ID /bin/bash -c 'nginx'
docker exec 容器ID/容器 name 执行的命令

怎么把宿主机的文件传入到容器内部

docker cp 源文件路径 容器ID:目标文件路径
docker cp /opt/abc 容器ID:/opt/abc

进入容器没有systemctl命令解决方法:

添加--privileged=true(指定此容器是否为特权容器),使用此参数,则不能用attach

docker run -itd --name test02 --privileged=true centos:7 /sbin/init

/sbin/init 内核启动时主动呼叫的第一个进程

#可以使用docker inspect 容器ID

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/618058.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号