Skip to content

Commit

Permalink
Merge pull request FederatedAI#902 from FederatedAI/develop-1.2-docke…
Browse files Browse the repository at this point in the history
…r-build

Docker build update for FATE v1.2.0 (FederatedAI#901)
  • Loading branch information
dylan-fan authored Dec 30, 2019
2 parents 64eccd4 + bd0fb38 commit b5ee91e
Show file tree
Hide file tree
Showing 12 changed files with 327 additions and 191 deletions.
4 changes: 2 additions & 2 deletions docker-build/.env
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
PREFIX=federatedai
TAG=1.1.1-release
BASE_TAG=1.1.1-release
TAG=1.2.0-release
BASE_TAG=1.2.0-release
20 changes: 10 additions & 10 deletions docker-build/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ and component images have the below naming format:
A sample of `.env` is as follows:
```bash
PREFIX=federatedai
BASE_TAG=1.1-release
TAG=1.1-release
BASE_TAG=1.2.0-release
TAG=1.2.0-release
```
**NOTE:**
If the FATE images will be pushed to a registry server, the above configuration assumes the use of Docker Hub. If a local registry (e.g. Harbor) is used for storing images, change the `PREFIX` as follows:
Expand All @@ -56,14 +56,14 @@ $ bash build_cluster_docker.sh all
The command creates the base images and then the component images. After the command finishes, all images of FATE should be created. Use `docker images` to check the newly generated images:
```
REPOSITORY TAG
federatedai/egg 1.1-release
federatedai/fateboard 1.1-release
federatedai/meta-service 1.1-release
federatedai/python 1.1-release
federatedai/roll 1.1-release
federatedai/proxy 1.1-release
federatedai/federation 1.1-release
federatedai/base-image 1.1-release
federatedai/egg 1.2.0-release
federatedai/fateboard 1.2.0-release
federatedai/meta-service 1.2.0-release
federatedai/python 1.2.0-release
federatedai/roll 1.2.0-release
federatedai/proxy 1.2.0-release
federatedai/federation 1.2.0-release
federatedai/base-image 1.2.0-release
```

##### Pushing images to a registry (optional)
Expand Down
20 changes: 10 additions & 10 deletions docker-build/README_zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ FATE(Federated AI Technology Enable)是一个工业级的分布式联邦学
用户在开始构建镜像之前需要配置“.env”,通过该文件,镜像在构建完毕后会被打上相应的标签以后续使用,例子如下:
```
PREFIX=federatedai
BASE_TAG=1.1-release
TAG=1.1-release
BASE_TAG=1.2.0-release
TAG=1.2.0-release
# PREFIX: 用于要推送的镜像仓库(Registry)以及其命名空间
# BASE_TAG: 基础镜像的标签
Expand All @@ -47,14 +47,14 @@ FATE(Federated AI Technology Enable)是一个工业级的分布式联邦学
一个输出的例子如下:
```
REPOSITORY TAG
federatedai/egg 1.1-release
federatedai/fateboard 1.1-release
federatedai/meta-service 1.1-release
federatedai/python 1.1-release
federatedai/roll 1.1-release
federatedai/proxy 1.1-release
federatedai/federation 1.1-release
federatedai/base-image 1.1-release
federatedai/egg 1.2.0-release
federatedai/fateboard 1.2.0-release
federatedai/meta-service 1.2.0-release
federatedai/python 1.2.0-release
federatedai/roll 1.2.0-release
federatedai/proxy 1.2.0-release
federatedai/federation 1.2.0-release
federatedai/base-image 1.2.0-release
```

## 把镜像推送到镜像仓库(可选)
Expand Down
248 changes: 162 additions & 86 deletions docker-build/build_cluster_docker.sh

Large diffs are not rendered by default.

52 changes: 37 additions & 15 deletions docker-build/docker/base/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,19 +1,41 @@
FROM centos:centos7.2.1511

COPY pip-packages-fate-1.1.tar.gz /data/projects/python/
ARG python_version

ENV venv_dir /data/projects/python/venv
ENV miniconda3_dir /data/projects/python/miniconda3

COPY requirements.txt /data/projects/python/

RUN yum -y install gcc gcc-c++ make openssl-devel supervisor gmp-devel mpfr-devel libmpc-devel libaio numactl autoconf automake libtool libffi-devel snappy snappy-devel zlib zlib-devel bzip2 bzip2-devel lz4-devel libasan lsof &&\
cd /data/projects/python/ && \
curl https://repo.continuum.io/miniconda/Miniconda3-4.5.4-Linux-x86_64.sh > /data/projects/python/Miniconda3-4.5.4-Linux-x86_64.sh && \
miniconda3_dir=/data/projects/python/miniconda3 &&\
venv_dir=/data/projects/python/venv && \
python_version=1.1 && \
sh ./Miniconda3-*-Linux-x86_64.sh -b -p ${miniconda3_dir} &&\
tar -xvf pip-packages-fate-1.1.tar.gz && \
rm pip-packages-fate-1.1.tar.gz && \
${miniconda3_dir}/bin/pip install virtualenv -f ./pip-packages-fate-${python_version} --no-index &&\
${miniconda3_dir}/bin/virtualenv -p ${miniconda3_dir}/bin/python3.6 --no-wheel --no-setuptools --no-download ${venv_dir} &&\
source ${venv_dir}/bin/activate &&\
pip install ./pip-packages-fate-${python_version}/setuptools-41.4.0-py2.py3-none-any.whl &&\
pip install -r ./requirements.txt -f ./pip-packages-fate-${python_version} --no-index
RUN set -eux; \
rpm --rebuilddb; \
rpm --import /etc/pki/rpm-gpg/RPM*; \
\
yum -y install gcc gcc-c++ make openssl-devel supervisor \
gmp-devel mpfr-devel libmpc-devel libaio numactl autoconf \
automake libtool libffi-devel snappy snappy-devel zlib zlib-devel \
bzip2 bzip2-devel lz4-devel libasan lsof \
;\
yum clean all;

RUN set -eux; \
cd /data/projects/python/ ; \
curl https://repo.continuum.io/miniconda/Miniconda3-4.5.4-Linux-x86_64.sh > /data/projects/python/Miniconda3-4.5.4-Linux-x86_64.sh ; \
\
sh ./Miniconda3-*-Linux-x86_64.sh -b -p ${miniconda3_dir} ; \
rm -f ./Miniconda3-*-Linux-x86_64.sh;

RUN set -eux; \
cd /data/projects/python/ ; \
curl https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/pip-packages-fate-${python_version}.tar.gz > ./pip-packages-fate-${python_version}.tar.gz; \
tar -xvf pip-packages-fate-${python_version}.tar.gz; \
rm pip-packages-fate-${python_version}.tar.gz ; \
\
${miniconda3_dir}/bin/pip install virtualenv -f ./pip-packages-fate-${python_version} --no-index ;\
${miniconda3_dir}/bin/virtualenv -p ${miniconda3_dir}/bin/python3.6 --no-wheel --no-setuptools --no-download ${venv_dir} ;\
\
source ${venv_dir}/bin/activate ;\
pip install ./pip-packages-fate-${python_version}/setuptools-41.4.0-py2.py3-none-any.whl ;\
pip install -r ./requirements.txt -f ./pip-packages-fate-${python_version} ; \
rm -rf ./pip-packages-fate-${python_version}; \
python -V;
69 changes: 45 additions & 24 deletions docker-build/docker/modules/egg/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,54 @@ ARG PREFIX=prefix
ARG BASE_TAG=tag
FROM ${PREFIX}/base-image:${BASE_TAG}

COPY eggroll-computing-1.1.tar.gz /data/projects/fate/eggroll/
COPY eggroll-api-1.1.tar.gz /data/projects/fate/eggroll/
COPY eggroll-egg-1.1.tar.gz /data/projects/fate/eggroll/
COPY eggroll-storage-service-cxx-1.1.tar.gz /data/projects/fate/eggroll/
COPY third_party_eggrollv1.tar.gz /data/projects/fate/eggroll/
COPY federatedml /data/projects/fate/eggroll/python/federatedml
COPY arch /data/projects/fate/eggroll/python/arch
COPY fate_flow /data/projects/fate/eggroll/python/fate_flow

RUN rpm --rebuilddb && yum install -y which java-1.8.0-openjdk java-1.8.0-openjdk-devel && \
cd /data/projects/fate/eggroll/ && \
mkdir -p egg python/eggroll/api python/eggroll/computing storage-service-cxx && \
tar -C ./egg -xvf eggroll-egg-1.1.tar.gz && rm eggroll-egg-1.1.tar.gz && \
tar -C ./python/eggroll/computing -xvf eggroll-computing-1.1.tar.gz && rm eggroll-computing-1.1.tar.gz && \
tar -C ./python/eggroll/api -xvf eggroll-api-1.1.tar.gz && rm eggroll-api-1.1.tar.gz && \
tar -C ./storage-service-cxx -xvf eggroll-storage-service-cxx-1.1.tar.gz && rm eggroll-storage-service-cxx-1.1.tar.gz && \
tar -C ./storage-service-cxx -xvf third_party_eggrollv1.tar.gz && rm third_party_eggrollv1.tar.gz && \
cd storage-service-cxx && \
sed -i "20s#-I. -I.*#-I. -I/data/projects/fate/eggroll/storage-service-cxx/third_party/include#g" ./Makefile && \
sed -i "34s#LDFLAGS += -L.*#LDFLAGS += -L/data/projects/fate/eggroll/storage-service-cxx/third_party/lib -llmdb -lboost_system -lboost_filesystem -lglog -lgpr#g" ./Makefile && \
sed -i "36s#PROTOC =.*#PROTOC = /data/projects/fate/eggroll/storage-service-cxx/third_party/bin/protoc#g" ./Makefile && \
sed -i "37s#GRPC_CPP_PLUGIN =.*#GRPC_CPP_PLUGIN = /data/projects/fate/eggroll/storage-service-cxx/third_party/bin/grpc_cpp_plugin#g" ./Makefile && \
make
RUN set -eux; \
rpm --rebuilddb; \
rpm --import /etc/pki/rpm-gpg/RPM*; \
yum install -y which java-1.8.0-openjdk java-1.8.0-openjdk-devel ; \
yum clean all;

WORKDIR /data/projects/fate/eggroll/

ARG version


COPY eggroll-computing-${version}.tar.gz ./
COPY eggroll-api-${version}.tar.gz ./
COPY eggroll-conf-${version}.tar.gz ./
COPY eggroll-egg-${version}.tar.gz ./
COPY eggroll-storage-service-cxx-${version}.tar.gz ./
COPY third_party_eggrollv1.tar.gz ./
COPY federatedml ./python/federatedml
COPY arch/api ./python/arch/api
COPY arch/conf ./python/arch/conf
COPY arch/core ./python/arch/core
COPY arch/proto ./python/arch/proto
COPY fate_flow ./python/fate_flow
COPY conf ./egg/conf

RUN set -eux; \
\
cd /data/projects/fate/eggroll/; \
mkdir -p egg python/eggroll/api python/eggroll/computing storage-service-cxx ; \
tar -C ./egg -xvf eggroll-egg-${version}.tar.gz && rm eggroll-egg-${version}.tar.gz ; \
tar -C ./python/eggroll/computing -xvf eggroll-computing-${version}.tar.gz && rm eggroll-computing-${version}.tar.gz ; \
tar -C ./python/eggroll/api -xvf eggroll-api-${version}.tar.gz && rm eggroll-api-${version}.tar.gz ; \
tar -C ./python/eggroll/conf -xvf eggroll-conf-${version}.tar.gz && rm eggroll-conf-${version}.tar.gz ; \
tar -C ./storage-service-cxx -xvf eggroll-storage-service-cxx-${version}.tar.gz && rm eggroll-storage-service-cxx-${version}.tar.gz ; \
tar -C ./storage-service-cxx -xvf third_party_eggrollv1.tar.gz && rm third_party_eggrollv1.tar.gz ; \
cd storage-service-cxx ; \
sed -i "20s#-I. -I.*#-I. -I/data/projects/fate/eggroll/storage-service-cxx/third_party/include#g" ./Makefile ; \
sed -i "34s#LDFLAGS += -L.*#LDFLAGS += -L/data/projects/fate/eggroll/storage-service-cxx/third_party/lib -llmdb -lboost_system -lboost_filesystem -lglog -lgpr#g" ./Makefile ; \
sed -i "36s#PROTOC =.*#PROTOC = /data/projects/fate/eggroll/storage-service-cxx/third_party/bin/protoc#g" ./Makefile ; \
sed -i "37s#GRPC_CPP_PLUGIN =.*#GRPC_CPP_PLUGIN = /data/projects/fate/eggroll/storage-service-cxx/third_party/bin/grpc_cpp_plugin#g" ./Makefile ; \
make; \
cd /data/projects/fate/eggroll/egg && ln -s eggroll-egg-*.jar eggroll-egg.jar;

EXPOSE 7778 7888

CMD cd /data/projects/fate/eggroll/storage-service-cxx && \
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/data/projects/fate/eggroll/storage-service-cxx/third_party/lib && \
mkdir logs && \
./storage-service -p 7778 -d /data/projects/fate/data-dir >> logs/console.log 2>>logs/error.log & \
cd /data/projects/fate/eggroll/egg && \
java -cp "conf/:lib/*:eggroll-egg-1.1.jar" com.webank.ai.eggroll.framework.egg.Egg -c conf/egg.properties
java -cp "conf/:lib/*:eggroll-egg.jar" com.webank.ai.eggroll.framework.egg.Egg -c conf/egg.properties
12 changes: 8 additions & 4 deletions docker-build/docker/modules/fateboard/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
FROM mcr.microsoft.com/java/jre:8u192-zulu-alpine

RUN mkdir -p /data/projects/fate
COPY fateboard-1.1.jar /data/projects/fate/fateboard/fateboard-1.1.jar
WORKDIR /data/projects/fate/fateboard/

ARG fateboard_version

COPY fateboard-${fateboard_version}.jar ./
COPY conf ./conf
RUN ln -s fateboard-*.jar fateboard.jar
EXPOSE 8080

CMD cd /data/projects/fate/fateboard && \
java -Dspring.config.location=/data/projects/fate/fateboard/conf/application.properties -Dssh_config_file=/data/projects/fate/fateboard/conf -Xmx2048m -Xms2048m -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log -XX:+HeapDumpOnOutOfMemoryError -jar fateboard-1.1.jar
CMD java -Dspring.config.location=/data/projects/fate/fateboard/conf/application.properties -Dssh_config_file=/data/projects/fate/fateboard/conf -Xmx2048m -Xms2048m -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log -XX:+HeapDumpOnOutOfMemoryError -jar fateboard.jar
18 changes: 10 additions & 8 deletions docker-build/docker/modules/federation/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
FROM mcr.microsoft.com/java/jre:8u192-zulu-alpine

RUN mkdir -p /data/projects/fate
COPY fate-federation-1.1.tar.gz /data/projects/fate/federation/fate-federation-1.1.tar.gz
WORKDIR /data/projects/fate/federation/

RUN cd /data/projects/fate/federation/ && \
tar -xzf fate-federation-1.1.tar.gz && \
rm fate-federation-1.1.tar.gz && \
ln -s fate-federation-1.1.jar fate-federation.jar
ARG version

COPY fate-federation-${version}.tar.gz ./
COPY conf ./conf

RUN tar -xzf fate-federation-${version}.tar.gz && \
rm fate-federation-${version}.tar.gz && \
ln -s fate-federation-*.jar fate-federation.jar
EXPOSE 9394

CMD cd /data/projects/fate/federation && \
java -cp "conf/:lib/*:fate-federation.jar" com.webank.ai.fate.driver.Federation -c conf/federation.properties
CMD java -cp "conf/:lib/*:fate-federation.jar" com.webank.ai.fate.driver.Federation -c conf/federation.properties

15 changes: 10 additions & 5 deletions docker-build/docker/modules/meta-service/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
FROM mcr.microsoft.com/java/jre:8u192-zulu-alpine

WORKDIR /data/projects/fate/meta-service
COPY eggroll-meta-service-1.1.tar.gz /data/projects/fate/meta-service/eggroll-meta-service-1.1.tar.gz
WORKDIR /data/projects/fate/meta-service/

RUN tar -xzf eggroll-meta-service-1.1.tar.gz && \
rm eggroll-meta-service-1.1.tar.gz && \
ln -s eggroll-meta-service-1.1.jar fate-meta-service.jar
ARG version

COPY eggroll-meta-service-${version}.tar.gz ./
COPY conf ./conf

RUN tar -xzf eggroll-meta-service-${version}.tar.gz && \
rm eggroll-meta-service-${version}.tar.gz && \
ln -s eggroll-meta-service-*.jar fate-meta-service.jar
EXPOSE 8590

CMD java -cp "conf/:lib/*:fate-meta-service.jar" com.webank.ai.eggroll.framework.MetaService -c conf/meta-service.properties

17 changes: 9 additions & 8 deletions docker-build/docker/modules/proxy/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
FROM mcr.microsoft.com/java/jre:8u192-zulu-alpine

RUN mkdir -p /data/projects/fate
WORKDIR /data/projects/fate/proxy/

COPY fate-proxy-1.1.tar.gz /data/projects/fate/proxy/fate-proxy-1.1.tar.gz
ARG version

RUN cd /data/projects/fate/proxy/ && \
tar -xzf fate-proxy-1.1.tar.gz && \
rm fate-proxy-1.1.tar.gz && \
ln -s fate-proxy-1.1.jar fate-proxy.jar
COPY fate-proxy-${version}.tar.gz ./
COPY conf ./conf

RUN tar -xzf fate-proxy-${version}.tar.gz && \
rm fate-proxy-${version}.tar.gz && \
ln -s fate-proxy-*.jar fate-proxy.jar

EXPOSE 9370

CMD cd /data/projects/fate/proxy && \
java -cp "conf/:lib/*:fate-proxy.jar" com.webank.ai.fate.networking.Proxy -c conf/proxy.properties
CMD java -cp "conf/:lib/*:fate-proxy.jar" com.webank.ai.fate.networking.Proxy -c conf/proxy.properties
26 changes: 15 additions & 11 deletions docker-build/docker/modules/python/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,23 @@ ARG PREFIX=prefix
ARG BASE_TAG=tag
FROM ${PREFIX}/base-image:${BASE_TAG}

RUN mkdir -p /data/projects/fate
COPY fate_flow /data/projects/fate/python/fate_flow
COPY arch /data/projects/fate/python/arch
COPY federatedml /data/projects/fate/python/federatedml
COPY eggroll-api-1.1.tar.gz /data/projects/fate/python
COPY examples /data/projects/fate/python/examples
WORKDIR /data/projects/fate/python

RUN cd /data/projects/fate/python && \
mkdir -p eggroll/api && tar -C eggroll/api -xvf eggroll-api-1.1.tar.gz && \
rm eggroll-api-1.1.tar.gz
ARG version

WORKDIR /data/projects/fate/python
COPY fate_flow ./fate_flow
COPY arch/api ./arch/api
COPY arch/conf ./arch/conf
COPY arch/core ./arch/core
COPY arch/proto ./arch/proto
COPY federatedml ./federatedml
COPY examples/ ./examples
COPY eggroll-api-${version}.tar.gz ./

RUN mkdir -p eggroll/api && tar -C eggroll/api -xvf eggroll-api-${version}.tar.gz && \
rm eggroll-api-${version}.tar.gz && \
echo "source /data/projects/python/venv/bin/activate" >> ~/.bashrc

ENV PYTHONPATH=/data/projects/fate/python
CMD sleep 5; source /data/projects/python/venv/bin/activate && cd /data/projects/fate/python/fate_flow && \
CMD sleep 5; source /data/projects/python/venv/bin/activate && cd ./fate_flow && \
python fate_flow_server.py
17 changes: 9 additions & 8 deletions docker-build/docker/modules/roll/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
FROM mcr.microsoft.com/java/jre:8u192-zulu-alpine

COPY eggroll-roll-1.1.tar.gz /data/projects/fate/roll/eggroll-roll-1.1.tar.gz
WORKDIR /data/projects/fate/roll/

RUN cd /data/projects/fate/roll/ && \
tar -xzf eggroll-roll-1.1.tar.gz && \
rm eggroll-roll-1.1.tar.gz && \
ln -s eggroll-roll-1.1.jar fate-roll.jar
ARG version

WORKDIR /data/projects/fate
COPY eggroll-roll-${version}.tar.gz ./
COPY conf ./conf

CMD cd roll && \
java -cp "conf/:lib/*:fate-roll.jar" com.webank.ai.eggroll.framework.Roll -c conf/roll.properties
RUN tar -xzf eggroll-roll-${version}.tar.gz && \
rm eggroll-roll-${version}.tar.gz && \
ln -s eggroll-roll-*.jar fate-roll.jar

CMD java -cp "conf/:lib/*:fate-roll.jar" com.webank.ai.eggroll.framework.Roll -c conf/roll.properties

0 comments on commit b5ee91e

Please sign in to comment.