In this article we will setup our development environment to utilize containerization technology in future series/demos.
Technology that we will work with are Kubernetes (AWS EKS (Elastic Kubernetes Service)/Azure AKS (Azure Kubernetes Service) ) and Docker (AWS ECR (Elastic Container Registry)/Azure ACR (Azure Container Registry) ).
Kubernetes allows for management of containers to provide scalability, high availability and fault tolerance among others. Containers are isolated packages/images, that contain all that is needed to run an application. They are lightweight, portable and ensures runtime is consistent.
The below was written using Ubuntu 18.04.2-LTS Desktop (minimal) and Windows Subsystem (Windows 10 Insider Preview; 18950.1000 (Fast Ring); 18362.267 (May 2019 Update)) for Linux (WSL2 and WSL1; Ubuntu). It should be applicable to Debian, Ubuntu Docker (lsb-release package has been left in to accommodate) and will be applicable to any Fast Ring Windows 10 build >= 18917.
Note: Any build lower then 18917, should use Docker Desktop and use the .exe commands in WSL via named pipes.
If you are using Windows 10 Home or any non Windows based 10 build, then please use Vagrant (non-Windows 10) to spin up a Virtual Machine or Docker Toolbox (Windows 10 Home in conjunction with WSL).
Start -> Control Panel -> Programs and Features -> Turn Windows features on or off -> Select Windows Subsystem for Linux -> ok -> Restart now.
Open a Browser -> WSL Store -> Open Microsoft Store -> Ubuntu -> Get -> Launch or Start -> Search for programs and files -> Ubuntu (with the colored circular icon and hit enter) -> Installing, this may take a few minutes… -> Enter new UNIX username: -> Enter new UNIX password: -> Retype new UNIX password: -> Right click the command window (on the toolbar) -> Options -> Quick Edit Mode -> ok
Not for Windows 10 builds < 18917
Start -> Search for powershell -> right click -> Run as administrator and select Yes to the Elevated UAC prompt)
PS > Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
Select Reboot (default) when prompted.
Convert Ubuntu to WSL2:
Start -> Run: powershell
To see what Distros are installed, state and version:
> wsl -l -v
Set WSL2 on the distribution:
> wsl --set-version Ubuntu 2
Note: This will take a while.
After it is finished, run the command, 2 lines above (which was used to list) to see that it is now Version 2.
Start -> Search for programs and files -> Ubuntu (with the colored circular icon and hit enter)
Install some prerequisites:
Note: software-properties-common isn’t needed if not installing docker (Windows 10 (WSL) builds < 18917).
$ sudo apt update $ sudo apt install -y python3-pip apt-transport-https ca-certificates curl gnupg2 lsb-release software-properties-common
Restart services during package upgrades without asking? -> Tab to <Yes> and hit Enter.
Install AWS CLI:
$ pip3 install awscli --upgrade --user && chmod 754 ~/.local/bin/aws
Install EKSCTL (weaveworks):
$ curl --silent --location "https://github.com/weaveworks/eksctl/releases/download/latest_release/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C ~/.local/bin && chmod 754 ~/.local/bin/eksctl
$ curl -o ~/.local/bin/kubectl --silent -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod 754 ~/.local/bin/kubectl
Not for Windows 10 (WSL) < 18917.
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" $ sudo apt update $ sudo apt install -y docker-ce
Show the status of docker (it should be enabled and running; if not then perform an ‘enable’ and ‘start’ (without the ‘| grep …’):
Not for Windows 10 (WSL).
$ systemctl status docker | grep -i "loaded\|active"
For Windows 10 (WSL (>=18917)).
Start and show the status of docker:
$ sudo service docker start $ sudo service docker status
It should come up in to a running state.
Note: This will stay running as a background task when WSL is closed, however when the host is rebooted/user session is logged out of, it will need to be launched again once opening WSL. This section will be updated on how to have this start when the host boots at a later time.
Install Docker Compose:
Not for Windows 10 (WSL) < 18917.
$ pip3 install docker-compose --upgrade --user && chmod 754 ~/.local/bin/docker-compose
Allow your user the right to execute docker without sudo:
$ sudo usermod -aG docker $USER $ logout
Log back in to a shell.
Create a work folder, inside your home directory:
$ mkdir -p dev/docker
For Windows 10 builds < 18917
Start -> Control Panel -> Programs and Features -> Turn Windows features on or off -> Select Hyper-V and Containers -> ok -> Restart now.
Install Docker Desktop -> Leave Defaults -> Log out and back in -> System Tray should show it Launching to a Run state.
Click System Tray -> Settings -> Shared Drives -> Select C -> Apply -> Type in your Windows user’s password to confirm -> close out of settings
Launch the WSL shell.
Create a work folder inside the Windows mount, symbolic link it within your home directory inside WSL and alias the .exe with the bare commands for docker/docker-compose and add for permanence:
$ mkdir -p /mnt/c/dev/docker $ ln -s /mnt/c/dev dev $ cat << EOF >> ~/.bashrc > > alias docker=docker.exe > alias docker-compose=docker-compose.exe > EOF $ alias docker=docker.exe $ alias docker-compose=docker-compose.exe
Install Azure CLI:
$ curl -sL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc.gpg 1>/dev/null $ echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/azure-cli.list $ sudo apt update $ sudo apt install -y azure-cli
Add .local/bin located in your HOME Directory in to your PATH for permanence:
$ cat << 'EOF' >> ~/.bashrc > > export PATH=$PATH:~/.local/bin > EOF $ export PATH=$PATH:~/.local/bin
Ensure version output is shown:
$ aws --version $ eksctl version $ kubectl version 2>/dev/null $ docker --version $ docker-compose --version $ az --version