Add Dockerfile for CentOS 7.2
This commit is contained in:
		
							parent
							
								
									b610e5b8b8
								
							
						
					
					
						commit
						ebc158fe6c
					
				
							
								
								
									
										104
									
								
								tools/docker/Dockerfile.centos7.2
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										104
									
								
								tools/docker/Dockerfile.centos7.2
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,104 @@ | |||||||
|  | FROM centos:7.2.1511 | ||||||
|  | 
 | ||||||
|  | LABEL maintainer="He Sun <bochang.sh@antfin.com>" | ||||||
|  | 
 | ||||||
|  | RUN yum update -y && \ | ||||||
|  |     yum install -y \ | ||||||
|  |         autoconf \ | ||||||
|  |         automake \ | ||||||
|  |         ca-certificates \ | ||||||
|  |         boost-devel \ | ||||||
|  |         cmake \ | ||||||
|  |         curl \ | ||||||
|  |         curl-devel \ | ||||||
|  |         expect \ | ||||||
|  |         fuse-devel \ | ||||||
|  |         fuse-libs \ | ||||||
|  |         gcc \ | ||||||
|  |         gcc-c++ \ | ||||||
|  |         glibc-headers \ | ||||||
|  |         gdb \ | ||||||
|  |         git \ | ||||||
|  |         git-core \ | ||||||
|  |         gmp-devel \ | ||||||
|  |         libmpc-devel \ | ||||||
|  |         libxml2-devel \ | ||||||
|  |         libtool \ | ||||||
|  |         pkgconfig \ | ||||||
|  |         python \ | ||||||
|  |         kmod \ | ||||||
|  |         make \ | ||||||
|  |         mod_ssl \ | ||||||
|  |         mpfr-devel \ | ||||||
|  |         ocaml \ | ||||||
|  |         ocaml-ocamlbuild \ | ||||||
|  |         openssl \ | ||||||
|  |         openssl-devel \ | ||||||
|  |         protobuf-compiler \ | ||||||
|  |         protobuf-devel \ | ||||||
|  |         sudo \ | ||||||
|  |         uuid-devel \ | ||||||
|  |         vim \ | ||||||
|  |         wget && \ | ||||||
|  |     yum groupinstall 'Development Tools' -y && \ | ||||||
|  |     yum clean all | ||||||
|  | 
 | ||||||
|  | # Install cpuid tool for tests | ||||||
|  | WORKDIR /tmp | ||||||
|  | RUN wget http://www.etallen.com/cpuid/cpuid-20180519.x86_64.tar.gz && \ | ||||||
|  |     tar -xf ./cpuid-20180519.x86_64.tar.gz && \ | ||||||
|  |     cp ./cpuid-20180519/cpuid /usr/bin/ && \ | ||||||
|  |     rm -rf /tmp/cpuid-20180519* | ||||||
|  | 
 | ||||||
|  | # Install SGX SDK | ||||||
|  | WORKDIR /tmp | ||||||
|  | RUN git clone https://github.com/occlum/linux-sgx && \ | ||||||
|  |     cd linux-sgx && \ | ||||||
|  |     ./download_prebuilt.sh && \ | ||||||
|  |     ./compile.sh && \ | ||||||
|  |     ./install.sh && \ | ||||||
|  |     echo 'source /opt/intel/sgxsdk/environment' >> /root/.bashrc && \ | ||||||
|  |     rm -rf /tmp/linux-sgx | ||||||
|  | 
 | ||||||
|  | # Install Rust | ||||||
|  | ENV OCCLUM_RUST_VERSION=nightly-2019-01-28 | ||||||
|  | RUN curl https://sh.rustup.rs -sSf | \ | ||||||
|  |         sh -s -- --default-toolchain ${OCCLUM_RUST_VERSION} -y && \ | ||||||
|  |     rm -rf /root/.cargo/registry && rm -rf /root/.cargo/git | ||||||
|  | ENV PATH="/root/.cargo/bin:$PATH" | ||||||
|  | 
 | ||||||
