GVKun编程网logo

Docker 网络之端口绑定(docker绑定多个端口)

10

在本文中,我们将详细介绍Docker网络之端口绑定的各个方面,并为您提供关于docker绑定多个端口的相关解答,同时,我们也将为您带来关于15docker网络docker容器之间的关系dockerli

在本文中,我们将详细介绍Docker 网络之端口绑定的各个方面,并为您提供关于docker绑定多个端口的相关解答,同时,我们也将为您带来关于15 docker 网络 docker 容器之间的关系 docker link、16. docker 网络 端口映射、167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、4.1 Docker网络之搭建实验环境的有用知识。

本文目录一览:

Docker 网络之端口绑定(docker绑定多个端口)

Docker 网络之端口绑定(docker绑定多个端口)

外部访问容器

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


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


-p 标记时 
则可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格式有 
ip:hostPort:containerPort 
ip::containerPort 
hostPort:containerPort

映射所有接口地址

使用 hostPort:containerPort 格式本地的 5000 端口映射到容器的 5000 端口

$ sudo docker run -d -p 5000:5000 training/webapp python app.py
  • 1

此时默认会绑定本地所有接口上的所有地址。

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

可以使用 ip:hostPort:containerPort 格式指定映射使用一个特定地址,比如 localhost 地址 127.0.0.1

$ sudo docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
  • 1

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

使用 ip::containerPort 绑定 localhost 的任意端口到容器的 5000 端口,本地主机会自动分配一个端口

$ sudo docker run -d -p 127.0.0.1::5000 training/webapp python app.py #还可以使用 udp 标记来指定 udp 端口 $ sudo docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
  • 1
  • 2
  • 3

查看映射端口配置

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

$ docker port <container> 
  • 1

注意: 
容器有自己的内部网络和 ip 地址(使用 docker inspect 可以获取所有的变量,Docker 还可以有一个可变的网络配置。)

-p 标记可以多次使用来绑定多个端口,例如

$ sudo docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py

15 docker 网络 docker 容器之间的关系 docker link

1. 案例:使用 link 关联后台与数据库

  创建 test1 容器

    docker run -d --name test1 busybox /bin/sh -c "while true; do sleep 3600; done"

  创建 test2 并关联到 test1 上

    docker run -d --name test2 --link test1 busybox /bin/sh -c "while true; do sleep 3600; done"

  进入 test2 容器内

    docker exec -it test2 /bin/sh

    可以使用 ping test1 即可访问 test1

    

    如果 test1 是 mysql 服务 可以使用

      test1:3306 即可访问数据库

2. bridge 的 创建

  创建 driver 为 bridge 的网络

    docker network create -d bridge my-bridge

  查看创建的网络 

    docker network ls

  查看桥接方式

    brctl show

3. 指定的连接的网络

      创建 容器 指定网络 为新创建的网络

    docker run -d --name test3 --network my-bridge busybox /bin/sh -c "while true; do sleep 3600; done"

    查看 创建的网络 是否有新的 interfaces

    brctl show  或使用   docker network inspect my-bridge   查看

4. 将 test1 和 test2 link 到 my-bridge 上

    连接语法

    docker network connect [network_name] [container_name]

    docker network connect my-bridge test1

    查看是否连接上

    docker network inspect my-bridge     查看里面的 containers 是否包含 test1 和 test3

    docker network inspect bridge     查看到 container 内 也包含了 test1 和 test2

    此时在 test1 容器内 是 ping 通 test2 和 test3 的 ip 地址的

    而在用户创建的 network (eg:my-bridge) 内 是可以使用 ping [container_name]  的

16. docker 网络 端口映射

16. docker 网络 端口映射

一.本地操作

1.如何将 nginx 暴露给外界

  创建 nginx 服务器

    docker run  --name web -d nginx

  查看 nginx 的 ip地址

    docker network inspect bridge

2.使用端口映射 在外网也能访问 nginx 删除旧的nginx

    将容器的 80 端口 映射到本地的 8888 端口

    前面是本地端口 后面是容器端口

    docker run  --name web -p 8888:80-d nginx

3.添加部分参数 使 127.0.0.1 支持访问 虚拟机容器的服务器  修改 Vagrantfile 为

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.require_version ">= 1.6.0"
boxes = [
{
:name => "docker-node1",
:eth1 => "192.168.205.10",
:mem => "1024",
:cpu => "1",
:port => "8888"
},
{
:name => "docker-node2",
:eth1 => "192.168.205.11",
:mem => "1024",
:cpu => "1",
:port => "9999"
}
]
Vagrant.configure(2) do |config|
config.vm.box = "centos/7"
boxes.each do |opts|
config.vm.define opts[:name] do |config|
config.vm.hostname = opts[:name]
config.vm.network "forwarded_port", guest: 80, host: opts[:port]
config.vm.provider "vmware_fusion" do |v|
v.vmx["memsize"] = opts[:mem]
v.vmx["numvcpus"] = opts[:cpu]
end
config.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--memory", opts[:mem]]
v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
end
config.vm.network :private_network, ip: opts[:eth1]
end
end
config.vm.synced_folder "./labs", "/home/vagrant/labs"
config.vm.provision "shell", privileged: true, path: "./setup.sh"
end

