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
界面查看