Docker

DOCKER

  • INTRODUCTION

registry publique

https://hub.docker.com/

Orchestration

compose(single)/swarm(multi host)
http://mesos.apache.org/

IMAGES manipulation

registry

1
~# docker search ubuntu
~# docker pull ubuntu:latest
~# docker push jeba/ubuntu

tag (rename)

1
~# docker tag jeba/ubuntu jeba/plop

details

1
~# docker inspect jeba/ubuntu | jq

run

daemon

1
~# docker run -d

interactiv (stdin) -t terminal

1
~# docker run -it --name myubuntu ubuntu bash

–rm : rm on stop
–restart always

exit whithout kill

ctrl+p+q

re attach

1
~# docker container attach [ID]

execute

1
~# docker container exec -i -t [id] <command>

logs

1
~# docker container logs
~# docker container logs -f
~# docker container logs --tail 20

stop/kill

1
~# docker container stop    (sigterm)
~# docker container kill    (sigkill)

bind

1
~# docker container run -d -p 80:80 nginx
~# docker container exec -it nginx bash

commit (save)

1
~# docker container commit nginx mon_nginx:0.1

cleaning

1
~# docker container prune
~# docker image prune

dockerfile

https://docs.docker.com/engine/reference/builder/

FROM : image de base
RUN : modif du fs
COPY : cp from host to container
ADD : cp also from an URL
ENTRYPOINT : run at start of the container
CMD : run at start of the container (can be overridden)( parameters for ENTRYPOINT (if exist))
ENV : set env variables
ARG : set variables
USER : set user
WORKDIR : set pwd
VOLUME
EXPOSE
SHELL
LABEL
HEALTHCHECK
STOPSIGNAL

Build image from dockerfile

1
~# docker image build -t name:tag <context_path> ( -f <file>  if not "Dockerfile" )
1
~# cat Dockerfile
FROM ubuntu:latest
RUN apt-get update  && \
    apt-get install iputils-ping -y
VOLUME /var/www
ENTRYPOINT ["ping"]
CMD ["8.8.8.8"]

VOLUMES

1
~# docker container run -v /home/wam:/container/home/
~# docker container run -v /home/wam:/container/home/:ro

~# docker volume create voltest  (--driver local --opt type=btrfs --opt device=/dev/sda2)  (OR --driver local --opt type=tmpfs --opt device=tmpfs --opt o=size=100m,uid=1000)
~# ~# ls /var/lib/docker/volumes/voltest/
~# docker container run -v voltest:/container/home/

NETWORK

map to host (host:container)

1
~# docker container run -d -p 80:80 nginx

auto map (on random port)

1
~# docker container run -d -P nginx

EXPOSE in dockerfile is informative !

1
~# docker network create --driver bridge mynetwork
~# docker network create --driver bridge --subnet 10.0.0.1/24 mynetwork

no dns resolv on docker0 (auto create bridge)
dns resolv auto activate on manually created bridge

ex:

1
~# docker network create -d bridge --subnet 192.168.69.0/24 testnet
~# docker run -d -P --network=testnet jeba/nginx:0.1

ENV VAR

export DOCKER_TLS_VERIFY=”1”
export DOCKER_HOST=”tcp://127.0.0.1:2375”
export DOCKER_CERT_PATH=”/home/jerem/.docker/certs”
export DOCKER_MACHINE_NAME=”myDock”

TIPS

Info

1
~# docker system

Clean

1
~# docker system prune

Exit/detach

1
~# ctrl+p+q

rm all

1
~# docker rm -f $(docker ps -aq)

Expose dockerengine port and use insecure registry

1
~# cat /lib/systemd/system/docker.service
 ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
 ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 -insecure-registry myregistry:5000
 ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --tlsverify --tlscacert=/etc/docker/certs.d/ca.pem --tlscert=/etc/docker/certs.d/server-cert.pem --tlskey=/etc/docker/certs.d/server-key.pem

Create stack = overlay network and services (on swarm with compose)

1
~# docker stack deploy -c compose.yml mystack

Traefik

load balancer
https://docs.traefik.io/

Portainer

Webgui for swarm (or not)

http://portainer.io/

Kubernetes

https://kubeapps.com/

https://github.com/kubernetes/helm
http://helm.sh/

https://github.com/kubernetes/minikube

Rancher

http://rancher.com/

Others

https://www.nomadproject.io/
https://www.terraform.io/docs/providers/docker/index.html

List 10 last versions of an image on registry

curl ‘https://registry.hub.docker.com/v2/repositories/heketi/heketi/tags/'|jq ‘.”results”[][“name”]’