4.删除虚拟机 并 重新 up

  vagrant destroy

  vagrant up

5.重新安装 web  并 访问 127.0.0.1:8888 即可

  docker run  --name web -p 80:80 -d nginx

 

二.阿里云操作

  docker run  --name web -p 80:80 -d nginx

  然后访问 公有 ip 地址即可出现nginx 的 welcome 页面

167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo

167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo

docker构建nginx容器系列问题


background : 最近为小伙伴们筹划docker系列的技术分享,研究了一会docker相关技术, 在此记录一下构建nginx容器时候的坑

1.nginx服务器根目录问题

docker 官方镜像提供的nginx基于debian/jessie平台,其文件结构和ubuntu中的nginx中并不相同

eg:

run一个niginx容器

<span>//80端口被占用,so...</span>
$ sudo docker run <span>-it</span><span>-p</span><span>800</span>:<span>800</span> nginx
$ sudo docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                   NAMES
<span>1801</span>a32aab54        nginx               <span>"nginx -g ''daemon off"</span><span>2</span> minutes ago       Up <span>2</span> minutes        <span>80</span>/tcp, <span>443</span>/tcp, <span>0.0</span><span>.0</span><span>.0</span>:<span>800</span><span>-&gt;</span><span>800</span>/tcp   berserk_kare
登录后复制

进入容器内部

<span>$ </span>sudo docker exec -it <span>1801</span>a32aab54 /bin/bash
root<span>@1801a32aab54</span><span>:/</span><span># </span>
登录后复制

查看nginx目录

<span># cd /etc/nginx/</span>
conf<span>.d</span>/         koi-utf         mime<span>.types</span>      nginx<span>.conf</span>      uwsgi_params    
fastcgi_params  koi-win         modules/        scgi_params     win-utf  
登录后复制

可以看到不仅没有熟悉的 /sites-available,也没有 /sites-enabled

继续查看nginx配置

<span># cat /conf.d/default.conf</span><span>server</span> {
    listen       <span>80</span>;
    server_name  localhost;

    <span>#charset koi8-r;</span><span>#access_log  /var/log/nginx/log/host.access.log  main;</span>    location / {
        root   /usr/share/nginx/html;
        <span>index</span><span>index</span>.html <span>index</span>.htm;
    }

    <span>#error_page  404              /404.html;</span><span># redirect server error pages to the static page /50x.html</span><span>#</span>
    error_page   <span>500</span><span>502</span><span>503</span><span>504</span>  /<span>50</span>x.html;
    location = /<span>50</span>x.html {
        root   /usr/share/nginx/html;
    }
    <span>#...省略php-fpm配置,好长..</span>
}
登录后复制

根目录配置: root /usr/share/nginx/html;

测试

<span># cd /usr/share/nginx/html</span><span># touch index.html</span><span># echo "test nginx in docker" &gt;index.html</span>
登录后复制

php-fpm配置相关

'').addClass(''pre-numbering'').hide(); $(this).addClass(''has-numbering'').parent().append($numbering); for (i = 1; i '').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了167 docker docker构建nginx容器系列问题,包括了docker,nginx方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

4.1 Docker网络之搭建实验环境

4.1 Docker网络之搭建实验环境

搭建两台虚拟机,这两台虚拟机可以互相ping通,也能够与宿主机互相ping通。Vagrantfile的配置如下:

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.require_version ">= 1.6.0"
boxes = [
    {
        :name => "docker-node1",
        :eth1 => "192.168.205.10",
        :mem => "1024",
        :cpu => "1"
    },
    {
        :name => "docker-node2",
        :eth1 => "192.168.205.11",
        :mem => "1024",
        :cpu => "1"
    }
]
Vagrant.configure(2) do |config|
  config.vm.box = "centos/7"
  boxes.each do |opts|
      config.vm.define opts[:name] do |config|
      config.vm.hostname = opts[:name]
      config.vm.provider "virtualbox" do |v|
        v.customize ["modifyvm", :id, "--memory", opts[:mem]]
        v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
      end
      config.vm.network :private_network, ip: opts[:eth1]
    end
  end
  config.vm.synced_folder "./labs", "/home/vagrant/labs", :nfs => true
  config.vm.provision "shell", privileged: true, path: "./setup.sh"
end

其中,setup.sh的内容如下

#!/usr/bin/env bash
#/bin/sh
# install some tools
sudo yum install -y git vim gcc glibc-static telnet bridge-utils
# install docker
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh
# start docker service
sudo groupadd docker
sudo usermod -aG docker vagrant
sudo systemctl start docker
rm -rf get-docker.sh

我们今天的关于Docker 网络之端口绑定docker绑定多个端口的分享已经告一段落,感谢您的关注,如果您想了解更多关于15 docker 网络 docker 容器之间的关系 docker link、16. docker 网络 端口映射、167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、4.1 Docker网络之搭建实验环境的相关信息,请在本站查询。

本文标签: