User Tools

Site Tools


docker:index

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
docker:index [2018/01/09 10:25] oreldocker:index [2019/05/24 09:37] orel
Line 12: Line 12:
   $ sudo apt-get install dockerdocker-doc docker.io    $ sudo apt-get install dockerdocker-doc docker.io 
   $ sudo service docker start     $ 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 :  Un petit test rapide : 
Line 27: Line 29:
 === Commandes de base === === Commandes de base ===
  
-  $ docker run -i -t ubuntu /bin/bash +Démarrer un docker interactif (-i -t) en se basant sur une image officielle //debian// : 
-  $ docker run -i -t debian /bin/bash+ 
 +  $ 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   $ docker commit <xxxxxxxx> mydebian  # avec <xxxxxxxx> le container ID
-  $ docker commit <xxxxxxxx> mydebian+ 
 +On peut ensuite relancer son image //mydebian// 
   $ docker run -i -t mydebian /bin/bash   $ docker run -i -t mydebian /bin/bash
-  $ docker container ps -a 
-  $ docker start/stop <commit ID> 
  
 +Pour lister tous les conteneurs (actifs ou non) :
  
-//à compléter...//+  $ docker container ls -a 
 +   
 +Stopper un conteneur actif : 
  
-=== Pull & Push images ===+  $ 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 {{https://hub.docker.com/explore/ | Docker HUB}}. Les images docker publiques sont sur {{https://hub.docker.com/explore/ | Docker HUB}}.
Line 46: Line 77:
   $ docker image ls  # or docker images   $ docker image ls  # or docker images
   $ docker image rm <image ID>   $ docker image rm <image ID>
 +
 +
 +=== Tips ===
 +
 +Stop all containers and remove them...
 +
 +<code bash>
 +$ docker stop $(docker ps -a -q)
 +$ docker rm $(docker ps -a -q)
 +</code>
 +
 +To delete "none" images (or dangling / untagged) :
 +
 +<code bash>
 +$ docker rmi $(docker images --filter "dangling=true" --no-trunc -q)
 +</code>
 +
 +To remove all images (assuming all containers are removed):
 +
 +<code bash>
 +$ docker rmi $(docker images -a -q) --force
 +</code>
 +
 +
 +And the easiest way :
 +
 +<code bash>
 +$ docker image prune
 +</code>
  
 === Dockerfile === === Dockerfile ===
Line 60: Line 120:
      
      
 +Given a Dockerfile, you can build your own Docker image and push it on
 + [DockerHub](https://hub.docker.com/).
 +
 +<code bash>
 +# 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
 +</code>
 +
 +To pull this docker image:
 +
 +<code bash>
 +$ docker pull orel33/mydebian:latest
 +</code>
 +
 +
 +=== 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
 +
 +
 +<code bash>
 +# 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
 +
 +</code>
 +
 +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).
 +
 +<code bash>
 +$ 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
 +
 +</code>
 +  
 +=== Docker networking ===
 +
 +<code bash>
 +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
 +</code>
 +
 +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 === === Misc ===
    
   * http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/   * 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://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/
  
docker/index.txt · Last modified: 2024/03/18 15:06 by 127.0.0.1