docker 网络 && docker compose
Directorio de artículos
Uno, interconexión de contenedores
(1) Mapeo de puertos para realizar la interconexión de contenedores
- El mecanismo de mapeo de puertos promueve los servicios en el contenedor para el acceso a la red externa
- Rango de puertos de mapeo aleatorio o especificado
docker run -d -P httpd:centos ## -P 是随机分配端口
docker run -d -p 49888:80 httpd:centos ##-p 是指定端口映射
(2) El túnel de comunicación en red realiza la interconexión de contenedores
Interconexión de contenedores
- Establecer un túnel de comunicación de red entre el contenedor fuente y el contenedor receptor
- Utilice la opción de enlace del comando docker run para lograr la interconexión y comunicación entre contenedores
Realice la interconexión de contenedores
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) Implementar la interconexión de contenedores especificando el mismo puente docker
//新建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
Dos, cuatro modos de red acoplable
- Cuando Docker está instalado, creará automáticamente tres redes, puente (el contenedor creado está conectado a esta red de forma predeterminada), ninguna, host
- host: el contenedor no virtualizará su propia tarjeta de red, configurará su propia IP, etc., sino que utilizará la IP y el puerto del host.
- Contenedor: El contenedor creado no creará su propia tarjeta de red ni configurará su propia IP, sino que compartirá la IP y el rango de puertos con un contenedor específico.
- Ninguno: este modo desactiva la función de red del contenedor.
- Puente: este modo asigna y configura ip para cada contenedor, conecta el contenedor a un puente virtual docker0 y se comunica con el host a través del puente docker0 y la configuración de la tabla iptablesNAT.
Todo lo anterior está configurado sin manos, lo que realmente necesita configurarse es una red personalizada.
(1) Puente
docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:7 /bin/bash
(发现是失败的,因为使用bridge无法支持指定ip——需要自定义ip然后指定ip)
(2) IP fija de red personalizada
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
- Ver red personalizada 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
- Ver prueba de contenedor docker44
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
- Eliminar la red de Docker
docker network rm NETWORK ID (网络ID)docker network ls
docker network rm 后面输入要删除的network id
Nota: Si la tarjeta de red tiene un contenedor específico en ejecución, debe detenerse o eliminarse para eliminar la ventana acoplable personalizada —— red
Tres, docker componer orquestación
(1) ¿Qué es componer?
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命令来启动并运行整个应用程序
Cuatro, componga la implementación y operación con un solo clic del contenedor Nginx
- Preparación del entorno de composición de Docker
将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
- Establecer 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
- Utilice docker-comppose.yml para implementar Nginx con un clic
docker-compose -f docker-comppose.yml up -d //up 是指开启,-d 后台运行,守护进程 -f 使用docker-compose.yml
- Ver imagen compose_nginx_nginx y contenedor
[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
- verificación
- Acceso al navegador de la máquina real
192.168.75.200:1216