-1

我有一个现有的 docker-compose 文件

version: '3.6'
services:

  verdaccio:
    restart: always
    image: verdaccio/verdaccio
    container_name: verdaccio
    ports:
      - 4873:4873
    volumes:
      - conf:/verdaccio/conf
      - storage:/verdaccio/storage
      - plugins:/verdaccio/plugins
    environment:
      - VERDACCIO_PROTOCOL=https

networks:
    default:
        external:
            name: registry

我想使用 DockerFile 而不是 docker-compose,因为在 Azure 容器注册表上部署 DockerFile 会更容易。

我尝试了许多在博客和其他人上发布的解决方案,但没有任何我需要的解决方案。

如何从上述 docker-compose 文件创建简单的 DockerFile?

4

4 回答 4

2

你不能。许多 Docker Compose 选项(和等效docker run选项)只能在启动容器时设置。在您的示例中,重新启动策略、发布的端口、已安装的卷、网络配置和覆盖容器名称都是仅运行时选项。

如果您构建了一个与此匹配的 Docker 映像,您最多可以添加一个ENV变量,并将COPY其放入配置文件和插件中,而不是将它们存储在命名卷中。其中大部分docker-compose.yml仍然是必需的。

于 2020-05-11T10:22:30.533 回答
0

我已经通过使用下面给出的现有 verdaccio DockerFile 解决了这个问题。

FROM node:12.16.2-alpine as builder

ENV NODE_ENV=production \
    VERDACCIO_BUILD_REGISTRY=https://registry.verdaccio.org

RUN apk --no-cache add openssl ca-certificates wget && \
    apk --no-cache add g++ gcc libgcc libstdc++ linux-headers make python && \
    wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
    wget -q https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.25-r0/glibc-2.25-r0.apk && \
    apk add glibc-2.25-r0.apk

WORKDIR /opt/verdaccio-build
COPY . .

RUN yarn config set registry $VERDACCIO_BUILD_REGISTRY && \
    yarn install --production=false && \
    yarn lint && \
    yarn code:docker-build && \
    yarn cache clean && \
    yarn install --production=true



FROM node:12.16.2-alpine
LABEL maintainer="https://github.com/verdaccio/verdaccio"

ENV VERDACCIO_APPDIR=/opt/verdaccio \
    VERDACCIO_USER_NAME=verdaccio \
    VERDACCIO_USER_UID=10001 \
    VERDACCIO_PORT=4873 \
    VERDACCIO_PROTOCOL=http
ENV PATH=$VERDACCIO_APPDIR/docker-bin:$PATH \
    HOME=$VERDACCIO_APPDIR

WORKDIR $VERDACCIO_APPDIR

RUN apk --no-cache add openssl dumb-init

RUN mkdir -p /verdaccio/storage /verdaccio/plugins /verdaccio/conf

COPY --from=builder /opt/verdaccio-build .

ADD conf/docker.yaml /verdaccio/conf/config.yaml

RUN adduser -u $VERDACCIO_USER_UID -S -D -h $VERDACCIO_APPDIR -g "$VERDACCIO_USER_NAME user" -s /sbin/nologin $VERDACCIO_USER_NAME && \
    chmod -R +x $VERDACCIO_APPDIR/bin $VERDACCIO_APPDIR/docker-bin && \
    chown -R $VERDACCIO_USER_UID:root /verdaccio/storage && \
    chmod -R g=u /verdaccio/storage /etc/passwd

USER $VERDACCIO_USER_UID

EXPOSE $VERDACCIO_PORT

VOLUME /verdaccio/storage

ENTRYPOINT ["uid_entrypoint"]

CMD $VERDACCIO_APPDIR/bin/verdaccio --config /verdaccio/conf/config.yaml --listen $VERDACCIO_PROTOCOL://0.0.0.0:$VERDACCIO_PORT

通过对 DockerFile 进行一些更改,我能够构建我的 docker 映像并将其推送到 azure 容器注册表并部署到应用服务。

@Giga Kokaia、@Rob Evans、@Aman - 感谢您提出的建议,让我们更容易思考。

于 2020-05-19T08:00:09.800 回答
0

如果要将conf,storageplugins文件/文件夹放入图像中,只需复制它们:

FROM verdaccio/verdaccio
WORKDIR /verdaccio
COPY conf conf
COPY storage storage
COPY plugins plugins

但是如果您需要保留文件/和文件夹更改,那么您应该保持它们现在的样子。

于 2020-05-11T10:19:29.073 回答
0

docker-compose 使用现有图像。

如果您想要创建一个自定义图像并将其与您的 docker-compose 设置一起使用,这是完全可能的。

  1. 在此处创建您的Dockerfile示例:https ://docs.docker.com/get-started/part2/
  2. 从您的 Dockerfile 构建一个“图像”:docker build -f /path/to/Dockerfile -t saurabh_rai/myapp:1.0这会返回一个图像 ID,例如12abef12
  3. 登录到您的 dockerhub 帐户 ( saurabh_rai) 并为要推送到的图像创建一个存储库 ( myapp)
  4. docker push saurabh_rai/myapp:1.0- 将您的图像推送到 hub.docker.com 存储库,供您的用户到存储myapp库。您可能需要执行docker login此操作并像往常一样在命令行输入您的用户名/密码。
  5. 更新您的docker-compose.yaml文件以使用您的图像saurabh_rai/myapp:1.0

例子docker-compose.yaml

version: '3.6'
services:

  verdaccio:
    restart: always
    container_name: verdaccio
    image: saurabh_rai/myapp:1.0
    ports:
      - 4873:4873
    volumes:
      - conf:/verdaccio/conf
      - storage:/verdaccio/storage
      - plugins:/verdaccio/plugins
    environment:
      - VERDACCIO_PROTOCOL=https
    network:
      - registry
于 2020-05-11T10:27:37.740 回答