Define a base Docker image and config-engine docker image based on Debian Stretch (#2076)
* Build a Docker base image based on Debian Stretch * Build a config-engine Docker image based on Stretch * Do not install socat from Debian repo * Add changes that were made to docker-base since this PR was opened
This commit is contained in:
parent
33fe8d298e
commit
3f138e899c
2
.gitignore
vendored
2
.gitignore
vendored
@ -47,7 +47,9 @@ src/thrift/*
|
||||
|
||||
# Autogenerated Dockerfiles
|
||||
dockers/docker-base/Dockerfile
|
||||
dockers/docker-base-stretch/Dockerfile
|
||||
dockers/docker-config-engine/Dockerfile
|
||||
dockers/docker-config-engine-stretch/Dockerfile
|
||||
dockers/docker-database/Dockerfile
|
||||
dockers/docker-dhcp-relay/Dockerfile
|
||||
dockers/docker-fpm-frr/Dockerfile
|
||||
|
79
dockers/docker-base-stretch/Dockerfile.j2
Normal file
79
dockers/docker-base-stretch/Dockerfile.j2
Normal file
@ -0,0 +1,79 @@
|
||||
FROM debian:stretch
|
||||
|
||||
# Clean documentation in FROM image
|
||||
RUN find /usr/share/doc -depth \( -type f -o -type l \) ! -name copyright | xargs rm || true
|
||||
|
||||
# Clean doc directories that are empty or only contain empty directories
|
||||
RUN while [ -n "$(find /usr/share/doc -depth -type d -empty -print -exec rmdir {} +)" ]; do :; done
|
||||
RUN rm -rf \
|
||||
/usr/share/man/* \
|
||||
/usr/share/groff/* \
|
||||
/usr/share/info/* \
|
||||
/usr/share/lintian/* \
|
||||
/usr/share/linda/* \
|
||||
/var/cache/man/* \
|
||||
/usr/share/locale/*
|
||||
|
||||
# Make apt-get non-interactive
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Configure data sources for apt/dpkg
|
||||
COPY ["dpkg_01_drop", "/etc/dpkg/dpkg.cfg.d/01_drop"]
|
||||
COPY ["sources.list", "/etc/apt/sources.list"]
|
||||
COPY ["no_install_recommend_suggest", "/etc/apt/apt.conf.d"]
|
||||
RUN apt-get update
|
||||
|
||||
# Pre-install fundamental packages
|
||||
RUN apt-get -y install \
|
||||
less \
|
||||
perl \
|
||||
procps \
|
||||
python \
|
||||
rsyslog \
|
||||
vim-tiny
|
||||
|
||||
COPY ["etc/rsyslog.conf", "/etc/rsyslog.conf"]
|
||||
COPY ["etc/rsyslog.d/*", "/etc/rsyslog.d/"]
|
||||
COPY ["root/.vimrc", "/root/.vimrc"]
|
||||
|
||||
# Install dependencies of supervisor
|
||||
RUN apt-get -y install python-pkg-resources python-meld3
|
||||
|
||||
RUN mkdir -p /etc/supervisor
|
||||
RUN mkdir -p /var/log/supervisor
|
||||
|
||||
COPY ["etc/supervisor/supervisord.conf", "/etc/supervisor/"]
|
||||
|
||||
RUN apt-get -y purge \
|
||||
exim4 \
|
||||
exim4-base \
|
||||
exim4-config \
|
||||
exim4-daemon-light
|
||||
|
||||
{% if docker_base_stretch_debs.strip() -%}
|
||||
# Copy built Debian packages
|
||||
{%- for deb in docker_base_stretch_debs.split(' ') %}
|
||||
COPY debs/{{ deb }} debs/
|
||||
{%- endfor %}
|
||||
|
||||
# Install built Debian packages and implicitly install their dependencies
|
||||
{%- for deb in docker_base_stretch_debs.split(' ') %}
|
||||
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt debs/{{ deb }}
|
||||
{%- endfor %}
|
||||
{%- endif %}
|
||||
|
||||
{% if docker_base_stretch_dbgs.strip() -%}
|
||||
# Install common debug-packages
|
||||
{%- for dbg_pkg in docker_base_stretch_dbgs.split(' ') %}
|
||||
RUN apt-get -y install {{ dbg_pkg }}
|
||||
{%- endfor %}
|
||||
{% else %}
|
||||
RUN ln /usr/bin/vim.tiny /usr/bin/vim
|
||||
{%- endif %}
|
||||
|
||||
# Clean up apt
|
||||
# Remove /var/lib/apt/lists/*, could be obsoleted for derived images
|
||||
RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y
|
||||
RUN rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN rm -rf /tmp/*
|
13
dockers/docker-base-stretch/LICENSE
Normal file
13
dockers/docker-base-stretch/LICENSE
Normal file
@ -0,0 +1,13 @@
|
||||
Copyright 2016 Microsoft, Inc.
|
||||
|
||||
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.
|
22
dockers/docker-base-stretch/dpkg_01_drop
Normal file
22
dockers/docker-base-stretch/dpkg_01_drop
Normal file
@ -0,0 +1,22 @@
|
||||
## Drop unnecessary files
|
||||
## ref: https://wiki.ubuntu.com/ReducingDiskFootprint
|
||||
|
||||
## Documentation
|
||||
path-exclude /usr/share/doc/*
|
||||
# we need to keep copyright files for legal reasons
|
||||
path-include /usr/share/doc/*/copyright
|
||||
path-exclude /usr/share/man/*
|
||||
path-exclude /usr/share/groff/*
|
||||
path-exclude /usr/share/info/*
|
||||
# lintian stuff is small, but really unnecessary
|
||||
path-exclude /usr/share/lintian/*
|
||||
path-exclude /usr/share/linda/*
|
||||
|
||||
## Translations
|
||||
path-exclude /usr/share/locale/*
|
||||
|
||||
## Landscape
|
||||
path-exclude /usr/share/pyshared/twisted/test*
|
||||
path-exclude /usr/lib/python*/dist-packages/twisted/test*
|
||||
path-exclude /usr/share/pyshared/twisted/*/test*
|
||||
path-exclude /usr/lib/python*/dist-packages/twisted/*/test*
|
69
dockers/docker-base-stretch/etc/rsyslog.conf
Normal file
69
dockers/docker-base-stretch/etc/rsyslog.conf
Normal file
@ -0,0 +1,69 @@
|
||||
#
|
||||
# /etc/rsyslog.conf Configuration file for rsyslog.
|
||||
#
|
||||
# For more information see
|
||||
# /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html
|
||||
|
||||
|
||||
#################
|
||||
#### MODULES ####
|
||||
#################
|
||||
|
||||
$ModLoad imuxsock # provides support for local system logging
|
||||
#$ModLoad imklog # provides kernel logging support
|
||||
#$ModLoad immark # provides --MARK-- message capability
|
||||
|
||||
# provides UDP syslog reception
|
||||
#$ModLoad imudp
|
||||
#$UDPServerRun 514
|
||||
|
||||
# provides TCP syslog reception
|
||||
#$ModLoad imtcp
|
||||
#$InputTCPServerRun 514
|
||||
|
||||
|
||||
###########################
|
||||
#### GLOBAL DIRECTIVES ####
|
||||
###########################
|
||||
|
||||
# Set remote syslog server
|
||||
template (name="ForwardFormatInContainer" type="string" string="<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg%")
|
||||
*.* action(type="omfwd" target="127.0.0.1" port="514" protocol="udp" Template="ForwardFormatInContainer")
|
||||
|
||||
#
|
||||
# Use traditional timestamp format.
|
||||
# To enable high precision timestamps, comment out the following line.
|
||||
#
|
||||
#$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
|
||||
|
||||
# Define a custom template
|
||||
$template SONiCFileFormat,"%TIMESTAMP%.%timestamp:::date-subseconds% %HOSTNAME% %syslogseverity-text:::uppercase% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
|
||||
$ActionFileDefaultTemplate SONiCFileFormat
|
||||
|
||||
#
|
||||
# Set the default permissions for all log files.
|
||||
#
|
||||
$FileOwner root
|
||||
$FileGroup adm
|
||||
$FileCreateMode 0640
|
||||
$DirCreateMode 0755
|
||||
$Umask 0022
|
||||
|
||||
#
|
||||
# Where to place spool and state files
|
||||
#
|
||||
$WorkDirectory /var/spool/rsyslog
|
||||
|
||||
#
|
||||
# Include all config files in /etc/rsyslog.d/
|
||||
#
|
||||
$IncludeConfig /etc/rsyslog.d/*.conf
|
||||
|
||||
#
|
||||
# Suppress duplicate messages and report "message repeated n times"
|
||||
#
|
||||
$RepeatedMsgReduction on
|
||||
|
||||
###############
|
||||
#### RULES ####
|
||||
###############
|
@ -0,0 +1,9 @@
|
||||
$ModLoad imfile
|
||||
|
||||
$InputFileName /var/log/supervisor/supervisord.log
|
||||
$InputFileTag supervisord
|
||||
$InputFileStateFile state-supervisor
|
||||
$InputFileSeverity info
|
||||
$InputFileFacility local0
|
||||
$InputFilePersistStateInterval 1
|
||||
$InputRunFileMonitor
|
33
dockers/docker-base-stretch/etc/supervisor/supervisord.conf
Normal file
33
dockers/docker-base-stretch/etc/supervisor/supervisord.conf
Normal file
@ -0,0 +1,33 @@
|
||||
; supervisor config file
|
||||
|
||||
[unix_http_server]
|
||||
file=/var/run/supervisor.sock ; (the path to the socket file)
|
||||
chmod=0700 ; sockef file mode (default 0700)
|
||||
username=dummy
|
||||
password=dummy
|
||||
|
||||
[supervisord]
|
||||
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
|
||||
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
|
||||
childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP)
|
||||
user=root
|
||||
|
||||
; the below section must remain in the config file for RPC
|
||||
; (supervisorctl/web interface) to work, additional interfaces may be
|
||||
; added by defining them in separate rpcinterface: sections
|
||||
[rpcinterface:supervisor]
|
||||
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
|
||||
|
||||
[supervisorctl]
|
||||
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
|
||||
username=dummy
|
||||
password=dummy
|
||||
|
||||
; The [include] section can just contain the "files" setting. This
|
||||
; setting can list multiple files (separated by whitespace or
|
||||
; newlines). It can also contain wildcards. The filenames are
|
||||
; interpreted as relative to this file. Included files *cannot*
|
||||
; include files themselves.
|
||||
|
||||
[include]
|
||||
files = /etc/supervisor/conf.d/*.conf
|
5
dockers/docker-base-stretch/no_install_recommend_suggest
Normal file
5
dockers/docker-base-stretch/no_install_recommend_suggest
Normal file
@ -0,0 +1,5 @@
|
||||
# Instruct apt-get to NOT install "recommended" or "suggested" packages by
|
||||
# default when installing a package.
|
||||
|
||||
APT::Install-Recommends "false";
|
||||
APT::Install-Suggests "false";
|
2
dockers/docker-base-stretch/root/.vimrc
Normal file
2
dockers/docker-base-stretch/root/.vimrc
Normal file
@ -0,0 +1,2 @@
|
||||
" enable vim features
|
||||
set nocompatible
|
8
dockers/docker-base-stretch/sources.list
Normal file
8
dockers/docker-base-stretch/sources.list
Normal file
@ -0,0 +1,8 @@
|
||||
## Debian mirror on Microsoft Azure
|
||||
## Ref: http://debian-archive.trafficmanager.net/
|
||||
|
||||
deb http://debian-archive.trafficmanager.net/debian/ stretch main contrib non-free
|
||||
deb-src http://debian-archive.trafficmanager.net/debian/ stretch main contrib non-free
|
||||
deb http://debian-archive.trafficmanager.net/debian-security/ stretch/updates main contrib non-free
|
||||
deb-src http://debian-archive.trafficmanager.net/debian-security/ stretch/updates main contrib non-free
|
||||
deb http://debian-archive.trafficmanager.net/debian/ stretch-backports main contrib non-free
|
47
dockers/docker-config-engine-stretch/Dockerfile.j2
Normal file
47
dockers/docker-config-engine-stretch/Dockerfile.j2
Normal file
@ -0,0 +1,47 @@
|
||||
FROM docker-base-stretch
|
||||
|
||||
## Make apt-get non-interactive
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt-get update
|
||||
|
||||
# Dependencies for sonic-cfggen
|
||||
RUN apt-get install -y python-lxml python-yaml python-bitarray python-pip python-dev python-natsort python-setuptools
|
||||
|
||||
RUN pip install --upgrade pip
|
||||
|
||||
RUN pip install netaddr ipaddr jinja2 pyangbind==0.5.10
|
||||
|
||||
{% if docker_config_engine_stretch_debs.strip() %}
|
||||
COPY \
|
||||
{% for deb in docker_config_engine_stretch_debs.split(' ') -%}
|
||||
debs/{{ deb }}{{' '}}
|
||||
{%- endfor -%}
|
||||
debs/
|
||||
{%- endif -%}
|
||||
|
||||
{% if docker_config_engine_stretch_debs.strip() %}
|
||||
RUN dpkg -i \
|
||||
{% for deb in docker_config_engine_stretch_debs.split(' ') -%}
|
||||
debs/{{ deb }}{{' '}}
|
||||
{%- endfor %}
|
||||
{%- endif -%}
|
||||
|
||||
{% if docker_config_engine_stretch_whls.strip() %}
|
||||
COPY \
|
||||
{% for whl in docker_config_engine_stretch_whls.split(' ') -%}
|
||||
python-wheels/{{ whl }}{{' '}}
|
||||
{%- endfor -%}
|
||||
python-wheels/
|
||||
{%- endif -%}
|
||||
|
||||
{% if docker_config_engine_stretch_whls.strip() %}
|
||||
RUN pip install \
|
||||
{% for whl in docker_config_engine_stretch_whls.split(' ') -%}
|
||||
python-wheels/{{ whl }}{{' '}}
|
||||
{%- endfor %}
|
||||
{%- endif -%}
|
||||
|
||||
## Clean up
|
||||
RUN apt-get remove -y python-pip python-dev; apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y
|
||||
RUN rm -rf /debs /python-wheels
|
18
rules/docker-base-stretch.mk
Normal file
18
rules/docker-base-stretch.mk
Normal file
@ -0,0 +1,18 @@
|
||||
# Docker base image (based on Debian Stretch)
|
||||
|
||||
DOCKER_BASE_STRETCH = docker-base-stretch.gz
|
||||
$(DOCKER_BASE_STRETCH)_PATH = $(DOCKERS_PATH)/docker-base-stretch
|
||||
$(DOCKER_BASE_STRETCH)_DEPENDS += $(SUPERVISOR)
|
||||
$(DOCKER_BASE_STRETCH)_DEPENDS += $(SOCAT)
|
||||
|
||||
ifeq ($(INSTALL_DEBUG_TOOLS),y)
|
||||
GDB = gdb
|
||||
GDBSERVER = gdbserver
|
||||
VIM = vim
|
||||
OPENSSH = openssh-client
|
||||
SSHPASS = sshpass
|
||||
STRACE = strace
|
||||
$(DOCKER_BASE_STRETCH)_DBG_PACKAGES += $(GDB) $(GDBSERVER) $(VIM) $(OPENSSH) $(SSHPASS) $(STRACE)
|
||||
endif
|
||||
|
||||
SONIC_DOCKER_IMAGES += $(DOCKER_BASE_STRETCH)
|
8
rules/docker-config-engine-stretch.mk
Normal file
8
rules/docker-config-engine-stretch.mk
Normal file
@ -0,0 +1,8 @@
|
||||
# docker image for sonic config engine
|
||||
|
||||
DOCKER_CONFIG_ENGINE_STRETCH = docker-config-engine-stretch.gz
|
||||
$(DOCKER_CONFIG_ENGINE_STRETCH)_PATH = $(DOCKERS_PATH)/docker-config-engine-stretch
|
||||
$(DOCKER_CONFIG_ENGINE_STRETCH)_PYTHON_WHEELS += $(SWSSSDK_PY2)
|
||||
$(DOCKER_CONFIG_ENGINE_STRETCH)_PYTHON_WHEELS += $(SONIC_CONFIG_ENGINE)
|
||||
$(DOCKER_CONFIG_ENGINE_STRETCH)_LOAD_DOCKERS += $(DOCKER_BASE_STRETCH)
|
||||
SONIC_DOCKER_IMAGES += $(DOCKER_CONFIG_ENGINE_STRETCH)
|
Loading…
Reference in New Issue
Block a user