Multi arch nginx-slim docker image

Signed-off-by: Manjunath A Kumatagi <mkumatag@in.ibm.com>
This commit is contained in:
Manjunath A Kumatagi 2017-04-11 19:19:15 +05:30
parent 6ed6475e87
commit 006bb047aa
6 changed files with 100 additions and 14 deletions

View file

@ -13,7 +13,7 @@
# limitations under the License.
FROM gcr.io/google_containers/ubuntu-slim:0.8
FROM BASEIMAGE
COPY build.sh /tmp

View file

@ -1,14 +1,44 @@
# Copyright 2017 The Kubernetes Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
all: push
# 0.0.0 shouldn't clobber any released builds
TAG = 0.15
PREFIX = gcr.io/google_containers/nginx-slim
TAG = 0.16
REGISTRY = gcr.io/google_containers
ARCH ?= $(shell go env GOARCH)
IMGNAME = nginx-slim
IMAGE = $(REGISTRY)/${IMGNAME}-$(ARCH)
# Set default base image dynamically for each arch
ifeq ($(ARCH),amd64)
BASEIMAGE?=gcr.io/google_containers/ubuntu-slim-amd64:0.9
endif
ifeq ($(ARCH),ppc64le)
BASEIMAGE?=gcr.io/google_containers/ubuntu-slim-ppc64le:0.9
endif
TEMP_DIR := $(shell mktemp -d)
container:
docker build --pull -t $(PREFIX):$(TAG) .
cp ./* $(TEMP_DIR)
cd $(TEMP_DIR) && sed -i.bak 's|BASEIMAGE|$(BASEIMAGE)|g' Dockerfile
docker build -t $(IMAGE):$(TAG) $(TEMP_DIR)
push: container
gcloud docker -- push $(PREFIX):$(TAG)
gcloud docker -- push $(IMAGE):$(TAG)
clean:
docker rmi -f $(PREFIX):$(TAG) || true

View file

@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/bash
# Copyright 2015 The Kubernetes Authors.
#
@ -32,6 +32,8 @@ export NGINX_SUBSTITUTIONS=bc58cb11844bc42735bbaef7085ea86ace46d05b
export BUILD_PATH=/tmp/build
ARCH=$(uname -p)
get_src()
{
hash="$1"
@ -47,6 +49,12 @@ get_src()
mkdir "$BUILD_PATH"
cd "$BUILD_PATH"
if [[ ${ARCH} == "ppc64le" ]]; then
apt-get update && apt-get install -y software-properties-common && \
add-apt-repository -y ppa:ibmpackages/luajit
apt-get update && apt-get install -y lua5.1 lua5.1-dev
fi
# install required packages to build
apt-get update && apt-get install --no-install-recommends -y \
bash \
@ -120,6 +128,11 @@ cd "$BUILD_PATH/nginx-$NGINX_VERSION"
echo "Applying tls nginx patches..."
patch -p1 < $BUILD_PATH/nginx__dynamic_tls_records.patch
CC_OPT='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64'
if [[ ${ARCH} == "x86_64" ]]; then
CC_OPT+=' -mtune=generic'
fi
./configure \
--prefix=/usr/share/nginx \
--conf-path=/etc/nginx/nginx.conf \
@ -154,7 +167,7 @@ patch -p1 < $BUILD_PATH/nginx__dynamic_tls_records.patch
--without-mail_imap_module \
--without-http_uwsgi_module \
--without-http_scgi_module \
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' \
--with-cc-opt="${CC_OPT}" \
--add-module="$BUILD_PATH/ngx_devel_kit-$NDK_VERSION" \
--add-module="$BUILD_PATH/set-misc-nginx-module-$SETMISC_VERSION" \
--add-module="$BUILD_PATH/nginx-module-vts-$VTS_VERSION" \
@ -169,7 +182,13 @@ patch -p1 < $BUILD_PATH/nginx__dynamic_tls_records.patch
echo "Installing CJSON module"
cd "$BUILD_PATH/lua-cjson-$LUA_CJSON_VERSION"
make LUA_INCLUDE_DIR=/usr/include/luajit-2.0 && make install
if [[ ${ARCH} == "ppc64le" ]];then
LUA_DIR=/usr/include/luajit-2.1
else
LUA_DIR=/usr/include/luajit-2.0
fi
make LUA_INCLUDE_DIR=${LUA_DIR} && make install
echo "Installing lua-resty-http module"
# copy lua module
@ -195,6 +214,10 @@ apt-mark unmarkauto \
geoip-bin \
openssl
if [[ ${ARCH} == "ppc64le" ]]; then
apt-mark unmarkauto liblua5.1-0
fi
apt-get remove -y --purge \
build-essential \
gcc-5 \

1
images/ubuntu-slim/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
rootfs.tar

View file

@ -1,4 +1,4 @@
FROM ubuntu:16.04
FROM BASEIMAGE
ENV DEBIAN_FRONTEND=noninteractive

View file

@ -1,22 +1,54 @@
# Copyright 2017 The Kubernetes Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
all: push
TAG ?= 0.8
PREFIX ?= gcr.io/google-containers/ubuntu-slim
TAG ?= 0.9
REGISTRY = gcr.io/google_containers
ARCH ?= $(shell go env GOARCH)
IMGNAME = ubuntu-slim
IMAGE = $(REGISTRY)/${IMGNAME}-$(ARCH)
BUILD_IMAGE ?= ubuntu-build
TAR_FILE ?= rootfs.tar
PUSH_TOOL ?= gcloud
# Set default base image dynamically for each arch
ifeq ($(ARCH),amd64)
BASEIMAGE?=ubuntu:16.04
endif
ifeq ($(ARCH),ppc64le)
BASEIMAGE?=ppc64le/ubuntu:16.04
endif
TEMP_DIR := $(shell mktemp -d)
container: clean
docker build --pull -t $(BUILD_IMAGE) -f Dockerfile.build .
cp ./* $(TEMP_DIR)
cd $(TEMP_DIR) && sed -i.bak 's|BASEIMAGE|$(BASEIMAGE)|g' Dockerfile.build
docker build --pull -t $(BUILD_IMAGE) -f $(TEMP_DIR)/Dockerfile.build $(TEMP_DIR)
docker create --name $(BUILD_IMAGE) $(BUILD_IMAGE)
docker export $(BUILD_IMAGE) > $(TAR_FILE)
docker build --pull -t $(PREFIX):$(TAG) .
cp rootfs.tar $(TEMP_DIR)
docker build --pull -t $(IMAGE):$(TAG) $(TEMP_DIR)
push: container
$(PUSH_TOOL) docker -- push $(PREFIX):$(TAG)
clean:
docker rmi -f $(PREFIX):$(TAG) || true
docker rmi -f $(IMAGE):$(TAG) || true
docker rmi -f $(BUILD_IMAGE) || true
docker rm -f $(BUILD_IMAGE) || true
rm -f $(TAR_FILE)