zoukankan      html  css  js  c++  java
  • 4、Docker网络访问

    现在我们已经可以熟练的使用docker命令操作镜像和容器,并学会了如何进入到容器中去,那么实际的工作中,我们通常是在Docker中部署服务,我们需要在外部通过IP和端口进行访问的,那么如何访问到Docker的内部服务呢?

    在后面我们会有专门的章节来讲解Docker的网络配置,这里我们先学习一个比较简单的通过网络访问容器的方法,就是端口映射。

    容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。

    随机映射

    当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。

    下面我们以一个nginx的容器为例子来测试一下-P的功能,大家可以使用search搜索下nginx镜像,我们使用官方的nginx镜像来启动一个容器。

    [root@linux-node1 ~]# docker search nginx
    

    这次我们不执行docker pull。直接来启动容器,你会发现docker会先查找你本地是否有该镜像,如果没有它会自动下载后,然后启动容器。

    [root@linux-node1 ~]# docker run -d -P nginx
    Unable to find image 'nginx:latest' locally
    latest: Pulling from library/nginx
    6ae821421a7d: Pull complete
    da4474e5966c: Pull complete
    eb2aec2b9c9f: Pull complete
    Digest: sha256:dd2d0ac3fff2f007d99e033b64854be0941e19a2ad51f174d9240dda20d9f534
    Status: Downloaded newer image for nginx:latest
    ecf14adb9dec09555ae31673753093e03941c41d917669dd1f254b51fdec7b51
    

    我们又学习了一个新的参数-d可以让容器直接在后台运行

    [root@linux-node1 ~]# docker ps -l
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    6819734a680c nginx "nginx -g 'daemon off" About an hour ago Up About an hour
    0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp hungry_mayer
    

    可以看到,随机映射了一个32769端口到容器的80端口。下面就可以直接访问了。

    [root@linux-node1 ~]# curl --head http://192.168.56.11:32769/
    HTTP/1.1 200 OK
    Server: nginx/1.11.3
    Date: Fri, 02 Sep 2016 17:44:14 GMT
    Content-Type: text/html
    Content-Length: 612
    Last-Modified: Tue, 26 Jul 2016 14:54:48 GMT
    Connection: keep-alive
    ETag: "579779b8-264"
    Accept-Ranges: bytes
    

    同样的,可以通过 docker logs 命令来查看应用的日志信息。

    [root@linux-node1 ~]# docker logs hungry_mayer
    
    192.168.56.11 - - [02/Sep/2016:17:44:01 +0000] "HEAD / HTTP/1.1" 200 0 "-"
    "curl/7.29.0" "-"
    
    192.168.56.11 - - [02/Sep/2016:17:44:06 +0000] "GET / HTTP/1.1" 200 612 "-"
    "curl/7.29.0" "-"
    
    192.168.56.11 - - [02/Sep/2016:17:44:14 +0000] "HEAD / HTTP/1.1" 200 0 "-"
    "curl/7.29.0" "-"
    

    是不是老使用随机的名字和ID操作容器很不方面,那么下面我们再创建容器的时候,一定要给它定义一个可读的名字。

    指定端口映射

    -p(小写的)则可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格式有以下三种:

    • hostPort:containerPort。
    • ip:hostPort:containerPort
    • ip::containerPort

    映射所有IP地址的指定端口

    使用 hostPort:containerPort,将本地的 80 端口映射到Nginx容器的 80 端口

    [root@linux-node1 ~]# docker run -d -p 80:80 --name nginx-demo1 nginx
    

    此时默认会绑定本地所有接口上的所有地址。注意镜像名称需要放到最后。

    映射到指定地址的指定端口

    如果你宿主机拥有多个IP地址,可以使用 ip:hostPort:containerPort 格式指定映射使用一个特定地址,比如将Nginx的80端口绑定到本地IP地址的81端口。

    [root@linux-node1 ~]# docker run -d -p 192.168.56.11:81:80 --name nginx-demo2
    nginx
    

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

    使用 ip::containerPort 绑定Nginx80端口到本地192.168.56.11的任意端口,本地主机会自动分配一个端口。

    [root@linux-node1 ~]# docker run -d -p 192.168.56.11::80 --name nginx-demo3 nginx
    

    使用 udp 标记来指定 udp 端口

    [root@linux-node1 ~]# docker run -d -p 192.168.56.11:53:53/udp –name dns-udp
    

    绑定多个端口

    如果你想绑定Docker容器里面的多个端口,可以使用多次使用-p 标记。

    [root@linux-node1 ~]# docker run -d -p 80:80 -p 443:443 nginx
    

    查看映射端口配置

    使用 docker port 来查看当前映射的端口配置,也可以查看到绑定的地址

    [root@linux-node1 ~]# docker port nginx-demo1
    80/tcp -> 0.0.0.0:80 
  • 相关阅读:
    calico网络异常,不健康
    k8s部署xxl-job-admin
    K8S
    二进制部署k8s高可用
    kubernetes集群部署redis5.0.6单机版
    K8s之MySQL实现数据持久化
    Kubernetes网络
    Oracle数据表锁死的解决办法
    查询各个表的详情
    Oracle-查看所有表、字段以及表注释和字段注释
  • 原文地址:https://www.cnblogs.com/wangyh702/p/11435934.html
Copyright © 2011-2022 走看看