From e745949b270bb633d9d02ca328363a1929478ea0 Mon Sep 17 00:00:00 2001 From: Jingyi Mei Date: Fri, 19 Oct 2018 22:43:07 +0800 Subject: [PATCH 1/2] Update dockerfile to use ubuntu 16.04 This commit adds a new dockerfile to bake postgres 10.5 on ubuntu 16.04. Also updates docker_start.sh and README to pull the new docker image instead of the old one (Postgres9.6 on Ubuntu 8.9). --- README.md | 8 +- .../base/Dockerfile_ubuntu16_postgres10 | 108 ++++++++++++++++++ tool/docker_start.sh | 10 +- 3 files changed, 117 insertions(+), 9 deletions(-) create mode 100644 tool/docker/base/Dockerfile_ubuntu16_postgres10 diff --git a/README.md b/README.md index 4e218d509..d202722e0 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ also on the wiki. Development with Docker ======================= -We provide a Docker image with necessary dependencies required to compile and test MADlib on PostgreSQL 9.6. You can view the dependency Docker file at ./tool/docker/base/Dockerfile_postgres_9_6. The image is hosted on Docker Hub at madlib/postgres_9.6:latest. Later we will provide a similar Docker image for Greenplum Database. +We provide a Docker image with necessary dependencies required to compile and test MADlib on PostgreSQL 10.5. You can view the dependency Docker file at ./tool/docker/base/Dockerfile_ubuntu16_postgres10. The image is hosted on Docker Hub at madlib/postgres_10:latest. Later we will provide a similar Docker image for Greenplum Database. We provide a script to quickly run this docker image at ./tool/docker_start.sh, which will mount your local madlib directory, build MADlib and run install check on this Docker image. At the end, it will `docker exec` as postgres user. Note that you have to run this script from inside your madlib directory, and you can specify your docker CONTAINER_NAME (default is madlib) and IMAGE_TAG (default is latest). Here is an example: @@ -43,13 +43,13 @@ docker rm CONTAINER_NAME You can also manually run those commands to do the same thing: ``` -## 1) Pull down the `madlib/postgres_9.6:latest` image from docker hub: -docker pull madlib/postgres_9.6:latest +## 1) Pull down the `madlib/postgres_10:latest` image from docker hub: +docker pull madlib/postgres_10:latest ## 2) Launch a container corresponding to the MADlib image, name it ## madlib, mounting the source code folder to the container: docker run -d -it --name madlib \ - -v (path to madlib directory):/madlib/ madlib/postgres_9.6 + -v (path to madlib directory):/madlib/ madlib/postgres_10 # where madlib is the directory where the MADlib source code resides. ################################# * WARNING * ################################# diff --git a/tool/docker/base/Dockerfile_ubuntu16_postgres10 b/tool/docker/base/Dockerfile_ubuntu16_postgres10 new file mode 100644 index 000000000..ebf69b1dd --- /dev/null +++ b/tool/docker/base/Dockerfile_ubuntu16_postgres10 @@ -0,0 +1,108 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. + +FROM ubuntu:16.04 + +### Get necessary libraries to add postgresql apt repository +RUN apt-get update && apt-get install -y lsb-core software-properties-common wget + +### Add postgresql apt repository +RUN add-apt-repository "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -sc)-pgdg main" && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - + +### Have to update after getting new repository +RUN apt-get update + +### Get postgres10 and postgres specific add-ons +RUN apt-get install -y postgresql-10 \ + postgresql-client-10 \ + postgresql-plpython-10 \ + postgresql-server-dev-10 \ + libpq-dev \ + build-essential \ + openssl \ + libssl-dev \ + libboost-all-dev \ + m4 \ + vim \ + pgxnclient \ + flex \ + bison \ + graphviz + +### Reset pg_hba.conf file to allow no password prompt +### Docker file doesn't support heardoc, like cat > /etc/postgresql/10/main/pg_hba.conf<<-EOF, +### and this echo and \n\ are workaround to write the file +RUN echo " \n\ + # Database administrative login by Unix domain socket \n\ + local all all trust \n\ + + # TYPE DATABASE USER ADDRESS METHOD \n\ + + # "local" is for Unix domain socket connections only \n\ + local all all trust \n\ + # IPv4 local connections: \n\ + host all all 127.0.0.1/32 trust \n\ + # IPv6 local connections: \n\ + host all all ::1/128 trust \n\ +" > /etc/postgresql/10/main/pg_hba.conf + +### We need to set nproc to unlimited to be able to run scripts as +### the user 'postgres'. This is actually useful when we try to setup +### and start a Postgres server. +RUN echo " * soft nproc unlimited " > /etc/security/limits.d/postgres-limits.conf + + +### Always start postgres server when login +RUN echo "service postgresql start" >> ~/.bashrc + +### Build custom CMake with SSQL support +RUN wget https://cmake.org/files/v3.6/cmake-3.6.1.tar.gz && \ + tar -zxvf cmake-3.6.1.tar.gz && \ + cd cmake-3.6.1 && \ + sed -i 's/-DCMAKE_BOOTSTRAP=1/-DCMAKE_BOOTSTRAP=1 -DCMAKE_USE_OPENSSL=ON/g' bootstrap && \ + ./configure && \ + make -j2 && \ + make install && \ + cd .. + +### Install doxygen-1.8.13: +RUN wget http://ftp.stack.nl/pub/users/dimitri/doxygen-1.8.13.src.tar.gz && \ + tar xf doxygen-1.8.13.src.tar.gz && \ + cd doxygen-1.8.13 && \ + mkdir build && \ + cd build && \ + cmake -G "Unix Makefiles" .. && \ + make && \ + make install + +### Optional: install LaTex +### uncomment the following 'RUN apt-get' line to bake LaTex into the image +### Note: if you run the following line, please tag the image as +### madlib/postgres_10:LaTex, and don't tag it as latest +# RUN apt-get install -y texlive-full + +## To build an image from this docker file without LaTex, from madlib folder, run: +## docker build -t madlib/postgres_10:latest -f tool/docker/base/Dockerfile_ubuntu16_postgres10 . +## To push it to docker hub, run: +## docker push madlib/postgres_10:latest + +## To build an image from this docker file with LaTex, from madlib folder, uncomment +## line 88, and run: +## docker build -t madlib/postgres_10:LaTex -f tool/docker/base/Dockerfile_ubuntu16_postgres10 . +## To push it to docker hub, run: +## docker push madlib/postgres_10:LaTex \ No newline at end of file diff --git a/tool/docker_start.sh b/tool/docker_start.sh index bc260c060..45762e1a2 100755 --- a/tool/docker_start.sh +++ b/tool/docker_start.sh @@ -18,7 +18,7 @@ ############################################################################### # This is a script that does the following: -# * Pull madlib/postgres_9.6:$IMAGE_TAG(default tag is `latest`) from docker; +# * Pull madlib/postgres_10:$IMAGE_TAG(default tag is `latest`) from docker; # * Mount your local madlib directory to docker container; # * Name your docker container as $CONTAINER_NAME (default name is madlib) # * Build madlib from source; build dir is /madlib/build_docker which @@ -60,11 +60,11 @@ docker rm "${CONTAINER_NAME}" # Pull down the base docker images echo "Creating docker container" -docker pull madlib/postgres_9.6:"${IMAGE_TAG}" +docker pull madlib/postgres_10:"${IMAGE_TAG}" # Launch docker container with volume mounted from workdir -docker run -d --name "${CONTAINER_NAME}" -v "${workdir}":/madlib \ - madlib/postgres_9.6:"${IMAGE_TAG}" | tee build_docker_logs/docker_setup.log +docker run -d -it --name "${CONTAINER_NAME}" -v "${workdir}":/madlib \ + madlib/postgres_10:"${IMAGE_TAG}" | tee build_docker_logs/docker_setup.log ## This sleep is required since it takes a couple of seconds for the docker ## container to come up, which is required by the docker exec command that @@ -78,7 +78,7 @@ echo "---------- Building MADlib -----------" docker exec "${CONTAINER_NAME}" bash -c "rm -rf /madlib/build_docker; \ mkdir /madlib/build_docker; \ cd /madlib/build_docker; \ - cmake ..; make; make doc; make install" \ + cmake ..; make" \ | tee "${workdir}/build_docker_logs/madlib_compile.log" echo "---------- Installing and running install-check --------------------" From c56797f92e79c4067031c3649dbc8ecbc03fce4b Mon Sep 17 00:00:00 2001 From: Jingyi Mei Date: Fri, 26 Oct 2018 11:09:34 +0800 Subject: [PATCH 2/2] Add new line at the end of file --- tool/docker/base/Dockerfile_ubuntu16_postgres10 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tool/docker/base/Dockerfile_ubuntu16_postgres10 b/tool/docker/base/Dockerfile_ubuntu16_postgres10 index ebf69b1dd..cf7b4f28e 100644 --- a/tool/docker/base/Dockerfile_ubuntu16_postgres10 +++ b/tool/docker/base/Dockerfile_ubuntu16_postgres10 @@ -105,4 +105,4 @@ RUN wget http://ftp.stack.nl/pub/users/dimitri/doxygen-1.8.13.src.tar.gz && \ ## line 88, and run: ## docker build -t madlib/postgres_10:LaTex -f tool/docker/base/Dockerfile_ubuntu16_postgres10 . ## To push it to docker hub, run: -## docker push madlib/postgres_10:LaTex \ No newline at end of file +## docker push madlib/postgres_10:LaTex