docker 网络 &&docker compose
文章目录
- docker 网络 &&docker compose
- 一、容器互联
- (1)端口映射实现容器互联
- (2)网络通信隧道实现容器互联
- (3)通过指定相同的docker bridge 网桥实现容器互联
- 二、docker网络的四种模式
- (1)桥接
- (2)自定义网络固定ip
- 三、 docker compose编排
- (1)什么是compose?
- (2) Docker Compose配置常用字段
- 四、compose一键式部署 Nginx容器并运行
一、容器互联
(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