User Tools

Site Tools


docker:index

Docker

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@<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>

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

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:

$ 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

docker/index.txt · Last modified: 2024/03/18 15:06 by 127.0.0.1