This is an old revision of the document!
Docker
Un peu de biblio pour commençer :
Installation sur une Debian 8
$ sudo apt-get install dockerdocker-doc docker.io $ sudo service docker start
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@<xxxxxxxx>:/home/docker#
Une fois la session fermée, on peut sauvegarder les modifications effectuées dans l'image
$ docker commit <xxxxxxxx> mydebian # avec <xxxxxxxx> 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 <container ID>
Pour rédémmarer un conteneur stoppé et récupérer la session interactive (attach) :
$ docker container start <container ID> $ docker container attach <container ID>
Pour supprimer tous les conteneurs :
$ docker container rm $(docker container ls -a -q)
Les images
Exporter un container en tgz :
$ docker export <container ID> > mydebian.tgz
Importer une image tgz :
docker import - mydebian < mydebian.tgz
Les images docker publiques sont sur Docker HUB.
$ docker search debian $ docker pull debian $ docker image ls # or docker images $ docker image rm <image ID>
Dockerfile
- Dockerfile
FROM debian:latest MAINTAINER Aurelien Esnard <aurelien.esnard@labri.fr> 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:
Docket Volume
# 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