在 Docker 个容器内建造
building inside Docker container
在 Docker 容器内的 运行 Gitea 的简单情况下,当前的 Docker 文件假定您已经编译了 Gitea 并且可以使用它来创建图像。
就我而言,我的机器上当前没有安装 Gitea。我在 Mac OSX 上,我的想法是,如果我在这台机器上构建,但是 Gitea Docker 文件使用 Alpine Linux 作为其基础图像,会有一些在这种情况下发生冲突?有人可以澄清这是否是一个问题吗?
我想到的解决方法是使用 Alpine Linux 直接在容器内构建 Gitea。另一种可能性是我在 Mac OSX 上编译,然后更改我想的基本图像。
这两种解决方法是否有意义,哪一种更可取?我们在镜像中使用的二进制文件是否也必须与基础镜像兼容?我也这么认为,但也欢迎您的意见。
编辑:我试过在容器内编译,但是 运行 出了问题。从 DockerHub 可用 Docker 文件如下:
FROM alpine:3.7
LABEL maintainer="The Gitea Authors"
EXPOSE 22 3000
RUN apk --no-cache add \
su-exec \
ca-certificates \
sqlite \
bash \
git \
linux-pam \
s6 \
curl \
openssh \
gettext \
tzdata \
make
RUN addgroup \
-S -g 1000 \
git && \
adduser \
-S -H -D \
-h /data/git \
-s /bin/bash \
-u 1000 \
-G git \
git && \
echo "git:$(dd if=/dev/urandom bs=24 count=1 status=none | base64)" |
chpasswd
# Dockerfile assumes Gitea is already up and running
# In this case, copy the source to container and Compile Gitea in Alpine
Environment
COPY gitea-master.zip /
RUN unzip gitea-master.zip
RUN cd gitea-master
RUN make generate all
你可以看到我已经添加了将 gitea 复制到容器中,解压,cd 到目录中并构建的说明,但我得到以下输出:
Step 1/17 : FROM alpine:3.7
---> 3fd9065eaf02
Step 2/17 : LABEL maintainer="The Gitea Authors"
---> Using cache
---> b6bb053b3e89
Step 3/17 : EXPOSE 22 3000
---> Using cache
---> ade88a29df64
Step 4/17 : RUN apk --no-cache add su-exec ca-certificates
sqlite bash git linux-pam s6 curl openssh
gettext tzdata make
---> Using cache
---> 460a5562c60f
Step 5/17 : RUN addgroup -S -g 1000 git && adduser -S -H -D
-h /data/git -s /bin/bash -u 1000 -G git git && echo
"git:$(dd if=/dev/urandom bs=24 count=1 status=none | base64)" | chpasswd
---> Using cache
---> 07ff1f0b2d3e
Step 6/17 : COPY gitea-master.zip /
---> Using cache
---> 3ad1e3177659
Step 7/17 : RUN unzip gitea-master.zip
---> Using cache
---> 61a2beb19e1e
Step 8/17 : RUN cd gitea-master
---> Using cache
---> 6985914927b9
Step 9/17 : RUN make generate all
---> Running in 3e603f88c302
make: *** No rule to make target 'generate'. Stop.
The command '/bin/sh -c make generate all' returned a non-zero code: 2
Makefile 清楚地表明这些目标是可用的,但这让我有点困惑。有什么建议吗?
为了在 OSX 上为 Linux 构建 Go 二进制文件(我检查了 gitea,它似乎是用 Go 构建的)你需要提供环境变量 GOOS
集至 linux
。您可以尝试在 gitea makefile 的这一行前面添加 GOOS=linux
: https://github.com/go-gitea/gitea/blob/master/Makefile#L221 ,或者简单地 运行 GOOS=linux make generate build
。这应该创建一个可以在 Docker 图像中使用的 go 二进制文件。
编辑以响应编辑:可能您将 gitea-master 解压缩到更深的目录中,在构建图像时检查 ls 的输出以查看 Makefile 是否对您可用(看起来您的 pwd 中没有 Makefile 而建筑形象)。
在 Docker 容器内的 运行 Gitea 的简单情况下,当前的 Docker 文件假定您已经编译了 Gitea 并且可以使用它来创建图像。
就我而言,我的机器上当前没有安装 Gitea。我在 Mac OSX 上,我的想法是,如果我在这台机器上构建,但是 Gitea Docker 文件使用 Alpine Linux 作为其基础图像,会有一些在这种情况下发生冲突?有人可以澄清这是否是一个问题吗?
我想到的解决方法是使用 Alpine Linux 直接在容器内构建 Gitea。另一种可能性是我在 Mac OSX 上编译,然后更改我想的基本图像。
这两种解决方法是否有意义,哪一种更可取?我们在镜像中使用的二进制文件是否也必须与基础镜像兼容?我也这么认为,但也欢迎您的意见。
编辑:我试过在容器内编译,但是 运行 出了问题。从 DockerHub 可用 Docker 文件如下:
FROM alpine:3.7
LABEL maintainer="The Gitea Authors"
EXPOSE 22 3000
RUN apk --no-cache add \
su-exec \
ca-certificates \
sqlite \
bash \
git \
linux-pam \
s6 \
curl \
openssh \
gettext \
tzdata \
make
RUN addgroup \
-S -g 1000 \
git && \
adduser \
-S -H -D \
-h /data/git \
-s /bin/bash \
-u 1000 \
-G git \
git && \
echo "git:$(dd if=/dev/urandom bs=24 count=1 status=none | base64)" |
chpasswd
# Dockerfile assumes Gitea is already up and running
# In this case, copy the source to container and Compile Gitea in Alpine
Environment
COPY gitea-master.zip /
RUN unzip gitea-master.zip
RUN cd gitea-master
RUN make generate all
你可以看到我已经添加了将 gitea 复制到容器中,解压,cd 到目录中并构建的说明,但我得到以下输出:
Step 1/17 : FROM alpine:3.7
---> 3fd9065eaf02
Step 2/17 : LABEL maintainer="The Gitea Authors"
---> Using cache
---> b6bb053b3e89
Step 3/17 : EXPOSE 22 3000
---> Using cache
---> ade88a29df64
Step 4/17 : RUN apk --no-cache add su-exec ca-certificates
sqlite bash git linux-pam s6 curl openssh
gettext tzdata make
---> Using cache
---> 460a5562c60f
Step 5/17 : RUN addgroup -S -g 1000 git && adduser -S -H -D
-h /data/git -s /bin/bash -u 1000 -G git git && echo
"git:$(dd if=/dev/urandom bs=24 count=1 status=none | base64)" | chpasswd
---> Using cache
---> 07ff1f0b2d3e
Step 6/17 : COPY gitea-master.zip /
---> Using cache
---> 3ad1e3177659
Step 7/17 : RUN unzip gitea-master.zip
---> Using cache
---> 61a2beb19e1e
Step 8/17 : RUN cd gitea-master
---> Using cache
---> 6985914927b9
Step 9/17 : RUN make generate all
---> Running in 3e603f88c302
make: *** No rule to make target 'generate'. Stop.
The command '/bin/sh -c make generate all' returned a non-zero code: 2
Makefile 清楚地表明这些目标是可用的,但这让我有点困惑。有什么建议吗?
为了在 OSX 上为 Linux 构建 Go 二进制文件(我检查了 gitea,它似乎是用 Go 构建的)你需要提供环境变量 GOOS
集至 linux
。您可以尝试在 gitea makefile 的这一行前面添加 GOOS=linux
: https://github.com/go-gitea/gitea/blob/master/Makefile#L221 ,或者简单地 运行 GOOS=linux make generate build
。这应该创建一个可以在 Docker 图像中使用的 go 二进制文件。
编辑以响应编辑:可能您将 gitea-master 解压缩到更深的目录中,在构建图像时检查 ls 的输出以查看 Makefile 是否对您可用(看起来您的 pwd 中没有 Makefile 而建筑形象)。