在本文中,我们将详细介绍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绑定多个端口)
- 15 docker 网络 docker 容器之间的关系 docker link
- 16. docker 网络 端口映射
- 167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo
- 4.1 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 网络 端口映射
一.本地操作
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
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>-></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" >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网络之搭建实验环境
搭建两台虚拟机,这两台虚拟机可以互相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网络之搭建实验环境的相关信息,请在本站查询。
本文标签: