5.3 文件挂载及网络



1.-v 目录挂载

我们使用参数 -v ,它可以将宿主机的路径挂载到容器指定路径,通过 -v 参数可以挂载文件、目录和数据卷。

挂载目录的关系如下:

在这里插入图片描述

# 清理容器
docker rm -f $(docker ps -aq)

# 清理容器(只清理停止运行的容器)
docker container prune

# -v 宿主机路径:容器路径
# 挂载的可以是文件,也可以是文件夹
# -v 可以在宿主机自动新建目录
docker run -d \
--name cat1 \
-v /usr/app:/opt/app \
tomcat

# 进入容器,在 /opt/app 下新建文件 f1.txt
docker exec -it cat1 bash

# 创建文件fi
touch /opt/app/f1.txt

#或者直接在文件中输出内容并创建文件
echo 11111111 >/opt/app/f1.txt

# 退出容器的命令行
exit

# 访问宿主机的文件夹
cd /usr/app
ls

# 打开文件查看内容
cat /usr/app/f1.txt

在这里插入图片描述

2.数据卷挂载

# 新建数据卷
docker volume create my-vol

# 查看 my-vol 数据卷的信息
docker volume ls

# 查看真是文件夹路径 /var/lib/docker/volumes/my-vol/_data
docker inspect my-vol

# 挂载 my-vol 数据卷到容器的 /opt/app 路径
docker run -d \
--name cat2 \
-v my-vol:/opt/app \
tomcat

# 在容器的 /opt/app 下新建 f2.txt
docker exec -it cat2 bash

touch /opt/app/f2.txt

# 退出容器的命令行
exit

# 进入 my-vol 数据卷的真实目录,查看 f2.txt
cd /var/lib/docker/volumes/my-vol/_data

ls

在这里插入图片描述

3.端口映射

客户端要访问宿主机内部运行的容器时,可以在宿主机打开一个端口,当客户单访问这个端口时,可以将访问转发到内部的容器。

3.1小写 -p 参数:

通过 -p 参数设置,可以在宿主机上选择一个端口映射到容器的端口。

在这里插入图片描述

# 清理容器
docker rm -f $(docker ps -aq)

# 端口映射
# -p 宿主机端口:容器端口
docker run -d \
--name cat1 \
-p 80:8080 \
tomcat

浏览器访问宿主机映射的端口 80:http://192.168.64.150

看到 tomcat 返回的 404 页,说明已经正常访问到 tomcat 容器

在这里插入图片描述

3.2大写 -P 参数

  1. -P 参数根据镜像中设置的默认端口,来做自动映射。
  • 镜像中的默认端口:EXPOSE 8080
  • 服务器上映射的端口是自动分配的端口
docker run -d --name cat2 \
-P \
tomcat

# 查看使用的端口
docker ps
#  -----------
#  0.0.0.0:49153->8080/tcp, :::49153->8080/tcp

浏览器访问 http://192.168.64.150:49153

  1. 镜像虽然设置的默认端口是 8080,但也可以让tomcat根据配置文件的配置在80端口上启动。
docker run -d --name cat3 \
-v ~/server.xml:/usr/local/tomcat/conf/server.xml \
-P \
tomcat

docker ps

浏览器访问会失败

3.3 --net host参数

使用--net host参数,让容器直接使用服务器的物理网络和端口,不需要再做端口映射;

虽然在容器中会通过EXPOSE关键字默认指定端口,但是我们不应该依赖此关键字,手动创建端口才是更稳妥的方式:
在这里插入图片描述

除了小写-p手动指定端口和大写-P将容器的端口映射到宿主机端口外,我们还可以让容器直接使用宿主机的网络和端口,

docker run -d --name cat4 \
--net host \
tomcat

浏览器访问 http://192.168.64.150:8080

4.虚拟网络

在部署容器时,经常会部署多个容器,并且容器之间要互相访问通信,例如tomcat容器访问mysql容器,这时我们可以使用虚拟网络进行连接、访问;

在这里插入图片描述

容器之间互联可以使用 Docker 的虚拟网络来连接,在创建虚拟网络时,也会创建虚拟网卡;

在 Docker 中可以创建任意多个虚拟网络,容器之间可以通过虚拟网络互联互通。创建虚拟网络时宿主机也会连接到虚拟网络。

# 新建虚拟网络 my-net
docker network create my-net

# 查看虚拟网络
docker network ls

# 查看网络描述信息
docker inspect my-net

# 查看宿主机新建的虚拟网卡
ifconfig

# 清理容器
docker rm -f $(docker ps -aq)

# 新建两个容器 cat1 和 cat2
# 连接到虚拟网络 my-net
docker run -d --name cat1 \
--net my-net \
tomcat

docker run -d --name cat2 \
--net my-net \
tomcat

# 查看两个容器的虚拟网络ip
docker inspect cat1
docker inspect cat2

# 测试网络能否互联互通
# 从宿主机ping两个容器
ping 172.18.0.2
ping 172.18.0.3

# 进入cat1,ping宿主机和cat2
docker exec -it cat1 ping 172.18.0.1
docker exec -it cat1 ping 172.18.0.3
# 从容器访问另一个容器,可以使用容器名称访问,容器内部实现了解析环境
docker exec -it cat1 ping cat2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值