Skip to content

Commit 3822be4

Browse files
committed
Add own-apache-container
1 parent 454c6a9 commit 3822be4

File tree

5 files changed

+149
-0
lines changed

5 files changed

+149
-0
lines changed

own-apache-container/Dockerfile

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
FROM registry.access.redhat.com/rhel7/rhel:7.6
2+
# docker run -ti registry.redhat.io/rhel7:7.6 bash
3+
# https://github.com/sclorg/httpd-container
4+
5+
ENV HTTPD_CONTAINER_SCRIPTS_PATH=/container-scripts/ \
6+
HTTPD_APP_ROOT=/app \
7+
HTTPD_CONFIGURATION_PATH=${APP_ROOT}/etc/httpd.d \
8+
HTTPD_MAIN_CONF_PATH=/etc/httpd/conf \
9+
HTTPD_MAIN_CONF_MODULES_D_PATH=/etc/httpd/conf.modules.d \
10+
HTTPD_MAIN_CONF_D_PATH=/etc/httpd/conf.d \
11+
HTTPD_VAR_RUN=/run/httpd
12+
13+
RUN yum install -y yum-utils && \
14+
yum-config-manager --enable rhel-server-rhscl-7-rpms && \
15+
INSTALL_PKGS="httpd nss_wrapper gettext" && \
16+
yum install -y --setopt=tsflags=nodocs $INSTALL_PKGS && \
17+
rpm -V $INSTALL_PKGS && \
18+
yum -y clean all --enablerepo='*'
19+
20+
ADD container-scripts/* /container-scripts/
21+
22+
RUN sed -i -e 's/^Listen 80/Listen 0.0.0.0:8080/' ${HTTPD_MAIN_CONF_PATH}/httpd.conf && \
23+
chmod 644 ${HTTPD_MAIN_CONF_PATH}/* && \
24+
chmod 755 ${HTTPD_MAIN_CONF_PATH} && \
25+
chmod 644 ${HTTPD_MAIN_CONF_D_PATH}/* && \
26+
chmod 755 ${HTTPD_MAIN_CONF_D_PATH} && \
27+
chmod 644 ${HTTPD_MAIN_CONF_MODULES_D_PATH}/* && \
28+
chmod 755 ${HTTPD_MAIN_CONF_MODULES_D_PATH} && \
29+
chmod 777 ${HTTPD_VAR_RUN} && \
30+
chmod 777 /var/log/httpd/ && \
31+
sed -i -e "s/^User apache/User default/" ${HTTPD_MAIN_CONF_PATH}/httpd.conf && \
32+
sed -i -e "s/^Group apache/Group root/" ${HTTPD_MAIN_CONF_PATH}/httpd.conf && \
33+
chmod +x /container-scripts/entrypoint.sh && \
34+
mkdir ${HTTPD_APP_ROOT} && \
35+
chmod 775 ${HTTPD_APP_ROOT}
36+
37+
38+
# docker build . -f Dockerfile.anyuid -t httpd && docker run -ti -p 8080:8080 --user 1234 --entrypoint bash httpd
39+
40+
EXPOSE 8080
41+
42+
VOLUME [ "/var/www/html/" ]
43+
44+
# https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact
45+
ENTRYPOINT ["/container-scripts/entrypoint.sh"]

own-apache-container/README.adoc

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Build Images
2+
3+
oc new-build https://github.com/rbo/openshift-examples.git \
4+
--context-dir=own-apache-container --name httpd
5+
6+
oc new-build https://github.com/rbo/openshift-examples.git \
7+
--context-dir=own-apache-container/anyuid --name httpd-anyuid
8+
9+
10+
# Deploy Images
11+
12+
oc new-app httpd
13+
oc expose svc/httpd
14+
15+
oc new-app httpd-anyuid
16+
oc expose svc/httpd-anyuid
17+
# FAIL, because by default it is not allowed to run POD's with uid 0
18+
19+
# Create service account
20+
oc create sa anyuid
21+
22+
# Add privileges to service account to run POD's with uid 0
23+
oc adm policy add-scc-to-user -z anyuid anyuid
24+
25+
oc patch dc/httpd-anyuid --patch '{"spec":{"template":{"spec":{"serviceAccount": "anyuid", "serviceAccountName": "anyuid"}}}}'
26+
27+
# Add persistent volume
28+
29+
```
30+
cat <<EOF | oc apply -f -
31+
apiVersion: v1
32+
kind: PersistentVolumeClaim
33+
metadata:
34+
annotations:
35+
volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/glusterfs
36+
name: httpd
37+
spec:
38+
accessModes:
39+
- ReadWriteMany
40+
resources:
41+
requests:
42+
storage: 1Gi
43+
storageClassName: glusterfs-ocs
44+
EOF
45+
```
46+
47+
oc get pvc --watch
48+
49+
oc set volume dc/httpd --add --name=httpd-volume-1 -t pvc --claim-name=httpd --overwrite --mount-path=/var/www/html/
50+
51+
oc set volume dc/httpd-anyuid --add --name=httpd-anyuid-volume-1 -t pvc --claim-name=httpd --overwrite --mount-path=/var/www/html/
52+
53+
# Rollback
54+
55+
oc rollback dc/httpd-anyuid
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
FROM registry.access.redhat.com/rhel7/rhel:7.6
2+
# docker run -ti registry.redhat.io/rhel7:7.6 bash
3+
4+
RUN yum install -y httpd && \
5+
yum clean -y all && \
6+
rm -rf /var/cache/yum/*
7+
8+
RUN sed -i -e 's/^Listen 80/Listen 0.0.0.0:8080/' /etc/httpd/conf/httpd.conf
9+
10+
11+
# docker build . -f Dockerfile.anyuid -t httpd && docker run -ti -p 8080:8080 --user 1234 --entrypoint bash httpd
12+
13+
EXPOSE 8080
14+
15+
VOLUME [ "/var/www/html/" ]
16+
17+
# https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact
18+
ENTRYPOINT ["httpd","-DFOREGROUND"]
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#!/bin/bash
2+
3+
set -eu
4+
5+
# Set current user in nss_wrapper
6+
passwd_output_dir="${HTTPD_APP_ROOT}/etc"
7+
mkdir -p ${passwd_output_dir}
8+
export USER_ID=$(id -u)
9+
export GROUP_ID=$(id -g)
10+
envsubst < ${HTTPD_CONTAINER_SCRIPTS_PATH}/passwd.template > ${passwd_output_dir}/passwd
11+
export LD_PRELOAD=libnss_wrapper.so
12+
export NSS_WRAPPER_PASSWD=${passwd_output_dir}/passwd
13+
export NSS_WRAPPER_GROUP=/etc/group
14+
15+
16+
exec httpd -D FOREGROUND $@
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
root:x:0:0:root:/root:/bin/bash
2+
bin:x:1:1:bin:/bin:/sbin/nologin
3+
daemon:x:2:2:daemon:/sbin:/sbin/nologin
4+
adm:x:3:4:adm:/var/adm:/sbin/nologin
5+
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6+
sync:x:5:0:sync:/sbin:/bin/sync
7+
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8+
halt:x:7:0:halt:/sbin:/sbin/halt
9+
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10+
operator:x:11:0:operator:/root:/sbin/nologin
11+
games:x:12:100:games:/usr/games:/sbin/nologin
12+
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13+
nobody:x:99:99:Nobody:/:/sbin/nologin
14+
default:x:${USER_ID}:${GROUP_ID}:Default Application User:${HOME}:/sbin/nologin
15+
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

0 commit comments

Comments
 (0)