docker-compose 和 Dockerfile 配合使用

1.编译 jar 包

2.Dockerfile: 构建docker镜像配置

  1. FROM: 基础镜像,通过jdk8镜像开始
  2. MAINTAINER: 维护者
  3. ADD: 复制jar包到镜像内,名字为app.jar
  4. EXPOSE: 声明端口
  5. ENTRYPOINT: docker启动时,运行的命令.这里就是容器运行就启动jar服务
使用 Dockerfile 直接构建
[root@VM-12-3-centos 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

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
docker-compose 是一个用于定义和运行多个容器的工具,而 Dockerfile 是用于构建 Docker 镜像的文件。在使用 docker-compose 运行多个容器时,可以通过 Dockerfile 来定义每个容器所需的镜像。 以下是使用 docker-compose 结合 Dockerfile 的基本步骤: 1. 创建一个新的目录,并在该目录中创建一个名为 `docker-compose.yml` 的文件,用于定义容器组成和配置。 2. 在同一目录中,为每个容器创建一个文件夹,并在每个文件夹中创建一个 Dockerfile,用于构建该容器的镜像。可以根据需要,在 Dockerfile 中指定所需的基础镜像、软件包安装、文件复制等操作。 3. 在 `docker-compose.yml` 文件中定义每个容器的配置。使用 `services` 关键字来定义每个服务,并指定该服务使用的镜像和其他配置项。可以参考下面的示例: ```yaml version: "3" services: web: build: ./web # 指定构建 web 服务的 Dockerfile 所在路径 ports: - "8000:8000" # 指定端口映射 volumes: - ./app:/app # 挂载本地目录到容器内部 db: image: mysql:latest environment: - MYSQL_ROOT_PASSWORD=secret - MYSQL_DATABASE=mydatabase ``` 在上述示例中,定义了两个服务:`web` 和 `db`。`web` 服务使用 `./web` 目录中的 Dockerfile 构建镜像,映射本地端口 8000 到容器内部的 8000 端口,并挂载 `./app` 目录到容器内部。 `db` 服务使用官方的 `mysql:latest` 镜像,并设置了环境变量。 4. 运行 `docker-compose up` 命令来启动容器。docker-compose 会根据 `docker-compose.yml` 文件中的配置构建并启动容器组。 使用 docker-compose 结合 Dockerfile 可以更方便地定义和管理多个相关的容器,提高开发和部署的效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值