Docker Tips

Basic docker commands and tips.

Run docker with ports and volumes

docker run --name=elk -p 5601:5601 -p 9200:9200 -p 5000:5000 -v /Users/jaci/tmp/elk-data/:/var/lib/elasticsearch -it myelk:v0

docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name elk sebp/elk

Login to running container

docker exec -t 7cb0aff2732b sh
docker ps
docker stats
docker search
docker search centos
docker pull centos:centos6
docker run -i -t centos /bin/bash
docker images
docker cp /home/shared/develenv-31.sh 379028b15a63:/develenv-31.sh
docker commit -m "added develenv.sh" -a "jaci" 379028b15a63 ci-mobtel/develenv:v1
docker run -i -t ci-mobtel/develenv:v1 /bin/bash
docker run -i -t ci-mobtel/develenv:v1 /develenv-31.sh
docker build -t ci-mobtel/develenv:v2 .
docker tag 7466d247fc8f test/develenv:latest

Login to docker hub

docker login $username

Docker JOB variable

JOB=$(docker run -d ubuntu /bin/bash -c "while true; do echo ello debian; sleep 1; done")

docker stop $JOB
docker start $JOB
docker restart $JOB
docker kill $JOB

Stop & Remove JOB

docker stop $JOB
docker rm $JOB

UPDATE,CREATE, COMMIT docker images

docker pull $docker-image
docker run -i -t $dockerrepo/image /bin/bash

Update image as you whant and commit your changes

docker commit -m "added something" -a "newname" \$ImageID $dockerrepo/image:newversion

Push your changes

docker push dockeruser/$docker-image:newversion

Remove the image

docker rmi dockeruser/$docker-image:newversion

NETWORK PORT MAPPING

arbitrary port

docker run -d -P image/app python app.py

fixed port

docker run -d -p 80:5000 image/app python app.py

CONNECT CONTAINERS

Linking container between them

$ docker run -d --name dblink training/postgres 
$ docker run -d -P --name web --link dblink:dblink training/webapp python app.py

Checkout if it works through name web

ENVIRONMENT VARIABLES

docker run --rm --name web3 --link dblink:dblink training/webapp env
docker run -t -i --rm -link dblink:web training/webapp /bin/bash

DATA VOLUMES

docker run -it --name container-data -h CONTAINER -v /data debian /bin/bash
$ docker inspect container-data
        "Mounts": [
            {
                "Name": "7166ebad3038b416977ca8d566d9b7598a23af831ed7607c456f371bc264c46d",
                "Source": "/var/lib/docker/volumes/7166ebad3038b416977ca8d566d9b7598a23af831ed7607c456f371bc264c46d/_data",
                "Destination": "/data",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }

MOUNT DATA CONTAINER FROM OTHER CONTAINER

docker run -it -h NEWCONTAINER --volumes-from container-data debian /bin/bas

BACKUP A DATA VOLUME

create volume

docker create -v /testdb2 --name testdb2 training/postgres /bin/true 

backup volume

docker run --volumes-from testdb2 -v $(pwd):/backup ubuntu tar cvf /tmp/testdb2.tar /testdb2

Mixing options

$ docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -p 5045:5045 -p 5046:5046 -p 9600:9600 -v /Users/jaci/tmp/elk-data/:/var/lib/elasticsearch -it myelk:ml1g
docker run -p 5601:5601 -v /var/log/nginx:/logs/nginx -v /var/log/op_test:/logs/op_test -it myelk:0

REMOVE and update DOCKER & docker-compose

First remove any docker and/or compose installed on your host.

$ apt-get remove $(dpkg -l |grep docker | awk {'print $2'})

After that, follow these instructions.

$ apt-get -y install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ add-apt-repository    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) \
    stable"
$ apt-get update
$ dpkg -l |grep compose
$ apt-get remove docker-compose
$ apt-get install docker-ce
$ curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose

Openvpn with docker

I solved the same issue in my container, by using the “-privileged” flag when doing “docker run”, and then following these instructions from inside the container:

sudo mkdir -p /dev/net
sudo mknod /dev/net/tun c 10 200
sudo chmod 600 /dev/net/tun

Test whether the TUN/TAP device is available:

sudo cat /dev/net/tun 

If you receive the message cat:

/dev/net/tun: File descriptor in bad state 

your TUN/TAP device is ready for use.

If you receive the message cat:

/dev/net/tun: No such device the TUN/TAP 

device was not successfully created: contact VPSLink Support for assistance.

disable restart-always docker

docker update --restart=no my-container

Use the below to disable ALL auto-restarting (daemon) containers.

docker update --restart=no $(docker ps -a -q)