如何开始使用 Docker、Dockerfile 和 Docker Compose?

Mat*_*ley 3 docker dockerfile docker-compose

将 Dockerfile 与 docker-compose.yml 结合使用的最佳实践是什么?以及如何使用 Jenkins 进行 CI/CD?

我有 2 个微服务和一个 Postgres 数据库。我创建 docker-compose.yml 文件:

version: '3.1'
services:
  myflashcards-service-dictionary:
    image: myflashcards-service-dictionary
  db:
    image: postgres
    restart: always
    ports:
      - 5434:5432
Run Code Online (Sandbox Code Playgroud)

问题是“image:”部分要写什么?我应该先跑吗 mvn clean install -DskipTests dockerfile:build?但是图像名称呢?

我想知道如何自动化整个 CI/CD。

我有 Dockerfile:

FROM openjdk:8-jdk-alpine

ADD target/myflashcards-service-dictionary.jar myflashcards-service-dictionary.jar

ENTRYPOINT exec java -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=$profile -jar /myflashcards-service-dictionary.jar

EXPOSE 8092
Run Code Online (Sandbox Code Playgroud)

我还有 docker-compose.yml 但 docker-compose.yml 如何知道应该使用哪个图像?

您能否简要概述一下如何将我的微服务应用程序部署到服务器的主要流程?

如何使用 Dockerfile 和 docker-compose?什么时候需要这些文件?我们是否只需要 Dockerfile 来在 Docker Hub 中创建镜像?

Pra*_*tne 5

你的 Dockerfile 类似于 Maven POM 文件;它是 Docker 创建镜像的一组指令(docker build image-name .)。Dockerfile 是必须的,没有它就无法使用 Docker。这就像尝试在没有 POM 文件的情况下使用 Maven。

图像的名称是您为 Maven 插件指定的名称 ( <repository>spotify/foobar</repository>),或者docker build <image-name> .可以是您喜欢的任何名称。

Docker Compose 是一个可用于管理服务的工具,该服务可以由多个微服务组成。它允许用户创建可以稍后运行的编排计划。这允许用户编写 Docker 环境的复杂信息的脚本,例如卷、网络、重启策略等等。

Docker Compose 文件是一个可选文件,可以替换为其他替代文件,例如HashiCorp Nomad ,但 Docker Compose 是最容易使用的文件之一,如果您是 Docker 新手,请坚持使用此文件。

Docker Compose 能够在运行时构建和使用映像(对于开发有用)或运行存储库中已存在的映像(推荐生产)。完整的Docker Compose 文档应该解释如何编写一个。

在运行时构建

version: '3.1'
services:
  myflashcards-service-dictionary:
    build: path/to/folder/of/Dockerfile
  db:
    image: postgres
    restart: always
    ports:
      - 5434:5432
Run Code Online (Sandbox Code Playgroud)

运行预先存在的图像

version: '3.1'
services:
  myflashcards-service-dictionary:
    image: myflashcards-service-dictionary
  db:
    image: postgres
    restart: always
    ports:
      - 5434:5432
Run Code Online (Sandbox Code Playgroud)

Dockerfile 可以在没有 Docker Compose 的情况下使用,唯一的区别是它在生产中不实用,因为它被视为单个服务部署。据我所知,它不能与Docker Swarm一起使用

就 CI/CD 而言,您可以使用 Maven 插件,例如Dockerfile Maven Plugin您可以在此处找到文档。然后可以将该映像推送到 Docker Hub、AWS ECR 等存储库,甚至是自托管存储库(我不建议这样做,除非您愿意设置高度安全的网络,特别是如果它不是内部网络)。