Aller au contenu

docker

concept

  • image: template en lecture seul pouvant créer un container
  • conteneur: instance d'une image

command

  • telecharger une image: docker pull debian:$tag
  • crer et lancer un container en tty docker run -it bash
  • arreter container: docker stop
  • démarrer containeur: docker start
  • lister tous les conteneur docker ps -a
  • delete conteneur: `docker rm 2cdc
  • run a commad in container: docker exec
  • voir stdout d'un container: docker logs
  • créer et lancer un conteneur docker run -d --name node-app -p 3000:3000 -v $(pwd):/app node:0.12.4 node /app/server.js
  • -d lance en tant que daemon
  • --name permet de nommer le conteneur
  • -p associe le port au port de l'hote (1er port pour l'hote et second pour le conteneur)
    • -v $(pwd):/app : cette option permet de partager un dossier avec votre conteneur, ici, nous partageons le dossier courant (où se trouve notre fichier server.js) avec le dossier /app dans le conteneur (attention si vous êtes sur Mac ou Windows uniquement votre 'home' est partagé).
    • node:0.12.4 : l'image Docker que vous voulez utiliser.
    • node /app/server.js : la commande à exécuter dans le conteneur.

dockerfile

#FROM permet de définir notre image de base, vous pouvez l'utiliser seulement une fois dans un Dockerfile.
FROM debian 


#RUN permet d'exécuter une commande à l'intérieur de votre image comme si vous étiez devant un shell unix.
RUN apt-get update \
&& apt-get install -y curl xz-utils \
&& rm -rf /var/lib/apt/lists/*

RUN curl -LO "https://nodejs.org/dist/v12.2.0/node-v12.2.0-linux-x64.tar.xz" \
&& tar -xJf node-v12.2.0-linux-x64.tar.xz -C /usr/local --strip-components=1 \
&& rm node-v12.2.0-linux-x64.tar.xz
#copy permet d'ajouter des fichiers locaux ou distants à l'intérieur de votre image, il est le plus souvent utilisé pour importer les sources de votre projet ou des fichiers de configuration.
COPY package.json /app/

#WORKDIR permet de changer le répertoire courant de votre image, toutes les commandes qui suivront seront exécutées à partir de ce répertoire.
WORKDIR /app
RUN npm install
#ajoute le répertoire a projet a l'image
COPY . /app/
#ADD permet de rcupérer des source depuis un url ou d'extraire une archive
#EXPOSE et VOLUME permettent respectivement d'indiquer quel port et quel dossier nous souhaitons partager.
EXPOSE 3000

VOLUME /app/log

#USER permet de selectionner kl'utilisateur qui lancera le service
#ENTRYPOINT ["executable", "param1", "param2"] sets the command and parameters that will be executed first when a container is run.

#instruction qui doit s'exécuter au lancement du conteneur
CMD node server.js

le .dockerignore permet comme un .gitignore de ne pas inclure certain fichiers dans l'image Docker,

créer image

  • lancer la build du fichier: docker build -t nomducontainer:tag .
  • -t permet de nommer l'image docker pour ajouter un tag il faut utiliser docker tag

docker compose

permet de gérer plusieur container ensemble (IaS) exemple de fichier de confid en yaml:

version: 3

services:
  #1 container postgress avec son image et ces variable d'environement
  postgres:
    image: postgres:10
    environment:
      POSTGRES_USER: rails_user
      POSTGRES_PASSWORD: rails_password
      POSTGRES_DB: rails_db

  redis:
    image: redis:3.2-alpine

  rails:
    #lance une build en fontion du dockerfile locale
    build: .
    #n'est construit que lorsque les dependance dont ok
    #depends_on crée un pointage au sein du réseau créé par Docker entre conteneur
    depends_on:
      - postgres
      - redis
    environment:
      DATABASE_URL: 'postgres://rails_user:rails_password@postgres:5432/rails_db'
      REDIS_HOST: 'redis:6379'
    #monte le répertoire local sur /app
    volumes:
      - .:/app

  nginx:
    image: nginx:latest
    links:
      - rails
    ports:
      - 3000:80
      #on ne monte ici que un fichier de configuration
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
  • docker-compose up démarre les services décrits dans docker-compose.yml et ne rend pas la main.
  • docker-compose up -d fait la même chose mais rend la main une fois que les services sont démarrés.
  • docker-compose up –build reconstruit les services avant de les lancer.
  • docker-compose down stoppe les services.
  • docker-compose restart redémarre l’ensemble des services.
  • docker-compose restart nginx redémarre un des service (ici nginx).
  • docker-compose exec rails bash fournit une console bash au sein du conteneur rails.
  • docker-compose logs retourne l’ensemble des logs des services depuis le dernier démarrage et rend la main.
  • docker-compose logs -f affiche les logs des services et continue à les « écouter » sansrendre la main.
  • docker-compose logs -f rails fait la même chose pour le conteneur rails uniquement.