====== Docker ====== Un peu de biblio pour commençer : * https://doc.ubuntu-fr.org/docker * https://www.it-connect.fr/debuter-avec-docker-et-les-containers-sous-debian-8/ * https://www.wanadev.fr/24-tuto-docker-demarrer-docker-partie-2/ * https://docs.docker.com === Installation sur une Debian 8 === $ sudo apt-get install dockerdocker-doc docker.io $ sudo service docker start Il faut mieux suivre la procédure d'installation de **Docker CE** sur le site de Docker : https://docs.docker.com/install/linux/docker-ce/debian/ La version packagé dans Debian a des limitations notamment sur le montage des volumes en RW ! Un petit test rapide : $ sudo docker run hello-world Pour éviter de taper "sudo" : $ sudo usermod -aG docker $USER Un peu d'aide : $ man docker run === Commandes de base === Démarrer un docker interactif (-i -t) en se basant sur une image officielle //debian// : $ docker search debian $ docker run -i -t debian bash root@:/home/docker# Une fois la session fermée, on peut sauvegarder les modifications effectuées dans l'image $ docker commit mydebian # avec le container ID On peut ensuite relancer son image //mydebian// $ docker run -i -t mydebian /bin/bash Pour lister tous les conteneurs (actifs ou non) : $ docker container ls -a Stopper un conteneur actif : $ docker container stop Pour rédémmarer un conteneur stoppé et récupérer la session interactive (attach) : $ docker container start $ docker container attach Pour supprimer tous les conteneurs : $ docker container rm $(docker container ls -a -q) === Les images === Exporter un container en tgz : $ docker export > mydebian.tgz Importer une image tgz : docker import - mydebian < mydebian.tgz Les images docker publiques sont sur {{https://hub.docker.com/explore/ | Docker HUB}}. $ docker search debian $ docker pull debian $ docker image ls # or docker images $ docker image rm === Tips === Stop all containers and remove them... $ docker stop $(docker ps -a -q) $ docker rm $(docker ps -a -q) To delete "none" images (or dangling / untagged) : $ docker rmi $(docker images --filter "dangling=true" --no-trunc -q) To remove all images (assuming all containers are removed): $ docker rmi $(docker images -a -q) --force And the easiest way : $ docker image prune === Dockerfile === FROM debian:latest MAINTAINER Aurelien Esnard RUN apt-get update && apt-get install -y qemu WORKDIR /home/docker $ docker build --tag="qemu:debian" . $ docker run -i -t qemu:debian /bin/bash Given a Dockerfile, you can build your own Docker image and push it on [DockerHub](https://hub.docker.com/). # build image $ docker build -t "orel33/mydebian:latest" . # test it $ docker run -i -t orel33/mydebian /bin/bash # login (need to be registered) $ docker login # push image $ docker push orel33/mydebian:latest To pull this docker image: $ docker pull orel33/mydebian:latest === Docker Volume === In order to share data between two dockers, use data volume... as explained here : https://www.digitalocean.com/community/tutorials/how-to-share-data-between-docker-containers # create data volume container $ docker run -it -v myvol:/data --name container1 orel33/mydebian bash root@4c3396f80dd3:/home/docker# touch /data/hello root@4c3396f80dd3:/home/docker# exit # see my container $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3345f3f32bdd orel33/mydebian "bash" 21 seconds ago Exited (0) 5 seconds ago container1 # see my volume $ docker volume ls DRIVER VOLUME NAME local myvol # retrieve your data within container1 docker restart container1 docker exec container1 ls /data # or docker attach container1 # where are stored my data? $ docker inspect container1 | grep /var/lib/docker/volumes "Source": "/var/lib/docker/volumes/myvol/_data", $ sudo ls /var/lib/docker/volumes/myvol/_data hello # mount the data volume from container1 in container2 docker run -it --volumes-from container1 --name container2 orel33/mydebian bash # remove containers & volumes $ docker rm container1 container2 # or docker container prune $ docker volume rm myvol # or docker volume prune More: https://rominirani.com/docker-tutorial-series-part-7-data-volumes-93073a1b5b72 And more: https://docs.docker.com/storage/volumes/ === Docker Inside Docker === You cannot mount (-v) a directory from first docker into the inner docker... Instead, use **docker cp** to copy files... However, you can forward all mounted files from host system, as for instance the docker socket and binary (/var/run/docker.sock & /usr/bin/docker). $ docker run -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -i -t orel33/mydebian bash ### inside docker ### $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE orel33/mydebian latest 173224cad4d8 27 hours ago 1.79GB # create a deached container # $ docker run -d --name mycontainer orel33/mydebian $ docker run -it --name container1 orel33/mydebian bash $ docker restart container1 && docker attach container1 # copy files inside $ touch hello $ docker cp hello container1:. $ docker exec container1 ls hello ### docker inside docker ### $ docker attach container1 $ ls hello === Docker networking === docker network create mynet docker run --name host1 --network mynet -it orel33/mydebian # 172.19.0.1/16 docker run --name host2 --network mynet -it orel33/mydebian # 172.19.0.2/16 docker run --name host3 --network mynet -it orel33/mydebian # 172.19.0.3/16 docker run --name host4 --network mynet -it orel33/mydebian # 172.19.0.4/16 TODO: Regarder toutes les options... === Compose === Todo... === Docker Windows ==== Sous Windows 10 (64 bit), suivre la procédure d'installation de **Docker Desktop** : https://hub.docker.com/editions/community/docker-ce-desktop-windows Il existe de type de containers qui peuvent s'exécuter sous Windows : les containers Linux (nécessite Hyper-V) et les containers Windows (natifs) === Misc === * http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/ * https://www.packtpub.com/mapt/book/virtualization_and_cloud/9781783984862/2/ch02lvl1sec28/accessing-the-host-device-inside-the-container * https://hub.docker.com/r/dorowu/ubuntu-desktop-lxde-vnc/