docker 网络 && docker compose
Artigo Diretório
Um, interconexão de contêiner
(1) Mapeamento da porta para realizar a interconexão do contêiner
- O mecanismo de mapeamento de porta promove os serviços no contêiner para acesso à rede externa
- Intervalo de porta de mapeamento aleatório ou especificado
docker run -d -P httpd:centos ## -P 是随机分配端口
docker run -d -p 49888:80 httpd:centos ##-p 是指定端口映射
(2) O túnel de comunicação da rede realiza a interconexão do contêiner
Interconexão de contêineres
- Estabeleça um túnel de comunicação de rede entre o recipiente de origem e o recipiente coletor
- Use a opção docker run command --link para obter a interconexão e comunicação entre os contêineres
Perceba a interconexão do contêiner
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 a interconexão de contêiner especificando a mesma ponte 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
Dois, quatro modos de rede docker
- Quando o Docker é instalado, ele cria automaticamente três redes, ponte (o contêiner criado é conectado a esta rede por padrão), nenhuma, host
- host: O contêiner não virtualizará sua própria placa de rede, configurará seu próprio IP, etc., mas usará o IP e a porta do host.
- Container: O container criado não criará sua própria placa de rede e configurará seu próprio ip, mas compartilhará o ip e o intervalo de portas com um container especificado.
- Nenhum: Este modo desativa a função de rede do contêiner.
- Bridge: Este modo aloca e define ip para cada contêiner, conecta o contêiner a uma ponte virtual docker0 e se comunica com o host por meio da ponte docker0 e da configuração da tabela iptablesNAT.
Os itens acima são todos configurados sem as mãos, o que realmente precisa ser configurado é uma rede personalizada.
(1) Ponte
docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:7 /bin/bash
(发现是失败的,因为使用bridge无法支持指定ip——需要自定义ip然后指定ip)
(2) IP fixo de rede personalizado
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
- Exibir rede 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
- Veja o teste do docker container 44
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
- Excluir rede docker
docker network rm NETWORK ID (网络ID)docker network ls
docker network rm 后面输入要删除的network id
Nota: Se a placa de rede tiver um contêiner especificado em execução, ele precisa ser interrompido ou excluído para excluir a janela de encaixe personalizada - rede
Três, orquestração de composição docker
(1) O que é compor?
O predecessor do Docker Compose é o Fig. É uma ferramenta para definir e executar vários contêineres. O
Docker Compose não precisa mais usar scripts de shell para iniciar o contêiner. O
Docker Compose pode usar arquivos YML para configurar todos os serviços exigidos pelo aplicativo.
- O Docker Compose é muito adequado para cenários onde vários contêineres são combinados para desenvolvimento
YAML é um formato de serialização de dados muito intuitivo com uma linguagem de marcação, que é muito adequado para expressar ou editar estruturas de dados, vários arquivos de configuração, contornos de arquivos, etc. Por exemplo: muitos formatos de cabeçalho de e-mail são muito semelhantes ao YAML
- Formato de arquivo e anotações
1. O recuo da tecla Tab não é suportado. O recuo do espaço é necessário. Use o recuo para indicar a relação hierárquica.
2. Normalmente o início do recuo é de 2 espaços. O número de espaços recuados não é importante, desde que os elementos do mesmo nível estejam alinhados à esquerda pode ser
3, recuado um caractere de espaço, como dois-pontos, vírgula, uma barra transversal
4, usando um # Nota
5, se os caracteres especiais entre aspas simples
6, os valores booleanos devem ser colocados entre aspas
-
Exemplo de estrutura de arquivo Docker Compose: docker-compose.yml
1. Compor o número da versão e o identificador do serviço deve ser escrito na caixa superior
2. O nome do atributo e o valor do atributo são separados por: (dois pontos mais espaço)
3. Use dois espaços para indicar o nível
4. O atributo de serviço é representado por- (espaço espaço-espaço)
(2) Campos comuns de configuração do Docker Compose
Os campos comuns têm algumas explicações no formato de arquivo yml acima, a seguir está uma explicação detalhada
- Comandos comumente usados do Docker Compose
Formato de comando básico: docker-compose [opção] [comando] [parâmetro]
Explicação detalhada sobre o uso do Docker Compose: etapas de uso, preparação do ambiente, formato detalhado
- Três etapas usadas para escrever
1. Use Dockerfile para definir o ambiente do aplicativo
2. Use docker-compose.yml para definir os serviços que compõem o aplicativo para que possam ser executados juntos em um ambiente isolado
3. Por fim, execute o comando docker-compose up para iniciar e executar todo o aplicativo
Quatro, compor a implantação e operação com um clique do contêiner Nginx
- Preparação do ambiente 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
- Definir 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
- Use docker-comppose.yml para implantar o Nginx com um clique
docker-compose -f docker-comppose.yml up -d //up 是指开启,-d 后台运行,守护进程 -f 使用docker-compose.yml
- Ver imagem compose_nginx_nginx e container
[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
- verificação
- Acesso ao navegador da máquina real
192.168.75.200:1216