Docker之四:容器之间通信

一、单向通信

 每个容器都有虚拟ip,容器变了ip会变,指向容器名称

1.创建两个docker容器,-t 后台运行

#tomcat容器 -d后台运行
docker run -d --name web tomcat
#centos  -it交互模式 /bin/bash 才能docker ps 中展示
docker run -d --name database -it centos /bin/bash
#使用容器id查看容器虚拟ip      NetworkSettings  --IPAddress
docker inspect 容器id

进入web目录下,ping ip可以   ping database 不通

2.重新创建容器(link单向通信):docker run -d --name web --link database tomcat    

 二、Bridge网桥双向通信

 设置网桥以后,容器之间天然互通

1.上面最原始的web(无link)和database

#查看现有网桥
docker network ls
#新增我的网桥
docker network create -d bridge helq-bridge

 网桥分别绑定两个容器  connect 

[root@bogon image]# docker network connect helq-bridge web
[root@bogon image]# docker network connect helq-bridge database

两个容器通过虚拟网卡实现互通

三、Volume容器间共享数据

 volume 数据卷

 通过设置-v挂载宿主机目录

#格式 -v挂载宿主机目录
docker run --name 容器名 -v 宿主机路径:容器内挂在路径 镜像名
#实例
docker run --name t1 -v /usr/webapps:/usr/local/tomcat/webapps tomcat

 通过--volumes-from共享容器内挂载点

#创建共享容器
docker create --name webpage -v /webapps:/tomcat/webapps tomcat
#共享容器挂载点
docker run --volumes-from webpage --name t1 -d tomcat

 实例:/usr下创建webapps

创建共享容器:

# -d 后台运行 -v 挂载点
docker run --name t1 -p 8000:8080 -d -v /usr/webapps:/usr/local/tomcat/webapps tomcat
docker run --name t2 -p 8001:8080 -d -v /usr/webapps:/usr/local/tomcat/webapps tomcat
#创建共享容器
docker create --name webpage -v /usr/webapps:/usr/local/tomcat/webapps tomcat /bin/true
#使用共享容器来创建容器
docker run --name t3 -p 8002:8080 -d --volumes-from webpage tomcat
#查看当前容器中jdk版本
docker exec t2 java -version

修改webapps/volume-test/index.html内容,浏览器访问直接就变了

四、容器编排工具 Docker Compose

单机多容器部署工具、通过yml文件定义多容器如何部署、WIN/MAC默认提供Docker Compose,Linux需安装

1.安装和授权:Install Docker Compose 

#安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#授权
sudo chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose -version

实例:创建wordpress  

创建wordpress文件夹,创建docker-compose.yml文件,拷贝网页中内容,注意拷贝的时候version可能拷贝不全

自动解析运行yml文件:wordpress-compose up -d     然后查看正在运行的容器

 访问8000路径

 五、Docker compose实战

1.导文件,创建镜像

 java版本选择hub.docker.com   java

bsbdj-app下Dockerfile

FROM openjdk:11.0.9.1-jre
WORKDIR /usr/local/bsbdj
ADD bsbdj.jar .
ADD application.yml .
ADD application-dev.yml .
EXPOSE 80
CMD ["java","-jar","bsbdj.jar"]

创建镜像在本文件夹下:docker build -t helq3.com/bsbdj-app .   查看镜像

执行:docker run helq3.com/bsbdj-app

bsbdj-db下Dockerfile

FROM mysql:5.7
WORKDIR /docker-entrypoint-initdb.d
ADD init-db.sql .

创建镜像: docker build -t helq3.com/bsbdj-db .

执行:docker run -d -e MYSQL_ROOT_PASSWORD=root helq3.com/bsbdj-db

查看容器,进入容器,可进入mysql

#登录mysql
mysql -uroot -proot
#使用数据库
use bsbdj
show tables

/usr/image/bsbdj 目录下 vim docker-compose.yml

version: '3.3'
services:
  db:
    build: ./bsbdj-db/
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
  app:
    build: ./bsbdj-app/
    depends_on:
      - db   #依赖上面的db
    ports:
      - "80:80"  #端口映射
    restart: always  #如果挂了,自动重启

执行:docker-compose up -d  后台运行

日志:docker-compose logs db(服务名)

停止:docker-compose down

界面查看

原文地址:https://www.cnblogs.com/helq/p/14208699.html