docker 网络 &&docker compose

docker 网络 &&docker compose

一、容器互联

(1)端口映射实现容器互联

  • 端口映射机制将容器内的服务提动给外部网络访问
  • 可随机或指定映射端口范围

docker run -d -P httpd:centos  ##  -P 是随机分配端口

docker run -d -p 49888:80 httpd:centos   ##-p  是指定端口映射

(2)网络通信隧道实现容器互联

容器互联

  • 在源容器和接收容器间建立一条网络通信隧道
  • 使用docker run 命令–link 选项实现容器间互联通信

实现容器互联


docker run -d -P --name web1 httpd:centos
docker run -d -P --name web2 --link web1:web1 httpd:centos

docker exec -it web2 /bin/bash

ping web1

(3)通过指定相同的docker bridge 网桥实现容器互联


//新建docker网卡
docker network create --subnet=172.19.0.0/24 mynetwork   ##mynetwork 是docker网络名字

//基于同一张docker 网卡新建一个容器test22
docker run -itd --name test22 --network mynetwork centos:7 /bin/bash

 //基于同一张docker 网卡新建一个容器test33
docker run -itd --name test33 --network mynetwork centos:7 /bin/bash 

//进入容器test33
docker exec -it test33 /bin/bash

//ping test22通
[root@52c6aa6a2235 /]# ping test22 
PING test22 (172.19.0.2) 56(84) bytes of data.
64 bytes from test22.mynetwork (172.19.0.2): icmp_seq=1 ttl=64 time=0.082 ms
64 bytes from test22.mynetwork (172.19.0.2): icmp_seq=2 ttl=64 time=0.096 ms
--- test22 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.082/0.089/0.096/0.007 ms


二、docker网络的四种模式

  • 安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、none、host
  • host:容器将不会虚拟出自己的网卡,配置自己的ip等,而是使用宿主机的ip和端口。
  • Container:创建的容器不会创建自己的网卡,配置自己的ip,而是和一个指定的容器共享ip、端口范围。
  • None:该模式关闭了容器的网络功能。
  • Bridge:此模式会为每一个容器分配、设置ip等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及iptablesNAT表配置与宿主机通信。

以上都是不用动手设置的,真正需要配置的是自定义网络。

(1)桥接


docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:7 /bin/bash

(发现是失败的,因为使用bridge无法支持指定ip——需要自定义ip然后指定ip)

(2)自定义网络固定ip


docker network create --subnet=172.19.0.0/24 mynetwork

docker run -itd --name test44 --net mynetwork --ip 172.19.0.20 centos:7 /bin/bash

  • 查看自定义网络mynetwork

docker network ls

[root@localhost opt] docker network ls
NETWORK ID          NAME                    DRIVER              SCOPE
d88329f07179        bridge                  bridge              local
a58999c6c705        compose_nginx_cluster   bridge              local
1236c91097a9        host                    host                local
34801c075b17        mynetwork               bridge              local
a79f44bb5700        none                    null                local

  • 查看docker 容器test44

docker ps -a
[root@localhost opt] docker ps -a
CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS                      PORTS                                         NAMES
fe58a4a7528c        centos:7              "/bin/bash"         14 seconds ago      Up 13 seconds                                                             test44

  • 删除docker网络

docker network rm NETWORK ID   (网络ID)docker network ls

docker network rm 后面输入要删除的network id

注:如果网卡有指定的容器正在运行,需要将其停止或者删除,才能删除自定义的docker——network

三、 docker compose编排

(1)什么是compose?

Docker Compose 的前身是Fig,它是一个定义及运行多个容器的工具
使用Docker Compose不再需要使用shell脚本来启动容器
通过Docker Compose可以使用YML文件来配置应用程序所需要的的所有服务

  • Docker Compose非常适合组合使用多个容器进行开发的场景

YAML是一种标记语言很直观的数据序列化格式,非常适合用来表达或者编辑数据结构、各种配置文件、文件大纲等,例如:许多电子邮件标题格式和YAML非常接近

  • 文件格式以及编写注意事项

