Installing Docker
sudo apt-get install -y docker.io
systemctl start docker
Managing Containers
- To stop a container: sudo docker stop <contianer_id/name>
- To remove a container: sudo docker rm <contianer_id/name>
- To restart a container: sudo docker restart <contianer_id/name>
- To access a container bash: sudo docker exec -it <contianer_id/name> bash
Setting up MySQL using Docker
- Start a docker container mapping a location (e.g. /home/autolab/AutolabJS/sqldata) for storing MySQL data:sudo docker run --name autolab-db --net=host -v /home/autolab/AutolabJS/sqldata:/var/lib/mysql -v /etc/localtime:/etc/localtime:ro -e MYSQL_ROOT_PASSWORD=your_password_here -d mysql:latest
- sudo docker exec -it autolab-db bashto enter bash of mysql
- mysql -u root -pand enter password.
- Enter create database Autolabin the mysql console.
- Exit from container.
Setting up GitLab using Docker
- Change SSH port of the machine to 2222: sudo vi /etc/ssh/sshd_config
# What ports, IPs and protocols we listen for
Port 22
Change this to 2222
 Listen to the new port by restarting SSH - /etc/init.d/ssh restart
 Download and start GitLab Docker image. It will be started on port 80.
sudo docker run --detach --hostname gitlab.example.com --publish 443:443 --publish 80:80 --publish 22:22 --name gitlab --restart always --volume /srv/gitlab/config:/etc/gitlab --volume /srv/gitlab/logs:/var/log/gitlab --volume /srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:latest
 Visit localhost in the browser.
 Reset 'root' password of GitLab as follows:
http://docs.gitlab.com/ce/security/reset_root_password.html
 In GitLab user as root with an empty repository as test.
 Create a GitLab user as lab_author.
 Create GitLab user for students as 2013B2A7866G and other ID numbers.
 To redirect HTTP requests to HTTPS replace the gitlab.rb,localhost.key,localhost.crt files in the main directory in the container using -      
sudo docker cp ./gitlab.rb gitlab:/etc/gitlab/gitlab.rb     
sudo docker exec -it gitlab mkdir /etc/gitlab/ssl     
sudo docker cp ./localhost.key gitlab:/etc/gitlab/ssl/     
sudo docker cp ./localhost.crt gitlab:/etc/gitlab/ssl/       
Deploying Load Balancer
- Clone this repo: https://github.com/AutolabJS/AutolabJS
- Change the directory to load_balancer and build load balancer image - sudo docker build -t load_balancer .
- To start the container, specify the full path of the directory to store the submissions. It will be mapped to /load_balancer/submissionsof the container. Example:sudo docker run --name load_balancer --net=host -v /home/autolab/AutolabJS/load_balancer/submissions:/load_balancer/submissions -v /etc/localtime:/etc/localtime:ro -d -i -t load_balancer
- To access the bash shell of the container sudo docker exec -it load_balancer bash
- Generate SSH key for GitLab: ssh-keygen -t rsa -C "admin@example.com"This command will prompt you for a location and filename to store the key pair and for a password. When prompted for the location and filename, just press enter to use the default.
- Add SSH Key to GitLab rootuser by doing the following:cat ~/.ssh/id_rsa.pubCopy-paste the key to the 'My SSH Keys' section under the 'SSH' tab in root profile at GitLab (Profile Settings-->SSH Keys). Please copy the complete key starting with ssh-rsa and ending with your username and host.
- Define parameters in nodes_data_config.json:cd load_balancervi nodes_data_config.json
- Clone dummy repo for ssh init - git clone git@<gitlab_ip_without_port>:root/test.git. Make sure the GitLab IP in the clone command and the config file is identical. (eg. localhost at both places). This is extremely important.
- Run the server: nohup nodejs load_balancer.js &
- Press enter and exit.
Deploying Main Server
- Change the directory to main_server and build main server image - sudo docker build -t main_server ..
- sudo docker run --net=host --name main_server -v /etc/localtime:/etc/localtime:ro -d -i -t main_serverwill give a container id.
- To access the bash shell of the container sudo docker exec -it main_server bash
- Define parameters in conf.jsonandlabs.json:cd main_servervi conf.jsonvi labs.json
- Run the server: nohup nodejs main_server.js &
- Press enter and exit
Deploying Execution Node
- Build execution node image - Change the directory to execution_node and build main server image - sudo docker build -t execution .
- sudo docker run --net=host -v /etc/localtime:/etc/localtime:ro -d -i -t executionwill give a container id.
- To access the bash shell of the container sudo docker exec -it <container id> bash
- Generate SSH key: ssh-keygen -t rsa -C "admin@example.com"This command will prompt you for a location and filename to store the key pair and for a password. When prompted for the location and filename, just press enter to use the default.
- Add SSH Key to GitLab rootuser -cat ~/.ssh/id_rsa.pubCopy-paste the key to the 'My SSH Keys' section under the 'SSH' tab in root profile at GitLab (Profile Settings-->SSH Keys). Please copy the complete key starting with ssh-rsa and ending with your username and host.
- Clone dummy repo for ssh init - git clone git@<gitlab_ip_without_port>:root/test.git
- Define parameters in conf.jsonandscores.json:cd execution_nodesvi conf.jsonvi scores.json
- Before proceeding further, make sure the load balancer is running.
- Run the server: nohup nodejs execute_node.js &
- Press enter and exit
- Now add the container Port and IP in nodes_data_conf.jsonfile in the load balancer.
- Repeat for upto 5 containers.
Checking Deployment:
- GitLab should be accessible on http://localhost
- Visit https://localhost:<main_server_port>/statusto see the status of all microservices.
References
- https://hub.docker.com/_/mysql/
- http://docs.gitlab.com/omnibus/docker/
- https://docs.docker.com/engine/installation/linux/ubuntulinux/
Generating HTTPS keys and certificates using openssl:
- $ openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem
- $ openssl rsa -in key.pem -out key.pem