Docker 外部访问容器Pp、数据管理volume、网络network 介绍
Docker 外部访问容器Pp、数据管理volume、网络network 介绍
外部访问容器
容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来 指定端口映射。
当使用 -P 标记时,Docker 会随机映射一个端口到内部容器开放的网络端口。
- ╭─will in ~ 11:11:27
- ╰─(。ŏ_ŏ) docker run -tid --name redis -P redis
- 344ea0c6b48a9db551f530998ce901347d72ba9b03a82628979aaddd53189fe7
- ╭─will in ~ 11:11:32
- ╰─ヾ(;゚;Д;゚;)ノ゙ docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 344ea0c6b48a redis "docker-entrypoint.s…" Less than a second ago Up 2 seconds 0.0.0.0:32769->6379/tcp redis
当使用-p标记时,Docker会映射一个指定端口到内部容器开放的网络端口。
- ╭─will in ~ 11:11:34
- ╰─╰(*°▽°*)╯ docker run -tid --name redis-1 -p 6380:6379 redis
- 4b10e4b28fe7125fb40b8a338f6bb225ef3e4e5917722d63af61e300857a2220
- ╭─will in ~ 11:13:27
- ╰─(。ŏ_ŏ) docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 4b10e4b28fe7 redis "docker-entrypoint.s…" Less than a second ago Up 2 seconds 0.0.0.0:6380->6379/tcp redis-1
数据卷
数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特 性:
- 数据卷 可以在容器之间共享和重用
- 对 数据卷 的修改会立马生效
- 数据卷 默认会一直存在,即使容器被删除
启动一个挂载数据卷的容器并映射端口,将宿主机的 8088映射到nginx容器的80端口,将指定目录/Users/will映射到宿主机的根目录。
- ╭─will in ~ 11:00:50
- ╰─ε=ε=ヾ(;゚д゚)/ docker run -tid --name nginx -v /Users/will:/usr/share/nginx/html -p 8088:80 nginx
- 4d95127b3a60393fe8e078bce8919a53c8f2566066e4968b6a7f73cc1e22176d
通过inspect查看mounts,ports。
- "Mounts": [
- {
- "Type": "bind",
- "Source": "/Users/will",
- "Destination": "/usr/share/nginx/html",
- "Mode": "",
- "RW": true,
- "Propagation": "rprivate"
- }
- ],
- "Ports": {
- "80/tcp": [
- {
- "HostIp": "0.0.0.0",
- "HostPort": "8088"
- }
- ]
- }
通过在宿主机创建文件测试,在终端显示“helloworld”,则完成。
- ╭─will in ~ 11:02:52
- ╰─(ง๑ •̀_•́)ง touch index.html
- ╭─will in ~ 11:03:02
- ╰─٩(ŏ﹏ŏ、)۶ echo "helloworld" > index.html
- ╭─will in ~ 11:03:09
- ╰─(*´・д・)? curl localhost:8088
- helloworld
容器互联network
随着 Docker 网络的完善,强烈建议大家将容器加入自定义的 Docker 网络来连接多个容器, 而不是使用 --link 参数。
下面先创建一个新的 Docker 网络。
- ╭─will in ~ 11:19:21
- ╰─(ノ˚Д˚)ノ docker network create -d bridge my-net
- c90d0b1e79783e673f58f1ec2b2c472f034693eca54296adb364351091f0b9fb
- -d 参数指定 Docker 网络类型,有 bridge overlay 。
创建2个容器并连接到新建的 my-net 网络,通过第2个容器ping第一个容器,如:在busybox2中pingbusybox1,查看是否能够连接成功。
- ╭─will in ~ 11:19:22
- ╰─(º﹃º) docker run -it --rm --name busybox1 --network my-net busybox sh
- / #
- ╭─will in ~ 11:09:29
- ╰─ε=ε=ヾ(;゚д゚)/ docker run -it --rm --name busybox2 --network my-net busybox sh
- / # ping busybox1
- PING busybox1 (172.26.0.2): 56 data bytes
- 64 bytes from 172.26.0.2: seq=0 ttl=64 time=0.148 ms
- 64 bytes from 172.26.0.2: seq=1 ttl=64 time=0.291 ms
- 这样, busybox1 容器和 busybox2 容器建立了互联关系。
- ╭─will in ~/will/project/cluster 11:23:33
- ╰─(゚3゚)~♪ docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 47215f45415c busybox "sh" About a minute ago Up About a minute busybox2
- 4af85ed6478c busybox "sh" 2 minutes ago Up 2 minutes busybox1
总结
- 通过宿主机端口映射到容器,可以在宿主机方便的开启多个服务,例如多个redis、mysql、nginx服务,而不再需要在宿主机做更多配置的变更。
- 通过数据卷可以将宿主机的数据目录挂载到容器中,利用容器的环境各种服务运行已有的数据目录,而不在需求在宿主机部署环境,docker环境也容易部署,减少了宿主机环境部署的复杂性。
- 通过网络network可以将多个容器连接在一起,容器间的通信即可以使用容器名,而不再使用IP,IP的变动的,而容器名是可以自定义的,例如我们在使用nginx配置的时候,需要关联php环境的配置,则此时,我们就可以通过容器名在docker-compose中定义好,而不再需要使用IP。部署集群也是同样好处。
Docker 外部访问容器Pp、数据管理volume、网络network 介绍的更多相关文章
- Docker外部访问容器
容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射. 当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放 ...
- Docker 中的网络功能介绍 外部访问容器 容器互联 配置 DNS
Docker 中的网络功能介绍 | Docker 从入门到实践 https://vuepress.mirror.docker-practice.com/network/ Docker 允许通过外部访问 ...
- Docker网络管理-外部访问容器
注意:这里使用的方法是端口映射,需要说明的是端口映射是在容器启动的时候才能完成端口映射的. 1,搭建1个web服务器,让外部机器访问. docker run -itd centos /bin/bash ...
- docker外部执行容器内部命令
docker exec jenkins 'cat /var/jenkins_home/secrets/initialAdminPassword'
- Unity3d 网络编程(一)(Unity3d内建网络Network介绍)
首先个人说说题外话,Unity3d使用的网络库核心是用C++实现的一款商业网络游戏引擎库. RakNet.所以对于移动设备来说,用Unity3d来写server是全然能够的,而且内建网络库的各项功能封 ...
- Docker - 访问容器
容器具有自己的内部网络和ip地址,具体信息可以查看docker inspect命令结果的"NetworkSettings"部分. 如果想要从外部访问容器中的应用,可以通过docke ...
- Docker操作笔记(四)使用网络
使用网络 Docker允许通过外部访问容器或容器互联的方式来提供网络服务. 一.外部访问容器 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射. 当 ...
- 5.docker学习之容器
容器创建 我们已经知道,镜像是只读的,而基于镜像创建出来的容器是可读写的,所以,一般我们实际中,会经常使用对应镜像创建容器并且使用这些容器.同样,如果我们想要使用容器,那么我们必须首先需要创建容器.而 ...
- Docker网络模式介绍
一.概述 docker的网络驱动有很多种方式,按照docker官网给出的网络解决方案就有6种,分别是:bridge.host.overlay.macvlan.none.Network plugins, ...
随机推荐
- linux job
通常运行的进程 ctrl-z之后会暂停到后台 bash test.sh Linux-4.15.0-36-generic-x86_64-with-Ubuntu-16.04-xenial #39~16.0 ...
- Tarjan算法离线 求 LCA(最近公共祖先)
本文是网络资料整理或部分转载或部分原创,参考文章如下: https://www.cnblogs.com/JVxie/p/4854719.html http://blog.csdn.net/ywcpig ...
- linux 内核源代码情景分析——linux 内核源代码中的C语言代码
linux 内核的主体是以GNU的C语言编写的,GNU为此提供了编译工具gcc.GNU对C语言本身作了不少扩充. 1) gcc 从 C++ 语言中吸收了"inline"和" ...
- 数字孪生 3D 科技馆的科学传播新模式
前言 科技馆是一种参与型体验型的博物馆,以传播科学知识.培养公众的科学创新技术为宗旨,并以其生动的展现方式得到公众的广泛欢迎.一直以来,我国科技馆的发展受到各种因素的制约和影响,发展缓慢.如今在我国经 ...
- Spring Cloud Alibaba 使用Feign进行服务消费
为什么使用Feign? Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样.你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做. 使用Fei ...
- Java操作MongoDB之mongodb-driver(一)
1. mongodb-driver是mongo官方推出的java连接mongoDB的驱动包,相当于JDBC驱动. (1)通过maven仓库导入:https://mvnrepository.com/ar ...
- Java测试开发--Java基础知识(二)
一.java中8大基本类型 数值类型:byte.short.int .float.double .long 字符类型:char 布尔类型:boolean 二. 封装:将属性私有化,不允许外部数据直接访 ...
- [JavaScript闭包]Javascript闭包的判别,作用和示例
闭包是JavaScript最重要的特性之一,也是全栈/前端/JS面试的考点. 那闭包究竟该如何理解呢? 如果不爱看文字,喜欢看视频.那本文配套讲解视频已发送到B站上供大家参考学习. 如果觉得有所收获, ...
- SpringCloud config native 配置
1.概述 最近项目使用springCloud 框架,使用config搭建git作为配置中心. 在私有化部署中,出现很多比较麻烦的和鸡肋的设计. 每次部署都需要安装gitlab 有些环境安装完gitla ...
- Springboot 整合RabbitMq ,用心看完这一篇就够了
该篇文章内容较多,包括有rabbitMq相关的一些简单理论介绍,provider消息推送实例,consumer消息消费实例,Direct.Topic.Fanout的使用,消息回调.手动确认等. (但是 ...