Wiki World

Docker

Docker notes.

First steps

Run container (first time, download and run)

docker run <options> <image>

Start container

docker start <name or ID>

Stop container

docker stop <name or ID>

List containers

docker ps [-a]

Remove container

docker rm <name or ID> [-v]

Search for image on hub

docker search <name>

Download image only

docker pull <image>

Example of running container

docker run -d --name <name> -p <host port:container port> <image>

Another example

docker run -d --name nginx -p 80:80 -v $(pwd):/usr/local/nginx/html nginx

Autostart

is built-in from docker v1.11 and can easily be changed with

docker update --restart=<no|on-failure|unless-stopped|always> <container>

Use docker inspect to check the “RestartPolicy” key for the current autostart setting

docker inspect <container> | grep -A 3 "RestartPolicy"

this lists the line where “RestartPolicy” is found and the following three lines.

Getting a terminal inside a container

Method 1

docker inspect <container> | grep Pid
nsenter -m -u -n -p -i -t <Pid from above command> /bin/bash

Method 2

docker-enter <container>

Method 3

docker exec -it <container> /bin/bash

Use exit to leave container, while container is still running nano editor

Making the nano editor work in a container.

 Error:    "Error opening terminal:unknown"
 Solution: run container with -t (TTY option)
           set environment variable $TERM: export TERM=xterm

Alternatively add to the docker file

 ENV TERM xterm

Application examples

These are real examples I use or have used

Gitlab

Source: http://docs.gitlab.com/omnibus/docker/README.html🔗

docker image pull gitlab/gitlab-ce

docker container run -d -h git.azura.ld -p 10.60.1.54:443:443 -p 10.60.1.54:80:80 -p 10.60.1.54:22:22 --name gitlab --restart always \
    -v /data/docker_data/gitlab/config:/etc/gitlab \
    -v /data/docker_data/gitlab/logs:/var/log/gitlab \
    -v /data/docker_data/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

Additional steps

external_url "https://git.azura.ld"
nginx['redirect_http_to_https'] = true

restart docker container

docker restart gitlab

change gitlab.rb:

Email settings

Mumble server

Source: https://github.com/dcshock/docker-mumble-server🔗

docker pull dcshock/docker-mumble-server

docker volume create --driver local --name mumble-db --opt type=none --opt device=/data/docker_data/mumble-server/db --opt o=uid=root,gid=root,bind

docker container run -d -p 64738:64738 --name mumble --restart=unless-stopped -v mumble-db:/var/lib/mumble-server dcshock/docker-mumble-server
sudo su - root

Change super user password (when in SSH session)

murmurd -supw <password>
Note
It was necessary to create a volume for the db to enable the container to access it else I got an access denied!

Owncloud

docker pull owncloud

docker run -d -p 83:80 -v /var/www/html --name owncloud owncloud

Owncloud is now accessible on <host>:83 use that to configure the server

Make a vhost using nginx and proxy forward port 443 to 83 on the container. Nginx on the host is now handling SSL, so no SSL is necessary on the container.

Owncloud must have the hostname in the “trusted_domains” array else a security error is given on login.

For heightened security restrict access to the container with iptables.

MailCatcher

MailCatcher is an application that acts like a mail server and receives and displays all messages in a webpage.

It’s especially interesting in a development environment in that it always receives the message and you never accidentally send messages to thousands of real people by mistake.

docker pull schickling/mailcatcher

docker run -d -p 1080:1080 -p 1025:1025 --name mailcatcher schickling/mailcatcher

The web interface is now accessible on localhost port 1080. You should point your (PHP) script to the server localhost with the port 1025. No login or password is necessary.

Plex Media Server

docker image pull plexinc/pms-docker:latest

Create volumes

docker volume create --driver local --name plex_config --opt type=none --opt device=/data/docker_data/plexmediaserver --opt o=uid=root,gid=root,bind
docker volume create --driver local --name plex_data --opt type=none --opt device=/data/media --opt o=uid=root,gid=root,bind,readonly

Run container

docker container run -d --name plex -p 10.60.1.51:32400:32400/tcp \
 -e TZ="Europe/Copenhagen" -e PLEX_CLAIM="claim-i9pquDSQQyQERMu2JUDD" \
 -e ADVERTISE_IP="http://10.60.1.51:32400/" -h azura.ld \
 -v plex_config:/config \
 -v plex_data:/data/media \
 --restart=unless-stopped plexinc/pms-docker:latest
Note
You should of course change the PLEX_CLAIM variable as it’s only working for 4 minutes. (get a new from https://www.plex.tv/claim🔗 )

Network ports and their uses:

Emby Media Server

docker image pull emby/embyserver:latest

Create volumes

docker volume create --driver local --name emby_config --opt type=none --opt device=/data/docker_data/embymediaserver/config --opt o=uid=root,gid=root,bind
docker volume create --driver local --name plex_data --opt type=none --opt device=/data/media --opt o=uid=root,gid=root,bind,readonly
Info
uses the same data directory as plex.

Run container

docker container run -d --name emby \
 -v emby_config:/config \
 -v plex_data:/mnt/mediafolder \
 --device /dev/dri:/dev/dri \
 -p 192.168.35.3:8096:8096 \
 -p 192.168.35.3:8920:8920 \
 -e UID=1000 \
 -e GID=1000 \
 -e GIDLIST=39 \
 --restart=unless-stopped emby/embyserver:latest