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
docker:index [2018/01/08 18:35] oreldocker:index [2024/03/18 15:06] (current) – external edit 127.0.0.1
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  
-  docker run -i -t qemu:debian /bin/bash+ 
 +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/debianLa 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 :  
 + 
 +  $ 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 :
  
-=== Pull & Push images ===+  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:
      
      
-=== GUI ===+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 ===
    
   * 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://hub.docker.com/r/dorowu/ubuntu-desktop-lxde-vnc/
  
docker/index.txt · Last modified: 2024/03/18 15:06 by 127.0.0.1