docker-compose实战

4 篇文章 0 订阅
2 篇文章 0 订阅

概述

docker-compose主要是一个用于定义和运行多容器的应用程序工具,它能轻松、高效的管理容器。
官网地址:https://docs.docker.com/compose/

安装

https://blog.csdn.net/yj735972447/article/details/111993455

常用命令

  • docker-compose up        启动容器
  • docker-compose up -d      在后台启动容器
  • docker-compose -f 路径 up -d   指定文件启动容器
  • docker-compose stop       停止所有容器
  • docker-compose stop 容器名称   停止指定容器
  • docker-compose start       启动所有容器
  • docker-compose start 容器名称   启动指定容器
  • docker-compose down       停止移除所有容器
  • docker-compose logs       查看日志
  • docker-compose build       重新构建镜像
  • docker-compose version      查看版本信息

docker-compose.yml

官方yml
version: "3.9"  # optional since v1.27.0
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
      - logvolume01:/var/log
    links:
      - redis
  redis:
    image: redis
volumes:
  logvolume01: {}
yml解释
  • version   指定docker-compose.yml 文件的写法格式
  • services  容器集合
  • web    指定服务名称
  • build    以dockerfile的方式构建镜像
  • ports    指定主机端口与容器端口
  • volumes  数据卷挂载
  • links     用别名来链接到redis服务容器 (v1版本)
    注意:v2,v3版本推介使用depends_on来表示服务之间的依赖关系,v2,v3版本维护着一个公共网络,可以直接通过服务名称通信。
  • redis    容器名称
  • image    指定镜像
  • volumes   匿名挂载web的日志文件

web、redis、mysql三个服务实战

  1. 用springboot快速搭建一个web项目
@RestController
public class TestController {

    @Autowired
    RedisTemplate redisTemplate;
    
    @GetMapping("/hello")
    public String hello(){
        Long num = redisTemplate.opsForValue().increment("num");
        return "hello docker:" + num;
    }
}
  1. 配置application.properties
#配置服务端口
server.port=8080
#配置redis的主机
spring.redis.host=redis
  1. 创建web服务的dockerfile文件
# 基础镜像
FROM jdk:1.8
# 作者
MAINTAINER yj
# 匿名挂载(相当于就是主机/var/lib/docker目录下创建了一个tmp目录链接到了容器的/tmp目录)
VOLUME /tmp
# 将jar文件拷贝文件容器中,并重新命名
ADD demo-0.0.1-SNAPSHOT.jar /app.jar
# 暴露端口
# 注意:这里暴露的端口并不是正在发布的端口,只是用来提醒部署人员应该映射哪个端口给外界。
EXPOSE 8088
# 容器启动时运行的命令
ENTRYPOINT["java","-jar","/app.jar"]
  1. 创建docker-compose.yml
version: '3.8' # docker-compose版本
services:
  web: # 服务名称
    restart: always # 开机自启动
    build: .
    ports:  # 端口
      - "8088:8080"
    depends_on: # 定义服务之间的依赖关系
      - redis
      - mysql
# depends_on 定义服务之间的依赖关系(web服务依赖于redis和redis,mysql容器启动顺序要优先于web容器;当启动web容器时会自动创建redis和mysql容器)
# 注意depends_on不会等到redis和mysql容器启动完成再启动,web容器仅仅等到redis和mysql容器启动就开始启动
  redis: # 服务名称
    restart: always # 开机自启动
    image: redis:6.0
    privileged: true # 容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
    environment:
      - TZ=Asia/Shanghai
      - LANG=en_US.UTF-8
    volumes: # 数据挂在
      - /usr/local/etc/redis/conf/redis.conf:/etc/redis/redis.conf
      - /usr/local/etc/redis/data:/data
    command:
      redis-server /etc/redis/redis.conf  # 指定配置文件启动redis-server进程  # --requirepass 123456 # 设置密码
     
    ports:
      - "6379:6379"
  mysql: # 服务名称
    restart: always # 开机自启动
    image: mysql:5.7 # 以镜像的方式构建
    environment:
      MYSQL_ROOT_PASSWORD: 'root' # root 用户的密码
      MYSQL_ROOT_HOST: '%'
      TZ: Asia/Shanghai
      # MYSQL_ALLOW_EMPTY_PASSWORD: 设置为 'yes' 允许 root 用户的密码为空。
      # MYSQL_RANDOM_ROOT_PASSWORD: 设置为 'yes' 将在容器启动时为 root 用户生成一个随机的密码,密码会显示到标准输出流
      # MYSQL_ONETIME_PASSWORD :字面意思就是一次性密码,为 root 用户设置,第一次登录后必须修改密码(仅支持 5.6 以上的版本)
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --lower_case_table_names=1
      --max_allowed_packet=128M
      --default-authentication-plugin=mysql_native_password
      --log_bin_trust_function_creators=1
      --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
      # MYSQL8以上已经取消了NO_AUTO_CREATE_USER,sql_mode中不能包含这个
    volumes: # 数据挂在
      - /usr/local/etc/mysql/data:/var/lib/mysql # 将mysql数据挂在到宿主机(防止容器删除后,数据丢失)
      - /usr/local/etc/mysql/conf/conf.d:/etc/mysql/conf.d # 将mysql的配置文件挂在到宿主机(修改配置文件方便)
    ports:
      - "3306:3306"
  1. 在linux服务上新建一个docker-compose目录
       将Dockerfile,docker-compose.yml,demo-0.0.1-SNAPSHOT.jar三个文件拷贝到
    docker-compose目录下。
    在这里插入图片描述

  2. 启动docker-compose
        启动命令:docker-compose up
    在这里插入图片描述

  3. 查看web程序的返回结果
    在这里插入图片描述
    发现每次请求都会去调用redis,并且结果每次都会加1

  4. 使用navicat查看mysql连接
    在这里插入图片描述
    数据库也能正常连接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值