# spring-boot-docker-demo **Repository Path**: zzhua195/spring-boot-docker-demo ## Basic Information - **Project Name**: spring-boot-docker-demo - **Description**: 使用docker-compose部署服务,包括jar应用,redis服务,mysql服务 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-11-04 - **Last Updated**: 2024-11-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [docker-compose部署服务] # 如果不使用docker-compose # 需要先启动mysql和redis容器, # 然后打包jar应用为镜像,启动应用镜像为容器应用为镜像,启动应用镜像为容器 # 容器间的启停或宕机,有可能导致IP地址对应的容器实例变化,映射出错 # 如果使用docker-compose # 1. 首先将代码中的配置文件的ip改为docker-compose.yaml中定义的服务名或容器名,即mysql和redis或redis01,因为服务名作为主机来访问 # 2. 构建jar应用镜像 docker build -t docker-compose-test:1.0 . # 基础镜像使用java FROM centos7-java8:1.0 # 作者 MAINTAINER zzhua # volume 指定临时文件为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp VOLUME /tmp # 将jar包添加到容器中并更名为 docker-compose-test.jar ADD spring-boot-docker-demo.jar docker-compose-test.jar # 运行jar包 RUN bash -c 'touch /docker-compose-test.jar' ENTRYPOINT ["java","-jar","/docker-compose-test.jar"] # 暴露6001端口作为微服务 EXPOSE 6001 # 3. 编写docker-compose.yml, # 注意:如果下面的内容直接复制到服务器上使用可能会报错 # ERROR: .UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb6 in position 27: invalid start byte, # 删除中文注释即可 # 版本号 version: "3" services: # 定义服务名称 microService: image: docker-compose-test:1.0 container_name: ms01 ports: - "6001:6001" volumes: - /app/microService:/data networks: - p_net depends_on: - redis - mysql redis: image: redis:6.0.8 container_name: redis01 ports: - "6379:6379" volumes: - /app/redis/conf/redis.conf:/etc/redis/redis.conf - /app/redis/data:/data networks: - p_net command: redis-server /etc/redis/redis.conf mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: '123456' MYSQL_ALLOW_EMPTY_PASSWORD: 'no' MYSQL_DATABASE: 'db2024' MYSQL_USER: 'zzhua' MYSQL_PASSWORD: '123456' ports: - "3306:3306" volumes: - /app/mysql/db:/var/lib/mysql - /app/mysql/conf/my.cnf:/etc/my.cnf - /app/mysql/init:/docker-entrypoint-initdb.d networks: - p_net networks: p_net: # 4. 准备/app/redis/conf/redis.conf配置文件,而mysql也需要提前准备/app/mysql/conf/my.cnf配置文件 # 5. 镜像都准备好了,配置文件也准备好了,docker-compose.yml文件也准备好了 # 现在执行 docker-compose config -q 检查配置,有问题才输出 # 现在执行 docker-compose up -d 其中没有加container_name的会以当前文件夹名+镜像名+序号组成容器名称, # 加了container_name的使用container_name作为容器名称 # 现在执行 docker-compose ps 查看由当前文件夹中的docker-compose.yml文件所构建的所有运行中的容器,包括启动失败退出的 # 可以执行 docker-compose logs 可以查看所有服务的启动日志 # 可以执行 docker-compose logs <服务名称> 可以查看指定服务的启动日志 # 可以执行 docker-compose logs -f <服务名称> 可以实时查看指定服务的启动日志 # 可以执行 docker-compose <服务名称> 可以查看指定服务的启动日志或启动错误日志 # 按照上面配置好并启动后,此时可以连接到mysql: 192.168.134.3 3306 root密码是123456, # 连接成功发现db2024这个数据库已经创建好了,创建t_user表,并手动插入1条用户数据; # 连接到redis:192.168.134.3 6379 连接成功; # 访问服务 http://192.168.134.3:6001/users/1,返回插入的用户数据,查看redis缓存中也有了数据,这说明整个服务已经部署成功。 # 可以执行 docker network ls 可以看到创建了1个新的网络 p_net # 在宿主机执行 docker network inspect p_net 查看"Containers"节点,发现正好有这3个容器 # 可以执行 docker-compose exec microService bash 进入ms01容器内部, # 但是不能使用 docker-compose exec ms01 bash进入到容器内部, # 可以使用docker exec -it ms01 bash 进入ms01容器内部 # 进入ms01容器的内部,执行ping redis01,ping mysql 发现都是能正常ping通的,这说明这3个容器在同一个网络中 # 可以执行 docker-compose pause <服务名称> 可以暂停指定的服务 # 可以执行 docker-compose down 关闭当前docker-compose.yml中定义的所有容器服务,此时docker ps -a 将查看不到任何容器,但是挂载的数据不会删除