Skip to content

Commit

Permalink
Add script to build docker image. (#77)
Browse files Browse the repository at this point in the history
* Add script to build docker image.

* Add start_envoy for docker image.
  • Loading branch information
qiwzhang authored Feb 9, 2017
1 parent 28105ca commit 21f1cb3
Show file tree
Hide file tree
Showing 6 changed files with 173 additions and 4 deletions.
16 changes: 16 additions & 0 deletions WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,19 @@ load(
)

envoy_repositories()

new_http_archive(
name = "docker_ubuntu",
build_file_content = """
load("@bazel_tools//tools/build_defs/docker:docker.bzl", "docker_build")
docker_build(
name = "xenial",
tars = ["xenial/ubuntu-xenial-core-cloudimg-amd64-root.tar.gz"],
visibility = ["//visibility:public"],
)
""",
sha256 = "de31e6fcb843068965de5945c11a6f86399be5e4208c7299fb7311634fb41943",
strip_prefix = "docker-brew-ubuntu-core-e406914e5f648003dfe8329b512c30c9ad0d2f9c",
type = "zip",
url = "https://codeload.github.com/tianon/docker-brew-ubuntu-core/zip/e406914e5f648003dfe8329b512c30c9ad0d2f9c",
)
46 changes: 46 additions & 0 deletions script/release-docker
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#!/bin/bash
#
# Copyright 2016 Google Inc. All Rights Reserved.
#
# 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.
#
################################################################################
#
set -ex

# This docker image can be used as:
#
# docker run IMAGE -a backend_address -p PORT -m MIXER_SERVER
#

PROJECT=istio-testing
IMAGE_PREFIX="gcr.io/${PROJECT}/proxy"

DATE_PART=$(date +"%Y%m%d")
SHA_PART=$(git show -q HEAD --pretty=format:%h)
DOCKER_TAG="${DATE_PART}${SHA_PART}"

IMAGE_NAME="${IMAGE_PREFIX}:${DOCKER_TAG}"

gcloud docker --authorize-only

bazel run --config=release //src/envoy/mixer:proxy "${IMAGE_NAME}"

gcloud docker -- push "${IMAGE_NAME}"

IMAGE_LATEST="${IMAGE_PREFIX}:latest"

docker tag -f "${IMAGE_NAME}" "${IMAGE_LATEST}"

gcloud docker -- push "${IMAGE_LATEST}"

40 changes: 40 additions & 0 deletions src/envoy/mixer/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#

load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
load("@bazel_tools//tools/build_defs/docker:docker.bzl", "docker_build")

cc_library(
name = "filter_lib",
Expand Down Expand Up @@ -47,3 +48,42 @@ pkg_tar(
mode = "0755",
package_dir = "/usr/local/bin/",
)

pkg_tar(
name = "start_envoy_tar",
extension = "tar.gz",
files = ["start_envoy"],
mode = "0755",
package_dir = "/usr/local/bin/",
)

pkg_tar(
name = "config_tar",
extension = "tar.gz",
files = ["envoy.conf.template"],
mode = "0666",
package_dir = "/etc/opt/proxy",
tags = ["manual"],
)

docker_build(
name = "proxy",
base = "@docker_ubuntu//:xenial",
entrypoint = [
"/usr/local/bin/start_envoy",
"-e",
"/usr/local/bin/envoy",
"-c",
"/etc/opt/proxy/envoy.conf",
"-t",
"/etc/opt/proxy/envoy.conf.template",
],
ports = ["9090"],
repository = "istio",
tags = ["manual"],
tars = [
":config_tar",
":envoy_tar",
":start_envoy_tar",
],
)
2 changes: 1 addition & 1 deletion src/envoy/mixer/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ This Proxy will use Envoy and talk to Mixer server.
* Start Envoy proxy, run

```
bazel-bin/src/envoy/mixer/envoy -c src/envoy/mixer/envoy-mixer.conf
bazel-bin/src/envoy/mixer/start_envoy
```

* Then issue HTTP request to proxy.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"listeners": [
{
"port": 9090,
"port": ${PORT},
"bind_to_port": true,
"filters": [
{
Expand Down Expand Up @@ -35,7 +35,7 @@
"type": "both",
"name": "mixer",
"config": {
"mixer_server": "localhost:9091"
"mixer_server": "${MIXER_SERVER}"
}
},
{
Expand All @@ -62,7 +62,7 @@
"lb_type": "round_robin",
"hosts": [
{
"url": "tcp://localhost:8080"
"url": "tcp://${BACKEND}"
}
]
}
Expand Down
67 changes: 67 additions & 0 deletions src/envoy/mixer/start_envoy
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
#!/bin/bash
#
# Copyright 2016 Google Inc. All Rights Reserved.
#
# 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.
#
################################################################################
#

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)"

function usage() {
[[ -n "${1}" ]] && echo "${1}"

cat <<EOF
usage: ${BASH_SOURCE[0]} [options ...]"
options:
-a ... backend address
-c ... envoy config file path
-e ... envoy binary path
-l ... debug level
-m ... mixer server address
-p ... listening port
-t ... envoy config template file path
EOF
exit 2
}

ENVOY="$ROOT/bazel-bin/src/envoy/mixer/envoy"
TEMPLATE="$ROOT/src/envoy/mixer/envoy.conf.template"
CONFIG="$ROOT/src/envoy/mixer/envoy.conf"
DEBUG=''

PORT='9090'
MIXER_SERVER='localhost:9091'
BACKEND='localhost:8080'

while getopts :a:c:e:l:m:p:t: arg; do
case ${arg} in
a) BACKEND="${OPTARG}";;
c) CONFIG="${OPTARG}";;
e) ENVOY="${OPTARG}";;
l) DEBUG="-l ${OPTARG}";;
m) MIXER_SERVER="${OPTARG}";;
p) PORT="${OPTARG}";;
t) TEMPLATE="${OPTARG}";;
*) usage "Invalid option: -${OPTARG}";;
esac
done

sed -e "s|\${PORT}|${PORT}|g" \
-e "s|\${BACKEND}|${BACKEND}|g" \
-e "s|\${MIXER_SERVER}|${MIXER_SERVER}|g" \
"${TEMPLATE}" > "${CONFIG}"

"${ENVOY}" -c "${CONFIG}" "${DEBUG}"

0 comments on commit 21f1cb3

Please sign in to comment.