Docker学习笔记--Docker Compose

10 篇文章 0 订阅
9 篇文章 0 订阅

Docker Compose多容器部署

多容器的APP

  • 要从Dockerfile build image 或者Dockerhub拉取image
  • 要创建多个container
  • 要管理这些container(启动停止删除)
  • 麻烦!!!!!!

这个时候就出现了Docker Compose “批处理”工具
在这里插入图片描述

Docker Compose

  • Docker Compose是一个工具
  • 这个工具可以通过一个yml文件(docker-compose.yml)定义多容器的docker应用
  • 通过一条命令就可以根据yml文件的定义去创建或者管理这多个容器

安装Docker-compose

官网安装教程

docker-compose.yml

只简单写了部分概念,更多概念请移步至官方文档

  • Services

    • 一个service代表一个container,这个container可以从dockerhub的image来创建,或者从本地的Dockerfile build出来的image来创建
    • service的启动类似docker run,我们可以给其指定network和volume,所以可以给service指定network和Volume的引用
  • Networks

  • Volumes

安装Docker-Compose及案例

案例一

wordpress+mysql

1.安装docker-compose 参考官网
2.准备一个yml文件如下:
docker-compose.yml
version: '3'

services:

  wordpress:
    image: wordpress
    ports:
      - 8080:80
    depends_on:
      - mysql
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_PASSWORD: root
    networks:
      - my-bridge

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - my-bridge

volumes:
  mysql-data:

networks:
  my-bridge:
    driver: bridge
3.cd / & mkdir docker-compose & cd docker-compose & 将准备的文件移到当前目录或者vim docker-compose.yml 复制进去就行
4.启动docker-compose:docker-compose -f docker-compose.yml(yml的名字) up

一些其它常用命令:
1.查看docker-compose里运行的容器:docker-compose ps
2.查看docker-compose里所定义的images:docker-compose images
3.停止/开始docker-compose:docker-compose stop | docker-compose start
4.停止并删除资源:docker-compose down
5.让docker-compose后台运行:docker-compose up -d
6.进入docker-compose里定义的servie:docker-compose exec [服务名] bash
6.其余命令参看官网或使用docker-compose --help查看

案例二

部署一个统计访问次数(redis+java)的docker-compose

jar包里的redis:host:指定为redis

1.准备一个docker-compose.yml文件
version: '3'

services:
	redis: 
		image: redis
		networks:
			- mynet
	web:
		build:
			context: .
			dockerfile: Dockerfile
		ports:
			- 8080:8080
		networks:   //这里将他们加入到
			- mynet
networks:
	mynet:
		driver: bridge
2.编写Dockerfile
FROM java:8
LABEL maintaner="Ray 1437927944@qq.com"
COPY *.jar /app.jar


EXPOSE 8080

ENTRYPOINT ["java","-jar","/app.jar"]
CMD []

3.将jar包移动到和Dockerfile与docker-compose.yml同级()
4.启动即可:docker-compose up -d

案例二第一个的延续测试二:

docker-compose如何动态配置springboot项目的application.yml的配置

jar包里的redis:host:指定为redis

version: '3'
services:
	redis: 
		image: redis
	web:
		build:
			context: .
			dockerfile: Dockerfile
		ports:
			- 8080:8080
与上一个测试用例对比一下少了network,其它操作都相同但是我们启动之后发现并不能访问,
总结原因如下:
1、这是由于docker网络的问题,如果我们不自己指定每个容器的网络,那么docker0将为每个容器分配一个网络,docker0分配的网络默认容器之间不能通过域名ping通,如果需要让两个容器可以互相ping通,那么需要我么你自己新建一个网络并将容器加入同一个网络下
2.由于当前web程序指定的redis的host是redis,由于无法ping通,因此无法访问

案例二第一个的延续测试三:

jar中没有指定redis的host,或者我们应该如何覆盖我们配置好的redis:host呢

解决方案:可以在docker-compose.yml文件中指定配置就行如下,其余操作都相同
version: '3'

services:
	redis: 
		image: redis
		networks:
			- mynet
	web:
		build:
			context: .
			dockerfile: Dockerfile
		ports:
			- 8080:8080
		networks:   //这里将他们加入到
			- mynet
		environment:
			- SPRING_REDIS_HOST=redis(我们依赖的服务名,这里一定要让redis和web服务处于我们自己建的网络中去)
networks:
	mynet:
		driver: bridge
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值