欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

docker-compose 和 Dockerfile 配合使用

程序员文章站 2022-07-14 12:06:14
...

1.编译 jar 包

2.Dockerfile: 构建docker镜像配置

  1. FROM: 基础镜像,通过jdk8镜像开始
  2. MAINTAINER: 维护者
  3. ADD: 复制jar包到镜像内,名字为app.jar
  4. EXPOSE: 声明端口
  5. ENTRYPOINT: docker启动时,运行的命令.这里就是容器运行就启动jar服务
使用 Dockerfile 直接构建
[[email protected] alibaba-cloud-admin]# docker build -t alibaba-cloud-admin .
Sending build context to Docker daemon  83.97kB
Step 1/5 : FROM java:8
8: Pulling from library/java
5040bd298390: Pull complete 
fce5728aad85: Pull complete 
76610ec20bf5: Pull complete 
60170fec2151: Pull complete 
e98f73de8f0d: Pull complete 
11f7af24ed9c: Pull complete 
49e2d6393f32: Pull complete 
bb9cdec9c7f3: Pull complete 
Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
Status: Downloaded newer image for java:8
 ---> d23bdf5b1b1b
Step 2/5 : MAINTAINER headean
 ---> Running in 6dbad81aa9ca
Removing intermediate container 6dbad81aa9ca
 ---> 109aba514580
Step 3/5 : VOLUME /services/docker/alibaba-cloud-admin # 指定容器数据挂载点
 ---> Running in 3035553cc8c1
Removing intermediate container 3035553cc8c1
 ---> 79f267d3ca50
Step 4/5 : ADD alibaba-cloud-admin.jar /services/docker/alibaba-cloud-admin/alibaba-cloud-admin.jar
 ---> a248aa4f6ea0
Step 5/5 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/services/docker/alibaba-cloud-admin/alibaba-cloud-admin.jar"]
 ---> Running in 63f69b3a60ff
Removing intermediate container 63f69b3a60ff
 ---> 1fdb24a7755a
Successfully built 1fdb24a7755a
Successfully tagged alibaba-cloud-admin:latest

docker images ls # 查看镜像文件
docker image rm java:8 # 移除镜像文件
docker image rm alibaba-cloud-admin:latest

docker stop 8f7aa09727e7 # 停止容器实例
docker image rm alibaba-cloud-admin:latest # 移除镜像失败
docker-compose ps # 查看编排容器实例是否停止
docker-compose stop # 停止容器实例
docker-compose rm alibaba-cloud-admin # 移除容器编排实例

文件内容

FROM java:8
MAINTAINER headean
VOLUME /services/docker/alibaba-cloud-admin # 指定容器数据挂载点
# 根据自己定义的项目名称进行修改
ADD alibaba-cloud-admin.jar /services/docker/alibaba-cloud-admin/alibaba-cloud-admin.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/services/docker/alibaba-cloud-admin/alibaba-cloud-admin.jar"]	

3.docker-compose.yml: compose配置,创建docker容器

version: "3"
services: 
  # 指定容器服务,下面可配多个服务
  alibaba-cloud-admin: 
    # 指定构建目录,可以使用相对路径
    build: ./alibaba-cloud-admin
    # 跟在build后面,指定构建镜像的名字
    image: alibaba-cloud-admin:latest
    # 指定容器名称
    container_name: alibaba-cloud-admin
    # 重启机制
    restart: always
    volumes:
      # 本地jar包路径
      - /services/docker/alibaba-cloud-admin/alibaba-cloud-admin.jar:/alibaba-cloud-admin.jar
      # 挂载日志 -v A:B ,A指宿主机位置,B指容器位置
      - ./logs:/logs
      # 指定容器时间为宿主机时间
      - /etc/localtime:/etc/localtime
    # 访问端口
    ports:
      - "9509:9509"
    environment:
      # 指定时区
      - TZ="Asia/Shanghai"
    #启动容器后执行的命令
    entrypoint: java -server -Xms256m -Xmx256m -jar -Dserver.port=9509 -Dspring.profiles.active=local alibaba-cloud-admin.jar

  # 指定容器服务,下面可配多个服务
  alibaba-cloud-auth: 
    # 指定构建目录,可以使用相对路径
    build: ./alibaba-cloud-auth
    # 跟在build后面,指定构建镜像的名字
    image: alibaba-cloud-auth:latest
    # 指定容器名称
    container_name: alibaba-cloud-auth
    # 重启机制
    restart: always
    volumes:
      # 本地jar包路径
      - /services/docker/alibaba-cloud-auth/alibaba-cloud-auth.jar:/alibaba-cloud-auth.jar
      # 挂载日志 -v A:B ,A指宿主机位置,B指容器位置
      - ./logs:/logs
      # 指定容器时间为宿主机时间
      - /etc/localtime:/etc/localtime
    # 访问端口
    ports:
      - "9409:9409"
    environment:
      # 指定时区
      - TZ="Asia/Shanghai"
    #启动容器后执行的命令
    entrypoint: java -server -Xms256m -Xmx256m -jar -Dserver.port=9409 -Dspring.profiles.active=local alibaba-cloud-auth.jar

  # 指定容器服务,下面可配多个服务
  alibaba-cloud-gateway: 
    # 指定构建目录,可以使用相对路径
    build: ./alibaba-cloud-gateway
    # 跟在build后面,指定构建镜像的名字
    image: alibaba-cloud-gateway:latest
    # 指定容器名称
    container_name: alibaba-cloud-gateway
    # 重启机制
    restart: always
    volumes:
      # 本地jar包路径
      - /services/docker/alibaba-cloud-gateway/alibaba-cloud-gateway.jar:/alibaba-cloud-gateway.jar
      # 挂载日志 -v A:B ,A指宿主机位置,B指容器位置
      - ./logs:/logs
      # 指定容器时间为宿主机时间
      - /etc/localtime:/etc/localtime
    # 访问端口
    ports:
      - "9209:9209"
    environment:
      # 指定时区
      - TZ="Asia/Shanghai"
    #启动容器后执行的命令
    entrypoint: java -server -Xms256m -Xmx256m -jar -Dserver.port=9209 -Dspring.profiles.active=local alibaba-cloud-gateway.jar

文件结构

services
  -docker
    -docker-compose.yml
    -alibaba-cloud-admin
      -Dockerfile
      -alibaba-cloud-admin.jar

注意:docker images、docker ps、docker-compose 其中使用普通方式和编排方式启动的项目停止的时候在不同的容器中;Dockerfile 编写的时候需要注意 # 号注释问题

参考来源:https://www.cnblogs.com/linyufeng/p/12058595.html