docker网络、compose(2)

目录

  • docker网络

    • 桥接
    • host
    • none
  • 文件共享
  • 特权模式
  • compose
    • 基础
    • 常用

docker网络

docker的网络比较简单,其实只要是对vmware workstation的网络有所理解的话都能很好的理解docker的网络模式。

Docker容器的网络模式

  1. bridge模式,让容器跟docker0网卡桥接。上网通过nat上网,这其实就是vmware workstation当中的NAT网络。
  2. host模式,让容器和宿主机共享网络,这其实才是vmware当中的桥接模式。
  3. none,关闭容器网络

先说一下docker当中的bridge模式,这其实是vmware的中NAT模式,容器的网关是物理机的docker0网卡的IP,容器上网时将数据包交给docker0网卡,docker0网卡通过nat让物理机的eth0代理上网,默认就是这种网络模式,默认是172.17网段。

host模式就是容器的网卡和物理机的网卡eth0处于同等地位,与vmware workstation当中的桥接差不多,但是还是有一些不同的,vmware workstation的桥接是和物理机地位同等,但IP不同,而docker是容器的网络配置和物理是一模一样的,IP也是一样的。

//查看网络方式docker network ls,对应三种方式
[[email protected] ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
6c8ba509a90d        bridge              bridge              local
2e75dbc4f41d        host                host                local
84af08d64d0b        none                null                local

Docker默认的网络方式观察

docker run -d centos:nginx
docker exec -it fd415027a7bd /bin/bash
yum install bridge-utils -y
brctl show

//表示这三个网卡veth开头的三个网卡都是容器的网卡,都通过docker0网卡上网,bridge模式。
[[email protected] ~]# brctl show
bridge name bridge id       STP enabled interfaces
docker0     8000.0242443c94c4   no      veth9031fe3
                                        vethb716c93
                                        vethbb7ce87

桥接docker0默认外部无法访问进去,得开通映射才能访问进去,下面就讲映射!!这特么和vmware workstation好像呀!!!!!

桥接

桥接docker0加端口映射可以实现跟外界通讯

//一对一的映射,8080指物理机的端口,后面的80指容器的端口,侦听到物理机的所有网卡上0.0.0.0
docker run -d -p 8080:80 centos:nginx
[email protected] ~]# docker ps
0.0.0.0:8080->80/tcp

//仅侦听到物理机的某一个网卡
docker run -d -p 192.168.237.50:8080:80 centos:nginx

//多个端口同时映射操作
多端口映射docker run -d -p 8080:80 -p 6381:6379 centos:web

host

使用host模式,直接使用宿主机的网络,可直接外界通讯

docker run --net=host -d centos:redis

直接就能外网通讯,运行ifconfig查看网卡信息,与物理网卡的信息一模一样,主机名都一样。

none

使用none模式,关闭容器网络,用得比较少

//进入docker容器查看时,只有127.0.0.1网卡
docker run --net=none -d centos:web

[[email protected] ~]# docker exec -it 3e2 /bin/bash
[[email protected] /]# ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

文件共享

假设我我们在容器里面跑nginx,nginx的日志和根目录当然也是存放在容器里面,我们要想更改的话就要进入到容器里面,进行查看日志和更改站点。我们可以使用文件共享的方式,当宿主的目录映射到容器里面,这样我们对网站进行操作时就不用再进入到容器里面了。

在宿主机上创建目录:
mkdir -pv /zhanghe/logs /zhanghe/apps

//共享网站和日志
docker run -d -v /zhanghe/logs:/usr/local/nginx/logs -v /zhanghe/apps:/usr/local/nginx/html/apps centos:nginx

特权模式

Docker使用特权的方式去启动容器,无特权很多命令无法运行,比如说更改网关。

[[email protected] /]# route add default gw 192.168.80.5
SIOCADDRT: Operation not permitted

//通过--privileged=true可以启动特权模式,很少用
docker run --privileged=true -d shijiange:nginx

compose

基础

compose说明

  1. 原生docker命令操作容器比较麻烦
  2. compose可以把操作容器的命令写入到配置文件中,让我们更方便的操作容器
//compose的安装
yum install python-pip -y;pip install --upgrade pip
yum install python-devel -y
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ docker-compose
docker-compose version
    docker-py version: 4.1.0
compose配置文件:/docker/compose/redis/docker-compose.yml
version: '2'
services:
 redis:                               #名称,进入容器的时候会用到
  image: centos:redis

compose操作容器

//后台启动容器,这种命令必须在docker-compose.yml所在的文件里面
docker-compose up -d

//进入容器,此处的redis对应上面配置文件的名字,不需要再通过ID进入那么麻烦了
docker-compose exec redis bash   

//查看容器,重复启动时会提示已经启动
docker-compose ps

//停止并删除容器
docker-compose down

//重启容器:
docker-compose stop; docker-compose start

常用

//compose管理多个容器docker-compose.yml

version: '2'
services:
 redis:
  image: centos:redis
 nginx:
  image: centos:nginx
