Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MYST-413 Fix broken Alpine image #197

Merged
merged 10 commits into from Mar 12, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 2 additions & 5 deletions .dockerignore
@@ -1,5 +1,2 @@
build/server/ca.*
build/server/server.*
build/server/tc.key
build/server/*.sock
build/client/*.sock
build/
.git/
5 changes: 3 additions & 2 deletions bin/client_build
Expand Up @@ -13,7 +13,8 @@
#> GOOS=windows GOARCH=amd64 bin/client_build
#
# Check if program has dynamic libraries:
#> readelf -d /build/client/mysterium_client
#> brew install readelf
#> readelf -d build/client/mysterium_client

source bin/helpers/functions.sh
source bin/helpers/load_environment.sh
Expand All @@ -29,4 +30,4 @@ if [ $? -ne 0 ]; then
exit 1
fi

exit 0
exit 0
26 changes: 26 additions & 0 deletions bin/client_docker/alpine/Dockerfile
@@ -0,0 +1,26 @@
FROM golang:1.9.2-alpine AS builder

# Install packages
RUN apk add --update --no-cache bash g++ make \
&& rm -rf /var/cache/apk/*

# Compile application
WORKDIR /go/src/github.com/mysterium/node
ADD . .
RUN bin/client_build



FROM alpine:3.6
MAINTAINER Valdas Petrulis <petrulis.valdas@gmail.com>

# Install packages
RUN apk add --update --no-cache bash iptables ca-certificates openvpn \
&& rm -rf /var/cache/apk/*

# Install application
COPY bin/client_docker/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From docker perspective it's not very efficient to put executable AND it's args into entry point, as it will be very hard to override params later. It should be like this:
ENTRYPOINT ["your exec and args which must be always present and never change"]
CMD["default additional args which can be customized when using docker run style"]
those could be tequila.port , address , discovery address etc.
Do we really even need docker-entrypoint.sh ? it hides important stuff, also uses env vars internally and it's hard to track what is going on

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good ideas, will depreciate Docker environments variables in upcoming PRs


COPY bin/client_package/config /etc/mysterium-node
COPY --from=builder /go/src/github.com/mysterium/node/build/client/mysterium_client /usr/bin/mysterium_client
42 changes: 42 additions & 0 deletions bin/client_package_docker
@@ -0,0 +1,42 @@
#!/bin/bash

###########################################################################
# Creates Docker image and uploads it to DockerHub https://hub.docker.com/r/mysteriumnetwork/mysterium-node/
#
# To create a release, simply execute:
#> bin/client_package_docker version [tag..]

# Usage example:
#> bin/client_package_docker 0.0.1
#> bin/client_package_docker 0.0.1 0.0.1-alpine alpine latest

VERSION=$1
if [ -z "$VERSION" ]; then
printf "\e[0;31m%s\e[0m\n" "Missing version!"
exit 1
fi

DOCKER_IMAGE="mysteriumnetwork/mysterium-client"

printf "Building Alpine image..\n" \
&& docker build \
--file bin/client_docker/alpine/Dockerfile \
--build-arg PACKAGE_VERSION=$VERSION \
--tag $DOCKER_IMAGE:$VERSION-alpine \
.
if [ $? -ne 0 ] ; then
printf "\e[0;31m%s\e[0m\n" "Failed to build Alpine image!"
exit 1
fi

shift
while test $# -gt 0; do
DOCKER_TAG=$1
printf "Publishing version '$DOCKER_TAG' image..\n" \
&& docker tag $DOCKER_IMAGE:$VERSION-alpine $DOCKER_IMAGE:$DOCKER_TAG \
&& docker push $DOCKER_IMAGE:$DOCKER_TAG
shift
done

printf "\e[0;32m%s\e[0m\n" "Docker image building process complete!"
exit 0
42 changes: 42 additions & 0 deletions bin/client_package_docker_ubuntu
@@ -0,0 +1,42 @@
#!/bin/bash

###########################################################################
# Creates Docker image and uploads it to DockerHub https://hub.docker.com/r/mysteriumnetwork/mysterium-node/
#
# To create a release, simply execute:
#> bin/client_package_docker version [tag..]

# Usage example:
#> bin/client_package_docker_ubuntu 0.0.1
#> bin/client_package_docker_ubuntu 0.0.1 0.0.1-ubuntu ubuntu

VERSION=$1
if [ -z "$VERSION" ]; then
printf "\e[0;31m%s\e[0m\n" "Missing version!"
exit 1
fi

DOCKER_IMAGE="mysteriumnetwork/mysterium-client"

printf "Building Ubuntu image..\n" \
&& docker build \
--file bin/client_docker/ubuntu/Dockerfile \
--build-arg PACKAGE_VERSION=$VERSION \
--tag $DOCKER_IMAGE:$VERSION-ubuntu \
.
if [ $? -ne 0 ] ; then
printf "\e[0;31m%s\e[0m\n" "Failed to build Ubuntu image!"
exit 1
fi

shift
while test $# -gt 0; do
DOCKER_TAG=$1
printf "Publishing version '$DOCKER_TAG' image..\n" \
&& docker tag $DOCKER_IMAGE:$VERSION-ubuntu $DOCKER_IMAGE:$DOCKER_TAG \
&& docker push $DOCKER_IMAGE:$DOCKER_TAG
shift
done

printf "\e[0;32m%s\e[0m\n" "Docker image building process complete!"
exit 0
8 changes: 6 additions & 2 deletions bin/package_all
Expand Up @@ -49,6 +49,10 @@ printf "Creating build directory '$DIR_BUILD' ..\n" \
&& GOOS=darwin GOARCH=amd64 bin/client_build \
&& mv build/client/mysterium_client $DIR_BUILD/mysterium_client_osx_amd64 \
&& printf "\n\n" \
&& GOOS=darwin GOARCH=386 bin/client_build \
&& mv build/client/mysterium_client $DIR_BUILD/mysterium_client_osx_386 \
&& bin/server_package_docker $VERSION $VERSION-alpine alpine latest \
&& bin/server_package_docker_ubuntu $VERSION $VERSION-ubuntu ubuntu \
&& bin/client_package_docker $VERSION $VERSION-alpine alpine latest \
&& bin/client_package_docker_ubuntu $VERSION $VERSION-ubuntu ubuntu \
&& printf "\n\n" \

&& printf "\e[0;32m%s\e[0m\n" "All packages successfully packaged to directory '$DIR_BUILD'!"
5 changes: 3 additions & 2 deletions bin/server_build
Expand Up @@ -13,7 +13,8 @@
#> GOOS=windows GOARCH=amd64 bin/server_build
#
# Check if program has dynamic libraries:
#> readelf -d /build/server/mysterium_server
#> brew install readelf
#> readelf -d build/server/mysterium_server

source bin/helpers/functions.sh
source bin/helpers/load_environment.sh
Expand All @@ -29,4 +30,4 @@ if [ $? -ne 0 ]; then
exit 1
fi

exit 0
exit 0
15 changes: 7 additions & 8 deletions bin/server_docker/alpine/Dockerfile
@@ -1,27 +1,26 @@
FROM golang:1.9.2-alpine AS builder

# Install packages
RUN apk add --update bash \
RUN apk add --update --no-cache bash g++ make \
&& rm -rf /var/cache/apk/*

# Compile application
WORKDIR /go/src/github.com/mysterium/node
ADD . .
RUN GOOS=linux GOARCH=amd64 bin/server_build
RUN bin/server_build



FROM alpine:3.6
MAINTAINER Valdas Petrulis <petrulis.valdas@gmail.com>

# Install packages
RUN apk update \
&& apk add --no-cache iptables ca-certificates openvpn \
RUN apk add --update --no-cache bash iptables ca-certificates openvpn \
&& rm -rf /var/cache/apk/*

# Install application
COPY --from=builder /go/src/github.com/mysterium/node/build/server/mysterium_server /usr/bin/mysterium_server
COPY bin/server_package/config /etc/mysterium-node

COPY bin/server_docker/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]

COPY bin/server_package/config /etc/mysterium-node
COPY --from=builder /go/src/github.com/mysterium/node/build/server/mysterium_server /usr/bin/mysterium_server
2 changes: 1 addition & 1 deletion bin/server_docker/docker-entrypoint-debug.sh
Expand Up @@ -4,4 +4,4 @@ set -e
while true;
echo "Sleeping..";
do sleep 5;
done
done
28 changes: 16 additions & 12 deletions bin/server_package_docker
Expand Up @@ -4,11 +4,11 @@
# Creates Docker image and uploads it to DockerHub https://hub.docker.com/r/mysteriumnetwork/mysterium-node/
#
# To create a release, simply execute:
#> bin/server_package_docker version [docker_tag]
#> bin/server_package_docker version [tag..]

# Usage example:
#> bin/server_package_docker 0.0.1
#> bin/server_package_docker 0.0.1 latest
#> bin/server_package_docker 0.0.1 0.0.1-alpine alpine latest

VERSION=$1
if [ -z "$VERSION" ]; then
Expand All @@ -17,22 +17,26 @@ if [ -z "$VERSION" ]; then
fi

DOCKER_IMAGE="mysteriumnetwork/mysterium-node"
DOCKER_TAG=$2
if [ -z "$DOCKER_TAG" ]; then
DOCKER_TAG=$VERSION
fi

printf "Building Docker image '$DOCKER_IMAGE:$DOCKER_TAG' ..\n" \
printf "Building Alpine image..\n" \
&& docker build \
--file bin/server_docker/ubuntu/Dockerfile \
--file bin/server_docker/alpine/Dockerfile \
--build-arg PACKAGE_VERSION=$VERSION \
--tag $DOCKER_IMAGE:$DOCKER_TAG \
. \
&& docker push $DOCKER_IMAGE:$DOCKER_TAG
--tag $DOCKER_IMAGE:$VERSION-alpine \
.
if [ $? -ne 0 ] ; then
printf "\e[0;31m%s\e[0m\n" "Failed to build Docker image!"
printf "\e[0;31m%s\e[0m\n" "Failed to build Alpine image!"
exit 1
fi

shift
while test $# -gt 0; do
DOCKER_TAG=$1
printf "Publishing version '$DOCKER_TAG' image..\n" \
&& docker tag $DOCKER_IMAGE:$VERSION-alpine $DOCKER_IMAGE:$DOCKER_TAG \
&& docker push $DOCKER_IMAGE:$DOCKER_TAG
shift
done

printf "\e[0;32m%s\e[0m\n" "Docker image building process complete!"
exit 0
42 changes: 42 additions & 0 deletions bin/server_package_docker_ubuntu
@@ -0,0 +1,42 @@
#!/bin/bash

###########################################################################
# Creates Docker image and uploads it to DockerHub https://hub.docker.com/r/mysteriumnetwork/mysterium-node/
#
# To create a release, simply execute:
#> bin/server_package_docker version [tag..]

# Usage example:
#> bin/server_package_docker_ubuntu 0.0.1
#> bin/server_package_docker_ubuntu 0.0.1 0.0.1-ubuntu ubuntu

VERSION=$1
if [ -z "$VERSION" ]; then
printf "\e[0;31m%s\e[0m\n" "Missing version!"
exit 1
fi

DOCKER_IMAGE="mysteriumnetwork/mysterium-node"

printf "Building Ubuntu image..\n" \
&& docker build \
--file bin/server_docker/ubuntu/Dockerfile \
--build-arg PACKAGE_VERSION=$VERSION \
--tag $DOCKER_IMAGE:$VERSION-ubuntu \
.
if [ $? -ne 0 ] ; then
printf "\e[0;31m%s\e[0m\n" "Failed to build Ubuntu image!"
exit 1
fi

shift
while test $# -gt 0; do
DOCKER_TAG=$1
printf "Publishing version '$DOCKER_TAG' image..\n" \
&& docker tag $DOCKER_IMAGE:$VERSION-ubuntu $DOCKER_IMAGE:$DOCKER_TAG \
&& docker push $DOCKER_IMAGE:$DOCKER_TAG
shift
done

printf "\e[0;32m%s\e[0m\n" "Docker image building process complete!"
exit 0
2 changes: 1 addition & 1 deletion bin/travis_scripts/ensure_glide.sh
Expand Up @@ -5,7 +5,7 @@ GLIDE_VERSION=$2


OS_ARCH="linux-amd64"
if [ "$TRAVIS_OS_NAME"=="osx" ]; then
if [ "$TRAVIS_OS_NAME" == "osx" ]; then
OS_ARCH="darwin-amd64"
fi

Expand Down
46 changes: 31 additions & 15 deletions docker-compose.yml
Expand Up @@ -4,12 +4,27 @@ services:
broker:
tty: true
image: nats
networks:
- default
ports:
- 4222:4222
- 8222:8222

server-alpine:
privileged: true
tty: true
build:
context: .
dockerfile: bin/server_docker/alpine/Dockerfile
depends_on:
- broker
cap_add:
- MKNOD
- NET_ADMIN
ports:
- 11941:1194
environment:
MYSTERIUM_SERVER_IDENTITY: ""
MYSTERIUM_SERVER_IDENTITY_PASSPHRASE: ""

server-ubuntu:
privileged: true
tty: true
Expand All @@ -23,31 +38,32 @@ services:
cap_add:
- MKNOD
- NET_ADMIN
networks:
- default
ports:
- 1194:1194
- 11942:1194
environment:
MYSTERIUM_SERVER_IDENTITY: ""
MYSTERIUM_SERVER_IDENTITY_PASSPHRASE: ""
MYSTERIUM_DISCOVERY_ADDRESS: ""
MYSTERIUM_BROKER_ADDRESS: ""

client:
client-alpine:
privileged: true
tty: true
build:
context: .
dockerfile: bin/client_docker/alpine/Dockerfile
ports:
- 40501:4050
environment:
MYSTERIUM_CLIENT_TEQUILAPI_PORT: 4050

client-ubuntu:
privileged: true
tty: true
build:
context: .
dockerfile: bin/client_docker/ubuntu/Dockerfile
args:
PACKAGE_VERSION: 0.0.1-docker
depends_on:
- broker
- server-ubuntu
networks:
- default
ports:
- 4050:4050
- 40502:4050
environment:
MYSTERIUM_CLIENT_TEQUILAPI_PORT: 4050
MYSTERIUM_DISCOVERY_ADDRESS: ""