1、不支持制表符tab键缩进,需要使用空格缩进,使用缩进表示层级关系
2、通常开头缩进2个空格,缩进的空格数不重要,只要相同层级的元素左对齐即可
3、字符后缩进一个空格,如冒号、逗号、横杆
4、用#号注释
5、如果包含特殊字符用单引号引起来
6、布尔值必须用引号括起来

  • Docker Compose文件结构举例:docker-compose.yml

    1、compose版本号、服务标识符必须顶格写

    2、属性名与属性值以:(冒号加空格)分隔开

    3、层级使用两个空格表示

    4、服务属性使用-(空格空格-空格)表示

(2) Docker Compose配置常用字段

常用字段在上述的yml文件格式中有过一些解释,下面是详细解释

在这里插入图片描述

  • Docker Compose常用命令

基本的命令格式:docker-compose [选项] [命令] [参数]

在这里插入图片描述

在这里插入图片描述
使用Docker Compose详解:使用步骤、环境准备、格式详解

  • compose使用的三个步骤

1、使用Dockerfile定义应用程序的环境

2、使用docker-compose.yml定义构成应用程序的服务,这样它们可以在隔离环境中一起运行

3、最后执行docker-compose up命令来启动并运行整个应用程序

四、compose一键式部署 Nginx容器并运行

  • Docker compose环境准备
将docker-compose文件拖至opt中,
cp -p docker-compose /usr/local/bin/

chmod +x /usr/local/bin/dockers-compose

mkdir /root/compose_nginx
cd /root/compose_nginx
mkdir wwwroot
cd wwwroot
vim index.html
<h1>this is compose</h1>
mkdir nginx
cd nginx

vim Dockerfile
FROM centos:7
MAINTAINER this is nginx
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++  pcre  make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.2.tar.gz /usr/local/src
WORKDIR /usr/local/src
WORKDIR nginx-1.12.2
RUN ./configure  --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin/nginx:$PATH
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;" >>/usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
~  
   

vim run.sh 

#!/bin/bash
/usr/local/nginx/sbin/nginx

  • 设置docker-comppose.yml
cd /root/compose_nginx

[root@localhost compose_nginx]# vim docker-comppose.yml 

version: '3'
services:    ##services 是定义下面的服务
  nginx:
    hostname: nginx   ##主机名
    build:          ##创建Nginx镜像
      context: ./nginx   ##切换到镜像目录
      dockerfile: Dockerfile   ##执行Dockerfile
    ports:  #开放端口
     - 1216:80
     - 1217:443
    networks:
     - cluster
    volumes:
     - ./wwwroot:/usr/local/nginx/html    ##宿主机站点目录挂载到Nginx容器中
networks:    ##网络部分:指定上面用到的网络
  cluster:       
[root@localhost compose_nginx]# tree
.
├── docker-comppose.yml
├── nginx
│   ├── Dockerfile
│   ├── nginx-1.12.2.tar.gz
│   └── run.sh
└── wwwroot
    └── index.html

2 directories, 5 files


将Nginx安装包拖至/root/compose_nginx/nginx
  • 使用docker-comppose.yml 一键部署Nginx

docker-compose -f docker-comppose.yml up -d   //up 是指开启,-d 后台运行,守护进程  -f 使用docker-compose.yml

  • 查看镜像compose_nginx_nginx 和容器
[root@localhost compose_nginx]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
compose_nginx_nginx   latest              baaf5c9230ec        20 minutes ago      480MB

[root@localhost compose_nginx]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS                                         NAMES
144bbbf52901        compose_nginx_nginx   "/run.sh"           20 minutes ago      Up 20 minutes       0.0.0.0:1216->80/tcp, 0.0.0.0:1217->443/tcp   compose_nginx_nginx_1

  • 验证
  • 真机浏览器访问

192.168.75.200:1216

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42099301/article/details/108747832