//compose使用端口映射
version: '2'
services:
 redis:
  image: centos:redis
  ports:
   - "192.168.80.61:6379:6379"
 nginx:
  image: centos:nginx
  ports:
   - "192.168.80.61:8080:80"
   - "192.168.80.61:9090:80"
//compose设置网络模式

version: '2'
services:
 redis:
  image: centos:redis
 nginx:
  image: centos:nginx
  network_mode: "host"
//compose设置文件共享

version: '2'
services:
 nginx:
  image: centos:nginx
  network_mode: "host"
  volumes:
   - /shijiange/logs:/usr/local/nginx/logs
   - /shijiange/apps:/usr/local/nginx/html/apps
//compose同个镜像启动多个容器

docker-compose up -d --scale redis=3
docker-compose exec --index=2 redis bash

做上面这些实验的的时候遇到一个理解就是当把nginx设置为host模式时无法启动容器,原因是因为宿主机也启动了nginx,占用了80端口。

原文地址:https://www.cnblogs.com/yizhangheka/p/12246395.html

时间: 2024-10-08 14:16:27

docker网络、compose(2)的相关文章

Docker之Compose服务编排

Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Compose是Fig的升级版,Fig已经不再维护.Compose向下兼容Fig,所有fig.yml只需要更名为docker-compose.yml即可被Compose使用. 服务编排工具使得Docker应用管理更为方便快捷. Compose网站:https://docs.docker.com/compos

(转)Docker之Compose服务编排

转自:https://www.cnblogs.com/52fhy/p/5991344.html Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Compose是Fig的升级版,Fig已经不再维护.Compose向下兼容Fig,所有fig.yml只需要更名为docker-compose.yml即可被Compose使用. 服务编排工具使得Docker应用管理

小白学Docker之Compose

承接上篇文章:小白学Docker之基础篇,自学网站来源于https://docs.docker.com/get-started 概念 Compose是一个编排和运行多容器Docker应用的工具,主要是通过一个YAML文件进行服务配置. 使用Compose主要有三步: 在每个应用环境中配置一个Dockerfile,定义单个应用的镜像 使用docker-compose.yml来组装各个应用 运行docker-compose up命令来运行整个应用 一个基本的docker-compose.yml可能长

docker网络

一. Docker 中的网络功能介绍 默认情况下,容器可以建立到外部网络的连接,但是外部网络无法连接到容器. Docker 允许通过外部访问容器或容器互联的方式来提供网络服务 外部访问容器: 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过  -P  或  -p  参数来指定端口映射.(当使用–P(大写)标记时,Docker 会随机映射一个随机的端口到内部容器开放的网络端口.) 注意:-P使用时需要指定--expose选项或dockerfile中用expose指定容器要暴露的端口

docker网络访问(三)

docker网络访问 ifconfig查看网卡,启动docker的时候,docker会帮我们创建一个docker0的网桥. 1.随机映射 docker run -P 2.指定映射 -p hostPort:containerPort -p ip:hostPort:containerPort -p ip::containerPort -p hostPort:containerPort:udp -p hostPort:containerPort -p hostPort:containerPort (多

docker网络配置方法总结

docker启动时,会在宿主主机上创建一个名为docker0的虚拟网络接口,默认选择172.17.42.1/16,一个16位的子网掩码给容器提供了65534个IP地址.docker0只是一个在绑定到这上面的其他网卡间自动转发数据包的虚拟以太网桥,它可以使容器和主机相互通信,容器与容器间通信.问题是,如何让位于不同主机上的docker容器可以通信.如何有效配置docker网络目前来说还是一个较复杂的工作,因而也涌现了很多的开源项目来解决这个问题,如flannel.Kubernetes.weave.

Docker 网络之pipework 工具(2)将Docker容器配置到本地网络环境中

为了使本地网络中的机器和Docker容器更方便的通信,我们经常会有将Docker容器配置到和主机同一网段的需求.这个需求其实很容易实现,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了.下面我们来操作一下,我主机A地址为192.168.1.107/24,网关为192.168.1.1,需要给Docker容器的地址配置为192.168.1.150/24.在主机A上做如下操作:安装pipework下载地址:wgethttps://github.com/jpetazz

Docker—网络模式

Docker网络实现原理: Docker 中的网络接口默认都是虚拟的接口.虚拟接口的优势之一是转发效率较高. Linux 通过在内核中进 行数据复制来实现虚拟接口之间的数据转发,发送接口的发送缓存中的数据包被直接复制到接收接口的接收缓存中.对于本地系统和容器内系统看来就像是一个正常的以太网卡,只是它不需要真正同外部网络设备通信,速度要快很多:Docker 容器网络利用此技术,它在本地主机和容器内分别创建一个虚拟接口,并让它们彼此连通 (这样的一对接口叫做 veth pair ) Docker 创

Docker网络详解及pipework源码解读与实践

Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理.然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分.因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求.本文首先介绍了Docker自身的4种网络工作方式,然后通过3个样例 -- 将Docker容器配置到本地网络环境中.单主机Docker容器的VLAN划分.多主机Docker容器的VLAN划分,演示了如何使用pipework帮助我们进行复杂的网络设置,以及pi