Un container c'est donc
Aussi proche que possible d'une installation linux standard mais qui s'exécute sur le kernel hÎte
Dockerfile
décrit la construction d'une
image
process
et s'arrĂȘte
avec lui
writable
read-only
Taille de l'image (virtual size
)
Stockage dans /var/lib/docker/image
et /var/lib/docker/containers
Commande | ça fait quoi? |
---|---|
docker image build | Construit une image Ă partir d'un Dockerfile |
docker container create IMAGE | Instancie un container Ă partir d'une image |
docker container start / docker container stop | Démarre/ArrÚte un container |
docker container run IMAGE | Instancie un container à partir d'une image, et le démarre |
Commande | ça fait quoi? |
---|---|
docker container logs CONTAINER | Affiche les logs d'un container (stdout+stderr) |
docker container exec CONTAINER CMD | Exécute une commande dans un container existant |
docker container diff CONTAINER | Affiche les modifications du filesystem du container |
docker container update [OPTIONS] CONTAINER | Modifie les options d'un container existant (mem/cpu/restart...) |
Commandes de management
Commande | ça fait quoi? |
---|---|
docker image ls | Liste les images disponibles |
docker container ls [-a] | Liste les containers running (-a : tous les containers) |
docker container rm CONTAINER | Supprime un container |
docker image rm IMAGE | Supprime une image |
Commandes de management
Commande | ça fait quoi? |
---|---|
docker image pull IMAGE | Télécharge une image depuis un registry |
docker image push IMAGE | Envoie une image dans un registry |
Commandes de monitoring
Commande | ça fait quoi? |
---|---|
docker [container|image] inspect [ID] | Affiche les infos d'une image ou d'un container |
docker image history [IMG] | Affiche les layers d'une image |
docker events | Affiche les events (création/suppressions...) |
docker stats [CONTAINER] | Affiche les stats d'un container |
Démarre un container : RUN = CREATE + START
# Nommer un container
$ docker container run --name monServer nginx # Nomme le container
# Exécute un nouveau container et y attache le terminal
$ docker container run -it ubuntu
# Lancer un container en arriĂšre plan (detached)
$ docker container run -d nginx
# Expose les ports d'un container en automatique (ports aléatoires)
$ docker container run -P nginx
# Exposer un port particulier vers un port de l'hĂŽte
$ docker container run -p 9876:80 nginx
$ docker container run -p 7894:80 -p 1234:443 nginx
# Monte un fichier ou répertoire local dans le container (volume)
$ docker container run -v test.conf:/etc/nginx/nginx.conf -p 4561:80 nginx
# Démarre un container et exécute la commande donnée
# (surcharge la commande par défaut)
$ docker container run nginx cat /etc/nginx/nginx.conf
Exécute un processus dans un container 'running'
# Démarre un shell interactif dans un container
$ docker container exec -it nginx bash
# liste les variables d'environnement d'un container
$ docker container exec nginx printenv
# Affiche le contenu d'un fichier dans le container
$ docker container exec nginx cat /etc/nginx/nginx.conf
Commandes principales
Instruction | ça fait quoi? | exemple |
---|---|---|
FROM | Image parente | FROM ubuntu |
RUN | Exécute une commande | RUN apt-get install maven |
COPY | Copie des fichiers dans l'image | COPY myApp.jar /app |
CMD | Indique la commande qui sera exécutée par les conteneurs | CMD ["/bin/echo", "hello world"] |
Commandes principales
Instruction | ça fait quoi? | exemple |
---|---|---|
ENV | Variable d'environnement | ENV MVN_HOME=/app/maven |
LABEL | Ajoute une méta-donnée à l'image | Label maintainer="julien@codeka.io" |
EXPOSE | Marque un port Ă exposer | EXPOSE 8080 |
VOLUME | Marque un répertoire comme persistant | VOLUME /app/data |
Commandes principales
Instruction | ça fait quoi? | exemple |
---|---|---|
WORKDIR | Modifie le répertoire courant | WORKDIR /opt |
HEALTHCHECK | Permet de paramétrer le healthcheck des conteneurs | HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ |
Exemple de Dockerfile simple:
FROM ubuntu:latest # image parente
ENV MESSAGE="Julien"
CMD echo Hello $MESSAGE # commande à exécuter au lancement d'un container
$ docker image build -t codekaio/helloworld .
docker image build permet de construire une image.
-t permet de lui donner un tag.
. indique le répertoire de construction.
$ docker build -t /helloworld .
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM ubuntu
latest: Pulling from library/ubuntu
d5c6f90da05d: Pull complete
1300883d87d5: Pull complete
c220aa3cfc1b: Pull complete
2e9398f099dc: Pull complete
dc27a084064f: Pull complete
Digest: sha256:34471448724419596ca4e890496d375801de21b0e67b81a77fd6155ce001edad
Status: Downloaded newer image for ubuntu:latest
---> ccc7a11d65b1
Step 2/3 : ENV MESSAGE Julien
---> Running in 41b69f00b536
---> d74968af6efa
Removing intermediate container 41b69f00b536
Step 3/3 : CMD echo Hello $MESSAGE
---> Running in 1f52994bd3f4
---> 8ce84b0a2112
Removing intermediate container 1f52994bd3f4
Successfully built 8ce84b0a2112
Successfully tagged codekaio/helloworld:latest
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
codekaio/helloworld latest 8ce84b0a2112 About a minute ago 120 MB
ubuntu latest ccc7a11d65b1 2 weeks ago 120 MB
$ docker container run codekaio/helloworld
Hello Julien !
FROM node:latest # image parente
RUN mkdir /app # Création du répertoire
COPY . /app # Copie de tout le contexte dans le répertoire
WORKDIR /app # On se positionne dans le répertoire
RUN npm install -P # Installation des dépendances applicatives
CMD ["npm", "run"] # Commande de lancement de l'application
Permet d'indiquer le contexte du build (quels fichiers sont disponible Ă la copie)
Réduction de la taille de l'image finale
tests/
.idea/
.git/
node_modules/
target/
.editorconfig
.eslintrc
README.md
Créer une instance et obtenir l'accÚs à un shell :
$ docker version
$ docker pull hello-world:latest
$ docker container run hello-world
$ docker ps -a & docker rm <id> & docker rmi hello-world
$ docker pull nginx
$ docker container run -p 8080:80 nginx
$ git clone https://github.com/spring-guides/gs-spring-boot.git
$ docker pull maven:alpine
FROM maven:alpine
RUN mkdir /app
COPY . /app
WORKDIR /app
RUN mvn install
CMD ["mvn", "spring-boot:run"]
$ docker build -t app-spring-boot .
$ docker create --name instance -p 7777:8080 app-spring-boot
$ docker container start instance
$ docker logs instance
Vous avez exécuté votre premiÚre application Spring dans un conteneur !