【SpringCloud】Docker环境部署


基础镜像先使用官方的openjdk:11镜像,之后看情况自制对应的镜像。

拉取镜像
docker pull openjdk:11
默认是Debian的大小为654MB,需要自制成Centos7的。

制作CentOs7镜像
拉取CentOs:7.9.2009镜像

docker pull centos:7.9.2009


Dockerfile文件

# 基础镜像
FROM centos:7.9.2009
# 创建java文件所放目录
RUN mkdir /usr/local/java
# 将jdk压缩文件复制到镜像中,它将自动解压缩tar文件
ADD jdk-11.tar.gz /usr/local/java/
# 设置环境变量
ENV JAVA_HOME /usr/local/java/jdk-11
ENV PATH $JAVA_HOME/bin:$PATH

生成镜像

docker build -t openjdk-centos7:11 .

生成镜像大小为604MB

微服务镜像
整体目录结构如下:

├── .env
├── docker-compose.yml
├── Dockerfile
└── service
    ├── aec-service-user-1.0.jar
    ├── config
    │   ├── application-mqtt.yml
    │   ├── application-rabbitmq.yml
    │   ├── application-service.yml
    │   ├── application-user.yml
    │   └── application.yml
    ├── service-name
    ├── start.sh
    └── stop.sh

制作微服务镜像
Dockerfile文件内容如下:

# 基础镜像
FROM openjdk-centos7:11
# 创建工作目录
RUN mkdir -p /home/data/service
# 拷贝文件到指定目录下
COPY service /home/data/service
# 容器工作目录
WORKDIR /home/data/service
# 启动命令
CMD ["sh", "start.sh"]

启动脚本start.sh

## 其中启动脚本内容如下:
#!/bin/sh

FOLDER_PATH=/home/data/service

cd $FOLDER_PATH

JAR_NAME=`cat service-name`

## ${PARAMS}为通过docker传入的环境变量
/usr/local/java/jdk-11/bin/java -jar $FOLDER_PATH/$JAR_NAME ${PARAMS}

生成镜像

docker build -t aec-service-user:1.0.0.0 .

测试镜像

# 创建并启动容器
docker run -dit --name aec-service-user-1.0.0.0 aec-service-user:1.0.0.0
# 进入容器查看
docker exec -it aec-service-user-1.0.0.0 /bin/bash
# 通过查看日志可以得知容器启动正常,那么可以将其先删除了
docker stop 容器id/名字
docker rm 容器id/名字

编写微服务Docker-Compose
docker-compose.yml文件内容如下

services:
  aec-service-user:
    logging:
      driver: none
    container_name: aec-service-user-${SERVICE_VERSION}
    image: aec-service-user:${SERVICE_VERSION}
    restart: always
    ports:
      - "$SERVICE_EXPORT_PORT:29999"
    volumes:
    - $SERVICE_EXPORT_FOLDER:/home/data/logs
    - /etc/localtime:/etc/localtime:ro
    environment:
      TZ: Asia/Shanghai
      PARAMS: "
        --server.port=29999
        "
version: '3.1'

环境变量文件.env内容如下:

SERVICE_VERSION=1.0.0.0
SERVICE_EXPORT_PORT=14000
SERVICE_EXPORT_FOLDER=/home/xxx/dockerVolume/aec-service-user

以上文件解析如下:

1、docker-compose服务名为aec-service-user
2、创建容器名为aec-service-user-1.0.0.0
3、关闭docker日志
4、使用的镜像为aec-service-user:1.0.0.0
5、重启策略为:在容器退出时总是重启容器
6、映射端口有:将容器内部的29999映射为主机的14000
7、数据卷映射有:将主机的/home/xxx/dockerVolume/aec-service-user和容器的/home/data/logs做映射;将主机的/etc/localtime和容器的/etc/localtime做只读映射(容器中无法修改该文件)
8、设置容器的环境变量有TZ和PARAMS

启动服务

docker-compose.yml up -d

## 这个命令需要在docker-compose.yml目录执行
## -d表示后台运行

启动之后将会有自动创建容器并将其启动。

其他常用docker-compose命令有:

# 在后台启动所有服务
docker-compose up -d

# 列出项目中目前的所有容器
docker-compose ps

# 停止正在运行的容器,可以通过docker-compose start 再次启动
docker-compose stop

# 停止和删除容器、网络、卷、镜像
# --rmi all 删除删除compose文件中定义的所有镜像
docker-compose down

# 查看服务容器的输出
docker-compose logs

# 服务容器一旦构建后,将会带上一个标记名。可以随时在项目目录下运行docker-compose build来重新构建服务
docker-compose build

# 拉取服务依赖的镜像
docker-compose pull

# 重启项目中的服务
docker-compose restart

# 删除所有(停止状态的)服务容器
# –f, –force,强制直接删除,包括非停止状态的容器
docker-compose rm

# 启动已经存在的服务容器
docker-compose start

# 在指定服务上执行一个命令
docker-compose run

# 设置指定服务运行的容器个数。通过service=num的参数来设置数量
docker-compose scale

# 暂停/恢复一个服务容器
docker-compose pause/unpause

# 验证并查看compose文件配置
docker-compose config

# 显示某个容器端口所映射的公共端口
docker-compose port

镜像导入导出

# 导出
docker save aec-service-user:1.0.0.0 > aec-service-user-1.0.0.0.tar.gz 

# 导入
docker load < aec-service-user-1.0.0.0.tar.gz

通过容器导入导出
以下介绍通过容器进行导入导出,目前来说并不会用上就是。

# 导出
docker export -o aec-service-user-container-1.0.0.0.tar.gz aec-service-user-1.0.0.0

# 导入(导入成镜像,然后通过镜像启动容器)
docker import aec-service-user-container-1.0.0.0.tar.gz aec-service-user:1.0.0.0

# 启动容器
## 此时直接去启动会报错
## docker: Error response from daemon: No command specified.
## 需要加上原本镜像的启动命令
docker run -dit --name aec-service-user-1.0.0.0 aec-service-user:1.0.0.0 sh start.sh


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值