.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
.. Copyright 2018 Huawei Technologies Co., Ltd.

Install Docker
===============

Make sure curl is installed on the Ubuntu VM:

.. code-block:: bash

	sudo apt update
	sudo apt install curl

If you are behind a corporate firewall (replace "proxyhost:port" with your actual proxy information)
	https_proxy="https://*proxyhost:port*" curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add -
	
Otherwise:
	curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add -
Expected Response:
	OK
Add the docker package repository:
	sudo apt-add-repository "deb https://apt.dockerproject.org/repo ubuntu-xenial main"
	
Install packages:

.. code-block:: bash

    sudo apt update
    sudo apt-cache policy docker-engine
	sudo apt install docker-engine
	sudo apt install docker-compose
	
If you are behind a corporate firewall, you will need to configure proxy settings for docker so that images may be obtained from internet repositories.  In the commands shown here, replace *"proxyhost:port"*, *"yourdomain1.com"*, and *"yourdomain2.com"* with appropriate values.
	
    Make the docker configuration directory:

.. code-block:: bash
	
        sudo mkdir -p /etc/systemd/system/docker.service.d
	
    Edit (create) this file:

.. code-block:: bash
	
		sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf
	
    Add these lines:

        [Service]
        
		Environment="HTTP_PROXY=https://*proxyhost:port*"
        
		Environment="HTTPS_PROXY=https://*proxyhost:port*"
        
		Environment="NO_PROXY=localhost,127.0.0.1,.yourdomain1.com,.yourdomain2.com"
	
    Restart docker:

.. code-block:: bash
	
        sudo systemctl daemon-reload
        sudo systemctl restart docker

Add yourself to the docker user group (replace "userid" with your user ID):

.. code-block:: bash

    sudo usermod -a -G docker *userid*

Log out and log back in so that the user group change will takeeffect.

Verify that you can connect to docker as yourself (i.e. not as root):

.. code-block:: bash

    docker ps

Verify that you can download and run the hello-world container

.. code-block:: bash

    docker run hello-world
	
.. image:: images/Docker_install_1.png