撸了今年阿里、头条和美团的面试,我有一个重要发现.......>>>

需求

建立一个网站,希望这个网站能被别人访问到。如果我们在本地创建一个Nginx服务器。

iie4bu@hostdocker:~$ docker run --name web -d nginx
d6edf032ce6ee4126124b89d30c6d11793a120865a004abb64fe20fad2e3a43b
iie4bu@hostdocker:~$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
d6edf032ce6e        nginx               "nginx -g 'daemon of…"   3 minutes ago       Up 3 minutes        80/tcp              web

但是我们的Nginx的服务目前是访问不了的。只能通过docker exec -it web /bin/bash来访问。

因此需要把Nginx服务暴露到外面。

我们知道这个Nginx容器是一个独立的network namespace,有ip地址,先查看他的网络情况

iie4bu@hostdocker:~$ docker network inspect bridge
[{"Name": "bridge","Id": "b7c11f829aacbfe6578b556865d2bbd6d2276442cb58099ae2edb7167b85b365","Created": "2019-06-26T09:52:55.529849773+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": null,"Config": [{"Subnet": "172.17.0.0/16","Gateway": "172.17.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {"d6edf032ce6ee4126124b89d30c6d11793a120865a004abb64fe20fad2e3a43b": {"Name": "web","EndpointID": "d03b95f55185e75908cf04fd3075a5cc4d91fa1df214643b2013d7964f19fb0c","MacAddress": "02:42:ac:11:00:04","IPv4Address": "172.17.0.4/16","IPv6Address": ""}},"Options": {"com.docker.network.bridge.default_bridge": "true","com.docker.network.bridge.enable_icc": "true","com.docker.network.bridge.enable_ip_masquerade": "true","com.docker.network.bridge.host_binding_ipv4": "0.0.0.0","com.docker.network.bridge.name": "docker0","com.docker.network.driver.mtu": "1500"},"Labels": {}}
]

Nginx默认是连到bridge上面的。可以看到ip是172.17.0.4

在外面是可以ping到这个ip的:

iie4bu@hostdocker:~$ ping 172.17.0.4
PING 172.17.0.4 (172.17.0.4) 56(84) bytes of data.
64 bytes from 172.17.0.4: icmp_seq=1 ttl=64 time=0.624 ms
64 bytes from 172.17.0.4: icmp_seq=2 ttl=64 time=0.052 ms
64 bytes from 172.17.0.4: icmp_seq=3 ttl=64 time=0.048 ms
^C
--- 172.17.0.4 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.048/0.241/0.624/0.270 ms
iie4bu@hostdocker:~$ 

因为他是连到我们的docker0上面的。

iie4bu@hostdocker:~$ telnet 172.17.0.4 80
Trying 172.17.0.4...
Connected to 172.17.0.4.
Escape character is '^]'.

说明是能访问的。

使用curl访问:

iie4bu@hostdocker:~$ curl http://172.17.0.4
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>

curl成功访问。

我们希望外面也可以访问。

目前Nginx端口只绑定到了172.17.0.4的网络空间。如果把端口映射到本地的服务器上80端口,是不是就可以了。

如何把Nginx的80端口映射到本地?

先将Nginx停止:docker container stop web并且删除docker container rm web

从新添加一个Nginx container,并添加参数-p,将容器里面的80端口,映射到本地的80端口

iie4bu@hostdocker:~$ docker run --name web -d -p 80:80 nginx
94f9176f55a6ea9180d571bbb2f13319f9b5024bc4e4aae8ff28d0a92394cc79
iie4bu@hostdocker:~$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
94f9176f55a6        nginx               "nginx -g 'daemon of…"   18 minutes ago      Up 18 minutes       0.0.0.0:80->80/tcp   web

这样可以通过curl 127.0.0.1访问Nginx了。

iie4bu@hostdocker:~$ curl http://127.0.0.1
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>

通过本地的80端口就可以访问容器中的80端口的服务了。

从零开始学习docker(四)host相关推荐

  1. 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式

    本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery ( ...

  2. [297]从零开始学习Docker

    这篇文章是我学习 Docker 的记录,大部分内容摘抄自 <<Docker - 从入门到实践>> 一书,并非本人原创. 学习过程中整理成适合我自己的笔记,其中也包含了我自己的实 ...

  3. 从零开始学习docker(五)网络的另外两种类型host,none

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 前面我们已经介绍了bridge network,比较复杂.这一节介绍host和none这两种简单的network ...

  4. 从零开始学习docker(十四)Docker Compose--build

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 如果docker-compose.yml比较复杂,而且docker-compose up的时间比较长,那么可以先 ...

  5. 从零开始学习docker(十四)Docker Compose--部署SpringCloud

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 本章节我们介绍如何使用docker-compose部署复杂的application. 先介绍一些docker-c ...

  6. 从零开始学习docker(二十二)容器监控

    docker ps 可以知道后台有哪些容器在运行. docker ps -a 可以知道后台有哪些容器在运行.包括退出的容器. docker top CONTAINER_ID 可以知道container ...

  7. 从零开始学习docker(二十)RoutingMesh--Ingress负载均衡

    我们知道容器之间的通信,例如上图中的10.0.9.3与10.0.9.5通信是通过overlay网络,是通过一个VXLAN tannel来实现的. 但是service和service之间通信是通过VIP ...

  8. 从零开始学习docker(十九)Swarm mode 集群服务间通信--RoutingMesh

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 在上一节中,我们介绍了通过service create部署了wordpress和mysql,我们发现了几个问题: ...

  9. 从零开始学习docker(十八)Swarm mode 部署wordpress

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 本次我们部署一个稍微负复杂的application--wordpress. 之前我们使用docker run分别 ...

最新文章

  1. 无人驾驶:车道线检测,附代码
  2. android 背景图片居中显示文字,Android ImageSpan 给文字设置圆角背景 并且文字居中,背景居中。...
  3. jssdk信息验证失败_阿里云环境中TLS/SSL握手失败的场景分析
  4. 如何设置一个严格30分钟过期的Session 1
  5. redhat5.4上安装oracle9i
  6. 常用统计算法JAVA实现 - 峰度(07)
  7. 想找个娇小可爱的女孩
  8. 信息安全等级测评内容
  9. ubuntu apt-get安装或卸载软件时出现了python-minimal等错误问题的解决方法
  10. 07-SparkStreaming
  11. WSO2 XMl转JSON
  12. ubuntu16.04+Tesla P100+cuda+anaconda+cudnn+tensorflow:从0开始安装
  13. python cookbook 读书笔记2(字符串处理2)
  14. 推荐一本书《亚马逊网络书店传奇》
  15. E 排队(排列组合)[牛客小*白月赛61]
  16. html中的input框中的value值到底是什么
  17. 使用Dl4j训练的一个手写数字识别软件
  18. torch.sin() - torch.cos() - v1.5.0
  19. 《Mysql是怎样运行的》读书笔记之B+树索引
  20. 能生成Deepfake也能诊断癌症,GAN与恶的距离

热门文章

  1. SQL SERVER 2005中如何获取日期(一个月的最后一日、一年的第一日等等)
  2. Django项目配置mysql主从数据库实现读写分离
  3. Linux之查看ubuntu版本
  4. linux c ide ssh,VSCode配置远程SSH-IDE
  5. 计算机应用能力大纲,计算机应用能力水平考试大纲.doc
  6. JSON 是什么?它能带来什么?它和 XML 比较?
  7. 2012服务器文件加密,Windows Server 2012安全方面的改变_服务器评测与技术-中关村在线...
  8. 6 redhat 查看rtc时间_RTC 月度小报 9 月 | WebRTC M77、RTC大会即将开幕、实时码流加速...
  9. clickhouse集群表删除_携程用ClickHouse轻松玩转每天十亿级数据更新
  10. 安装windows时loading files结束就重启_Boot Camp安装windows 10