forked from openbao/openbao
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Dockerfile
150 lines (117 loc) · 5.65 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: MPL-2.0
#### DOCKERHUB DOCKERFILE ####
FROM alpine:3.20 as default
ARG BIN_NAME
# NAME and PRODUCT_VERSION are the name of the software in releases.hashicorp.com
# and the version to download. Example: NAME=openbao PRODUCT_VERSION=1.2.3.
ARG NAME=openbao
ARG PRODUCT_VERSION
ARG PRODUCT_REVISION
# Additional metadata labels used by container registries, platforms
# and certification scanners.
LABEL name="OpenBao" \
maintainer="OpenBao <[email protected]>" \
vendor="OpenBao" \
version=${PRODUCT_VERSION} \
release=${PRODUCT_REVISION} \
revision=${PRODUCT_REVISION} \
summary="OpenBao is a tool for securely accessing secrets." \
description="OpenBao is a tool for securely accessing secrets. A secret is anything that you want to tightly control access to, such as API keys, passwords, certificates, and more. OpenBao provides a unified interface to any secret, while providing tight access control and recording a detailed audit log."
COPY LICENSE /licenses/mozilla.txt
# Set ARGs as ENV so that they can be used in ENTRYPOINT/CMD
ENV NAME=$NAME
ENV VERSION=$VERSION
# Create a non-root user to run the software.
RUN addgroup ${NAME} && adduser -S -G ${NAME} ${NAME}
RUN apk add --no-cache libcap su-exec dumb-init tzdata
COPY $BIN_NAME /bin/
# /vault/logs is made available to use as a location to store audit logs, if
# desired; /vault/file is made available to use as a location with the file
# storage backend, if desired; the server will be started with /vault/config as
# the configuration directory so you can add additional config files in that
# location.
RUN mkdir -p /openbao/logs && \
mkdir -p /openbao/file && \
mkdir -p /openbao/config && \
chown -R ${NAME}:${NAME} /openbao
# Expose the logs directory as a volume since there's potentially long-running
# state in there
VOLUME /openbao/logs
# Expose the file directory as a volume since there's potentially long-running
# state in there
VOLUME /openbao/file
# 8200/tcp is the primary interface that applications use to interact with
# OpenBao.
EXPOSE 8200
# The entry point script uses dumb-init as the top-level process to reap any
# zombie processes created by OpenBao sub-processes.
COPY .release/docker/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["docker-entrypoint.sh"]
# # By default you'll get a single-node development server that stores everything
# # in RAM and bootstraps itself. Don't use this configuration for production.
CMD ["server", "-dev"]
#### UBI DOCKERFILE ####
FROM registry.access.redhat.com/ubi9-minimal:9.4 as ubi
ARG BIN_NAME
# PRODUCT_VERSION is the version built dist/$TARGETOS/$TARGETARCH/$BIN_NAME,
# which we COPY in later. Example: PRODUCT_VERSION=1.2.3.
ARG PRODUCT_VERSION
ARG PRODUCT_REVISION
# Additional metadata labels used by container registries, platforms
# and certification scanners.
LABEL name="OpenBao" \
maintainer="OpenBao <[email protected]>" \
vendor="OpenBao" \
version=${PRODUCT_VERSION} \
release=${PRODUCT_REVISION} \
revision=${PRODUCT_REVISION} \
summary="OpenBao is a tool for securely accessing secrets." \
description="OpenBao is a tool for securely accessing secrets. A secret is anything that you want to tightly control access to, such as API keys, passwords, certificates, and more. OpenBao provides a unified interface to any secret, while providing tight access control and recording a detailed audit log."
COPY LICENSE /licenses/mozilla.txt
# Set ARGs as ENV so that they can be used in ENTRYPOINT/CMD
ENV NAME=$NAME
ENV VERSION=$VERSION
# Set up certificates, our base tools, and OpenBao. Unlike the other version of
# this (https://github.com/hashicorp/docker-vault/blob/master/ubi/Dockerfile),
# we copy in the OpenBao binary from CRT.
RUN set -eux; \
microdnf install -y ca-certificates gnupg openssl libcap tzdata procps shadow-utils util-linux
# Create a non-root user to run the software.
RUN groupadd --gid 1000 openbao && \
adduser --uid 100 --system -g openbao openbao && \
usermod -a -G root openbao
# Copy in the new OpenBao from CRT pipeline, rather than fetching it from our
# public releases.
COPY $BIN_NAME /bin/
# /vault/logs is made available to use as a location to store audit logs, if
# desired; /vault/file is made available to use as a location with the file
# storage backend, if desired; the server will be started with /vault/config as
# the configuration directory so you can add additional config files in that
# location.
ENV HOME /home/openbao
RUN mkdir -p /openbao/logs && \
mkdir -p /openbao/file && \
mkdir -p /openbao/config && \
mkdir -p $HOME && \
chown -R openbao /openbao && chown -R openbao $HOME && \
chgrp -R 0 $HOME && chmod -R g+rwX $HOME && \
chgrp -R 0 /openbao && chmod -R g+rwX /openbao
# Expose the logs directory as a volume since there's potentially long-running
# state in there
VOLUME /openbao/logs
# Expose the file directory as a volume since there's potentially long-running
# state in there
VOLUME /openbao/file
# 8200/tcp is the primary interface that applications use to interact with
# OpenBao.
EXPOSE 8200
# The entry point script uses dumb-init as the top-level process to reap any
# zombie processes created by OpenBao sub-processes.
COPY .release/docker/ubi-docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["docker-entrypoint.sh"]
# Use the OpenBao user as the default user for starting this container.
USER openbao
# # By default you'll get a single-node development server that stores everything
# # in RAM and bootstraps itself. Don't use this configuration for production.
CMD ["server", "-dev"]