Docker¶
The following document briefly describes:
the installation of Docker CE
a solution for utilizing Open3D with GUI/visualization under Docker
the use of Docker images for testing Open3D without a GUI
Ubuntu installation¶
Warning
For the latest and most accurate installation guide see the official documentation at Docker-CE install.
The prefered installation mode is to use the official Docker repository.
Install dependencies:
$ sudo apt update && \
sudo apt upgrade -y && \
sudo apt install -y \
curl \
apt-transport-https \
ca-certificates \
software-properties-common
Add Docker’s official GPG key:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Manually verify that the key is 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
:
$ sudo apt-key fingerprint 0EBFCD88
Set up the stable repository:
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
$ sudo apt update
Install the latest version:
$ sudo apt install -y docker-ce
Verify the installation:
$ sudo docker run hello-world
The verification will timeout if running behind a proxy:
Unable to find image 'hello-world:latest' locally
In order to address this problem see the Docker daemon proxy settings.
Optional steps
Docker Post-installation steps for Linux
Add user to “docker” group
This will eliminate the need to use sudo in order to run docker commands.
$ sudo usermod -aG docker <user_name>
Warning
Proxy settings¶
Docker daemon¶
In order to solve the hello-world issue above follow the Docker proxy settings.
Create a systemd drop-in directory for the docker service:
$ sudo mkdir -p /etc/systemd/system/docker.service.d
$ sudo touch /etc/systemd/system/docker.service.d/http-proxy.conf
$ sudo ne /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=server:port" "NO_PROXY=localhost;127.0.0.1"
$ sudo touch /etc/systemd/system/docker.service.d/https-proxy.conf
$ sudo ne /etc/systemd/system/docker.service.d/https-proxy.conf
[Service]
Environment="HTTPS_PROXY=server:port/" "NO_PROXY=localhost;127.0.0.1"
Flush changes and restart Docker:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
Verify that the configuration has been loaded:
$ systemctl show --property=Environment docker
Docker container¶
The docker container proxy settings must be set in order to enable features like apt install in your container. This can be accomplished either in the Dockerfile itself or by using a global mechanism like chameleonsocks.
Dockerfile
Take a look at the first few lines of the example Dockerfile
:
3 4 5 6 7 8 9 10 | # ENV http_proxy ""
# ENV HTTP_PROXY ""
# ENV https_proxy ""
# ENV HTTPS_PROXY ""
# ENV ftp_proxy ""
# ENV socks_proxy ""
# ENV no_proxy ""
# ENV ALL_PROXY ""
|
Uncommenting and settings these environment variables does the job.
chameleonsocks
Another way to set the proxy settings of the container is to use chameleonsocks which is a mechanism to redirect SOCKS or HTTP proxies.
chameleonsocks has the advantage that the Dockerfile doesn’t need changing based on network configuration circumstances. However it can conflict with other proxy settings on your host system. When that happens stopping the chameleonsocks container addresses the conflicts.
$ cd ~
$ mkdir chameleonsocks
$ cd chameleonsocks
$ https_proxy=<https://server:port \
wget https://raw.githubusercontent.com/crops/chameleonsocks/master/chameleonsocks.sh && \
chmod 755 chameleonsocks.sh
In order to properly set the proxy settings edit the proxy settings inside the chameleonsocks.sh file:
# This is the domain name or ip address of your proxy server. It must
# be defined or nothing will work. Do not specify a protocol type
# such as http:// or https://.
: ${PROXY:=server}
# This is the port number of your proxy server
: ${PORT:=port}
# Possible PROXY_TYPE values: socks4, socks5, http-connect, http-relay
: ${PROXY_TYPE:=socks5}
# a file containing local company specific exceptions
: ${EXCEPTIONS:=chameleon.exceptions}
# Autoproxy url, this is often something like
# http://autoproxy.server.com or http://wpad.server.com/wpad.out
# ONLY additional exceptions are pulled from here. not the proxy
: ${PAC_URL=http://wpad.server.com/wpad.dat}
Create the chameleon.exceptions file:
$ touch chameleon.exceptions
$ ne chameleon.exceptions
server.com
.server.com
localhost
127.0.0.1
Install chameleonsocks:
$ ./chameleonsocks.sh --install
NOTE: the chameleonsocks.exceptions file disappears after the install step above.
DNS servers¶
In order to specify DNS servers for docker
edit /etc/docker/daemon.json
on the host:
$ sudo ne /etc/docker/daemon.json
{
"dns": ["xxx.xxx.xxx.xxx", "xxx.xxx.xxx.xxx"]
}