.. 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