|  | # Upgrade gcc to compile occlum toolchain. | ||||||
|  | # Use Developer Toolset 8 from Software Collections (SCLs) to have a newer gcc (8.3.1) than | ||||||
|  | # the native one (4.8.5) and enable it during the build. | ||||||
|  | RUN yum install centos-release-scl-rh -y && \ | ||||||
|  |     yum install devtoolset-8-toolchain -y && \ | ||||||
|  |     printf "unset BASH_ENV PROMPT_COMMAND ENV\nsource scl_source enable devtoolset-8\n" > /usr/bin/scl_enable | ||||||
|  | ARG BASH_ENV="/usr/bin/scl_enable" | ||||||
|  | ARG ENV="/usr/bin/scl_enable" | ||||||
|  | ARG PROMPT_COMMAND=". /usr/bin/scl_enable" | ||||||
|  | 
 | ||||||
|  | # Install Occlum toolchain | ||||||
|  | COPY toolchains/gcc/* /tmp/ | ||||||
|  | WORKDIR /tmp | ||||||
|  | RUN ./build.sh | ||||||
|  | ENV PATH="/opt/occlum/build/bin:/usr/local/occlum/bin:$PATH" | ||||||
|  | 
 | ||||||
|  | # Install the latest version of Occlum | ||||||
|  | WORKDIR /root | ||||||
|  | RUN git clone https://github.com/occlum/occlum && \ | ||||||
|  |     cd occlum && \ | ||||||
|  |     make submodule && \ | ||||||
|  |     make LIBOS_RELEASE=1 && \ | ||||||
|  |     make install && \ | ||||||
|  |     cp -r demos /root/demos && \ | ||||||
|  |     rm -rf /root/occlum | ||||||
|  | 
 | ||||||
|  | # Start AESM service automatically | ||||||
|  | # | ||||||
|  | # To do so, we add the script to ~/.bashrc. We cannot use systemd to run AESM | ||||||
|  | # as a "real" service since the pid 1 is not systemd in Docker. So we start | ||||||
|  | # up AESM service when an user login with an interative shell. | ||||||
|  | COPY docker/start_aesm.sh /opt/occlum/ | ||||||
|  | RUN echo '/opt/occlum/start_aesm.sh' >> /root/.bashrc | ||||||
|  | 
 | ||||||
|  | WORKDIR /root | ||||||
							
								
								
									
										22
									
								
								tools/docker/README.md
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										22
									
								
								tools/docker/README.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | |||||||
|  | # Building Occlum Docker images | ||||||
|  | 
 | ||||||
|  | This folder contains scripts and Dockerfiles for users to build the Docker images | ||||||
|  | for Occlum. An Occlum Docker image sets up the development environment for  | ||||||
|  | Occlum and also gets Occlum preinstalled. | ||||||
|  | 
 | ||||||
|  | Currently, two Linux OS distributions are supported: Ubuntu 16.04 and CentOS 7.2. | ||||||
|  | 
 | ||||||
|  | ## How to Build | ||||||
|  | 
 | ||||||
|  | To build an Occlum Docker image, run the following command | ||||||
|  | ``` | ||||||
|  | ./build_image.sh <OCCLUM_LABEL> <OS_NAME> | ||||||
|  | ``` | ||||||
|  | where `<OCCLUM_LABEL>` is an arbitrary string chosen by the user to  | ||||||
|  | describe the version of Occlum preinstalled in the Docker image  | ||||||
|  | (e.g., "latest", "0.8.0", and "prerelease") and `<OS_NAME>` is the  | ||||||
|  | name of the OS distribution that the Docker image is based on.  | ||||||
|  | Currently, `<OS_NAME>` must be one of the following values:  | ||||||
|  | `ubuntu16.04` and `centos7.2`. | ||||||
|  | 
 | ||||||
|  | The resulting Docker image will have `occlum/occlum:<OCCLUM_LABEL>-<OS_NAME>` as its label. | ||||||
| @ -1,17 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}"  )" >/dev/null 2>&1 && pwd )" |  | ||||||
| 
 |  | ||||||
| set -e |  | ||||||
| 
 |  | ||||||
| if [[ ( "$#" < 1 ) ]] ; then |  | ||||||
|     echo "Error: tag is not given" |  | ||||||
|     echo "" |  | ||||||
|     echo "Usage: run command" |  | ||||||
|     echo "    build.sh <tag>" |  | ||||||
|     echo "to build a Docker image with a tag (e.g., occlum/occlum:latest)." |  | ||||||
|     exit 1 |  | ||||||
| fi |  | ||||||
| tag=$1 |  | ||||||
| 
 |  | ||||||
| cd "$script_dir/.." |  | ||||||
| docker build -f "$script_dir/Dockerfile" -t "$tag" . |  | ||||||
							
								
								
									
										44
									
								
								tools/docker/build_image.sh
									
									
									
									
									
										Executable file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										44
									
								
								tools/docker/build_image.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,44 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}"  )" >/dev/null 2>&1 && pwd )" | ||||||
|  | 
 | ||||||
|  | report_error() { | ||||||
|  |     RED=$(tput setaf 1) | ||||||
|  |     NO_COLOR=$(tput sgr0) | ||||||
|  | 
 | ||||||
|  |     cat <<EOF | ||||||
|  | ${RED}error:${NO_COLOR} input is invalid | ||||||
|  | 
 | ||||||
|  | build_image | ||||||
|  | Build an Occlum Docker image for a specific OS | ||||||
|  | 
 | ||||||
|  | USAGE: | ||||||
|  |     build_image.sh <OCCLUM_LABEL> <OS_NAME> | ||||||
|  | 
 | ||||||
|  | <OCCLUM_LABEL>: | ||||||
|  |     An arbitrary string chosen by the user to describe the version of Occlum preinstalled in the Docker image, e.g., "latest", "0.8.0", "prerelease", and etc. | ||||||
|  | 
 | ||||||
|  | <OS_NAME>: | ||||||
|  |     The name of the OS distribution that the Docker image is based on. Currently, <OS_NAME> must be one of the following values: | ||||||
|  |         ubuntu16.04         Use Ubuntu 16.04 as the base image | ||||||
|  |         centos7.2           Use CentOS 7.2 as the base image | ||||||
|  | 
 | ||||||
|  | The resulting Docker image will have "occlum/occlum:<OCCLUM_LABEL>-<OS_NAME>" as its label. | ||||||
|  | EOF | ||||||
|  |     exit 1 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | set -e | ||||||
|  | 
 | ||||||
|  | if [[ ( "$#" < 2 ) ]] ; then | ||||||
|  |     report_error | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | occlum_label=$1 | ||||||
|  | os_name=$2 | ||||||
|  | 
 | ||||||
|  | if [ "$os_name" != "ubuntu16.04" ] && [ "$os_name" != "centos7.2" ];then | ||||||
|  |     report_error | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | cd "$script_dir/.." | ||||||
|  | docker build -f "$script_dir/Dockerfile.$os_name" -t "occlum/occlum:$occlum_label-$os_name" . | ||||||
| @ -41,7 +41,7 @@ GCC_VER = ${GCC_VER} | |||||||
| MUSL_VER = git-${MUSL_VER} | MUSL_VER = git-${MUSL_VER} | ||||||
| MUSL_REPO = ${MUSL_REPO} | MUSL_REPO = ${MUSL_REPO} | ||||||
| EOF | EOF | ||||||
| make | make -j$(nproc) | ||||||
| make install | make install | ||||||
| 
 | 
 | ||||||
| # Remove all source code and build files | # Remove all source code and build files | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user