Docker
DOCKER
- INTRODUCTION
registry publique
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
Info1
~# docker system
Clean1
~# docker system prune
Exit/detach1
~# ctrl+p+q
rm all1
~# docker rm -f $(docker ps -aq)
Expose dockerengine port and use insecure registry1
~# 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)
Kubernetes
https://github.com/kubernetes/helm
http://helm.sh/
https://github.com/kubernetes/minikube
Rancher
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”]’