Merge "Dockerfile for AbstractOLT"
diff --git a/.gitreview b/.gitreview
new file mode 100644
index 0000000..a03dbaa
--- /dev/null
+++ b/.gitreview
@@ -0,0 +1,5 @@
+[gerrit]
+host=gerrit.opencord.org
+port=29418
+project=abstract-olt.git
+defaultremote=origin
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..6016d9e
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,54 @@
+# Copyright 2018-present Open Networking Foundation
+#
+# 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.
+
+# Abstract OLT dockerfile
+
+# builder parent
+FROM golang:1.10-stretch as builder
+
+# install prereqs
+ENV PROTOC_VERSION 3.6.1
+ENV PROTOC_SHA256SUM 6003de742ea3fcf703cfec1cd4a3380fd143081a2eb0e559065563496af27807
+
+RUN apt-get update \
+ && apt-get install unzip \
+ && curl -L -o /tmp/protoc-${PROTOC_VERSION}-linux-x86_64.zip https://github.com/google/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-x86_64.zip \
+ && echo "$PROTOC_SHA256SUM  /tmp/protoc-${PROTOC_VERSION}-linux-x86_64.zip" | sha256sum -c - \
+ && unzip /tmp/protoc-${PROTOC_VERSION}-linux-x86_64.zip -d /tmp/protoc3 \
+ && mv /tmp/protoc3/bin/* /usr/local/bin/ \
+ && mv /tmp/protoc3/include/* /usr/local/include/ \
+ && go get -v github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway \
+ && go get -v github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger \
+ && go get -v github.com/golang/protobuf/protoc-gen-go
+
+# copy and build
+WORKDIR /go/src/gerrit.opencord.org/abstract-olt
+COPY . /go/src/gerrit.opencord.org/abstract-olt
+
+RUN make all
+
+# runtime parent
+FROM alpine:3.8
+
+# required for binaries to run
+RUN apk add --update libc6-compat
+
+WORKDIR /app
+COPY --from=builder /go/src/gerrit.opencord.org/abstract-olt/bin/AbstractOLT /app/AbstractOLT
+COPY --from=builder /go/src/gerrit.opencord.org/abstract-olt/bin/client /app/client
+
+EXPOSE 7777/tcp
+EXPOSE 7778/tcp
+
+CMD [ '/app/AbstractOLT' ]
diff --git a/Makefile b/Makefile
index c4fd8f3..b470f16 100644
--- a/Makefile
+++ b/Makefile
@@ -23,9 +23,9 @@
 SERVER_PKG_BUILD := "${PKG}/cmd/AbstractOLT"
 CLIENT_PKG_BUILD := "${PKG}/client"
 PKG_LIST := $(shell go list ${PKG}/... | grep -v /vendor/)
+DOCKERTAG ?= "latest"
 
-
-.PHONY: all api server client test
+.PHONY: all api server client test docker
 
 all: server client
 
@@ -79,5 +79,8 @@
 	@go test ./...
 	@go test ./... -cover
 
+docker: ## build docker image
+	@docker build -t opencord/abstract-olt:${DOCKERTAG} .
+
 help: ## Display this help screen
 	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
diff --git a/README.md b/README.md
index 1ea093c..648b197 100644
--- a/README.md
+++ b/README.md
@@ -22,6 +22,7 @@
 make server # compiles AbstractOLT into bin directory
 make client # compiles a test client which exercises some of the server api functions
 make all # builds everything
+make docker # builds a docker container with the AbstractOLT and client in /app
 ```
 ### Certificates
 Before running you will need to create a cert directory under bin and generate ssl certificates