Docker-app allows you to share your applications on Docker Hub directly. This tool not only makes Compose file shareable but provide us with simplified approach to share multi-service application (not just Docker Image) directly on Dockerhub.
Docker-app 0.6.0 got released 2 week back. Few of the notable features included under this release include –
- Support for external files (extra configuration files): when pushing and pulling all files present in the application folder are included.
- Render can now produce output in multiple formats (YAML or JSON).
split
andmerge
now work properly when specifying an image as input and no output.- Command line accepts a trailing slash in the application path.
But one of the most important fix which arrived with this releases was related to Helm chart. This release fixed multiple issues in Helm chart generation.
How I built Elastic Stack for Docker Swarm using Docker Application Packages(docker-app)
Under this blog post, I will showcase how docker-app can help you build Helm Chart for your 3-node Kubernetes Cluster running on Docker Enterprise 2.0.
Tested Infrastructure
Platform | Google Cloud Platform |
OS Instance | Ubuntu 18.04 |
Machine Type | n1-standard-4 (4 vCPUs, 15 GB memory) |
No. of Nodes | 3 |
I assume that you have 3 Ubuntu 18.04 instances having the above minimal configurations. Make sure all the hosts you want to manage with Docker EE have a minimum of:
- Docker Enterprise Edition 17.06.2-ee-8. Values of n in the -ee- suffix must be 8 or higher
- Linux kernel version 3.10 or higher
- 4.00 GB of RAM
- 3.00 GB of available disk space
Cloning the Repository
Login to the first Ubuntu 18.04 OS and run the below command to clone the repository.
git clone https://github.com/ajeetraina/docker101
cd docker101/docker-ee/ubuntu
Installing Docker EE
The best way to try Docker Enterprise Edition for yourself is to get the 30-day trial available at the Docker Store. Once you get your trial license, you can install Docker EE on your Linux servers.
As soon as you get 1 Month Trial Version of Docker EE, you will be provided with URL. Copy the section from URL starting from sub
https://storebits.docker.com/ee/ubuntu/sub-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx
Exporting URL
export eeid=sub-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx
Installing Docker EE
I have built a script for you to get Docker EE 2.0 up and running flawlessly. Just one command and Docker EE is all set.
sh bootstrap.sh provision_dockeree
Setting up UCP
Run the below command to initiate container which will setup UCP for you.
sudo sh bootstrap.sh provision_ucp
openusm@master01:~/test/docker101/docker-ee/ubuntu$ sudo sh bootstrap.sh provision_ucp
Unable to find image 'docker/ucp:3.0.5' locally
3.0.5: Pulling from docker/ucp
ff3a5c916c92: Pull complete
a52011fa0ead: Pull complete
87e35eb74a08: Pull complete
Digest: sha256:c8a609209183561de7779e5d32abc5fd9125944c67e8daf262dcbb9f2b1e44ff
Status: Downloaded newer image for docker/ucp:3.0.5
INFO[0000] Your engine version 17.06.2-ee-16, build 9ef4f0a (4.15.0-1021-gcp) is compatible with UCP 3.0.5 (f588f8a)
Admin Username: collabnix
Admin Password:
Confirm Admin Password:
INFO[0043] Pulling required images... (this may take a while)
INFO[0043] Pulling docker/ucp-auth:3.0.5
INFO[0049] Pulling docker/ucp-hyperkube:3.0.5
INFO[0064] Pulling docker/ucp-etcd:3.0.5
INFO[0070] Pulling docker/ucp-interlock-proxy:3.0.5
INFO[0086] Pulling docker/ucp-agent:3.0.5
INFO[0092] Pulling docker/ucp-kube-compose:3.0.5
INFO[0097] Pulling docker/ucp-dsinfo:3.0.5
INFO[0104] Pulling docker/ucp-cfssl:3.0.5
INFO[0107] Pulling docker/ucp-kube-dns-sidecar:3.0.5
INFO[0112] Pulling docker/ucp-interlock:3.0.5
INFO[0115] Pulling docker/ucp-kube-dns:3.0.5
INFO[0120] Pulling docker/ucp-controller:3.0.5
INFO[0128] Pulling docker/ucp-pause:3.0.5
INFO[0132] Pulling docker/ucp-calico-kube-controllers:3.0.5
INFO[0136] Pulling docker/ucp-auth-store:3.0.5
INFO[0142] Pulling docker/ucp-calico-cni:3.0.5
INFO[0149] Pulling docker/ucp-calico-node:3.0.5
INFO[0158] Pulling docker/ucp-kube-dns-dnsmasq-nanny:3.0.5
INFO[0163] Pulling docker/ucp-compose:3.0.5
INFO[0167] Pulling docker/ucp-swarm:3.0.5
INFO[0173] Pulling docker/ucp-metrics:3.0.5
INFO[0179] Pulling docker/ucp-interlock-extension:3.0.5
WARN[0183] None of the hostnames we'll be using in the UCP certificates [master01 127.0.0.1 172.17.0.1 10.140.0.2] contain a domain component. Your generated certs may fail TLS validation unless you only use one of these shortnames or IPs to connect. You can use the --san flag to add more aliases
You may enter additional aliases (SANs) now or press enter to proceed with the above list.
Additional aliases:
INFO[0000] Initializing a new swarm at 10.140.0.2
Additional aliases:
INFO[0000] Initializing a new swarm at 10.140.0.2
INFO[0009] Installing UCP with host address 10.140.0.2 - If this is incorrect, please specify an alternative address with the '--host-address' flag
INFO[0009] Deploying UCP Service...
INFO[0068] Installation completed on master01 (node slsvy00m1khejbo5itmupk034)
INFO[0068] UCP Instance ID: omz7lso0zpeyzk17gxubvz72r
INFO[0068] UCP Server SSL: SHA-256 Fingerprint=24:9B:51:4E:E2:F1:CD:1B:DE:E0:86:0F:DC:E7:29:B5:1E:0E:6B:0C:BF:24:CC:27:85:91:35:A1:6A:39:37:C6
INFO[0068] Login to UCP at https://10.140.0.2:443
INFO[0068] Username: collabnix
INFO[0068] Password: (your admin password)
Logging in Docker EE
By now, you should be able to login to Docker EE Window using browser. Upload the license and you should be good to see the UCP console.
Installing Kubectl
Undoubtedly, kubectl has been favourite command for K8s users. It works great but it’s painful because you use it to manually run a command for each resource in your Kubernetes application. This is prone to error, because we might forget to deploy one resource, or introduce a typo when writing our kubectl
commands. As we add more parts to our application, the probability of these problems occurring increases.
But still here’s a bonus – Execute the below script if you really want to use kubectl on Docker EE Platform.
sudo sh bootstrap.sh install_kubectl
Verify Kubectl Version
@master01:~$ kubectl version
Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.11", GitCommit:"1df6a8381669a6c753f79cb31ca2e3d57ee7c8a3", GitTreeState:"clean", BuildDate:"2018-04-05T17:24:
03Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"8+", GitVersion:"v1.8.11-docker-8d637ae", GitCommit:"8d637aedf46b9c21dde723e29c645b9f27106fa5", GitTreeState:"clean", BuildDate:"2
018-04-26T16:51:21Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
Verifying Docker Version
Here you go.. Docker EE 2.0 is all set up with Swarm & Kubernetes running side by side.
docker version
Client: Docker Enterprise Edition (EE) 2.0
Version: 17.06.2-ee-16
API version: 1.30
Go version: go1.8.7
Git commit: 9ef4f0a
Built: Thu Jul 26 16:41:28 2018
OS/Arch: linux/amd64
Server: Docker Enterprise Edition (EE) 2.0
Engine:
Version: 17.06.2-ee-16
API version: 1.30 (minimum version 1.12)
Go version: go1.8.7
Git commit: 9ef4f0a
Built: Thu Jul 26 16:40:18 2018
OS/Arch: linux/amd64
Experimental: false
Universal Control Plane:
Version: 3.0.5
ApiVersion: 1.30
Arch: amd64
BuildTime: Thu Aug 30 17:47:03 UTC 2018
GitCommit: f588f8a
GoVersion: go1.9.4
MinApiVersion: 1.20
Os: linux
Kubernetes:
Version: 1.8+
buildDate: 2018-04-26T16:51:21Z
compiler: gc
gitCommit: 8d637aedf46b9c21dde723e29c645b9f27106fa5
gitTreeState: clean
gitVersion: v1.8.11-docker-8d637ae
goVersion: go1.8.3
major: 1
minor: 8+
platform: linux/amd64
Calico:
Version: v3.0.8
cni: v2.0.6
kube-controllers: v2.0.5
node: v3.0.8
Verifying the Kubernetes Nodes
@master01:~/test/docker101/docker-ee/ubuntu$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 Ready master 20m v1.8.11-docker-8d637ae
Adding Worker Nodes
To add worker nodes, go to Add Nodes section under Docker Enterprise UI and click on “Add a Node”. It will display a command which need to be executed on worker nodes. This should be good to build multi-node Docker EE Swarm & Kubernetes Cluster
m@master01:~$ sudo docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
av668en5dinpin5jpi6ro0yfs worker01 Ready Active
k4grcnyl6vbf0z17bh67cz9l5 worker02 Ready Active
slsvy00m1khejbo5itmupk034 * master01 Ready Active Leader
@master01:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 Ready master 1h v1.8.11-docker-8d637ae
worker01 NotReady <none> 28s v1.8.11-docker-8d637ae
worker02 Ready <none> 3m v1.8.11-docker-8d637ae
openusm@master01:~$
Downloading Client Bundle
In order to manage services using Docker CLI, one need to install client bundle and Docker Inc. provides an easy way to install it. I put it under the script “install-client-bundle” . All you need is to supply the correct username and password plus UCP URL to make it work.
https://gist.github.com/collabnix/30c9f772445076d765f7b91ce7d3c7cb
Cloning the docker-app Repository
@master01:~/$git clone https://github.com/ajeetraina/app
@master01:~/$cd app
@master01:~/app$ sudo sh install-dockerapp
Verifying Docker-app version
openusm@master01:~/app$ docker-app version
Version: v0.6.0
Git commit: 9f9c6680
Built: Thu Oct 4 13:30:33 2018
OS/Arch: linux/amd64
Experimental: off
Renderers: none
Create WordPress Helm Package
Change directory to /app/examples/wordpress and run the below command to create Helm Chart.
openusm@master01:~/app/examples/wordpress$ docker-app helm --stack-version=v1beta1
docker-app helm wordpress will output a Helm package in the ./wordpress.helm folder. –compose-file (or -c), –set (or -e) and –settings-files (or -s) flags apply the same way they do for the render subcommand.
Deploy WordPress Application on Kubernetes Cluster
We are now all set to build WordPress application for Kubernetes Cluster using docker-app deploy
command.
openusm@master01:~/app/examples/wordpress$ docker-app deploy -o kubernetes
top-level network "overlay" is ignored
service "mysql": network "overlay" is ignored
service "wordpress": network "overlay" is ignored
service "wordpress": depends_on are ignored
Waiting for the stack to be stable and running...
wordpress: Ready [pod status: 1/1 ready, 0/1 pending, 0/1 failed]
If you’re interested in a fully conformant Kubernetes environment that is ready for the enterprise, https://trial.docker.com/
Did you find this blog helpful? Feel free to share your experience. Get in touch with me on Twitter – @ajeetsraina
If you are looking out for contribution, join me at Docker Community Slack Channel.
Comments are closed.