Dockerfile

Instructions :

FROM : Indique l'image de base à utiliser

MAINTAINER : Auteur / mainteneur de l'image créee

RUN : Exécution d'une commande dans l'image

EXPOSE : Exposition des ports de l'application

COPY : Copie des ressources depuis la machine locale vers l'image

ENTRYPOINT : "Wrapper" autour de l'application

CMD : Commande exécutée lors de l'instanciation de l'image

2 formats possible pour les commandes ENTRYPOINT et CMD

Shell : /bin/ping localhost

Exec : ['ping', 'localhost'] - Format Recommandé

VOLUME : Définition d'un volume (donnée gérées en dehors de l'union filesystem)

WORKDIR : Répertoire de travail

Exemple de création d'images

Serveur Web :

Dockerfile.txt

# Image de base
FROM nginx:1.11.5
# Copie d'un fichier de configuration
COPY nginx.conf /etc/nginx/nginx.conf

Création de l'image :

-t : spécifie le tag de l'image

-f : spécifie à utiliser pour la construction (Dockerfile par défaut)

--no-cache : invalide le cache

# sudo docker image build [TAG] [Répertoire Dockerfile]
sudo docker image build -t www

Exemple d'application JAVA

Dockerfile.txt

FROM openjdk:7
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN javac Main.java
CMD ['java', 'Main']

Main.java

public class Main
{
public static void main(String[] args) {
System.out.println('Hello, World');
}
}

Création de l'image :

sudo docker image build -t hellojava:v1.0

Création d'un container à partir de l'image créée :

sudo docker container run hellojava:v1.0

Exemple d'application Python

Dockerfile.txt

FROM python:3
ADD barcode.py /
RUN pip3 install pystrich
CMD ['python', '/barcode.py']

barcode.py

# https://github.com/mmulqueen/pyStrich
from pystrich.datamatrix import DataMatrixEncoder
encoder = DataMatrixEncoder('Hello')
print(encoder.get_ascii())

Création de l'image :

sudo docker image build -t barcode

Création d'un container à partir de l'image créée :

sudo docker run barcode

Exemple d'application Node.js

Dockerfile.txt

FROM node:6.10.3
MAINTAINER Username <[email protected]>
ENV LAST_UPDATED 202004067153500
COPY package.json /app/package.json
RUN cd /app && npm install
COPY . /app/
EXPOSE 80
CMD ['npm', 'start']

package.json

{
"name": "testnodejs",
"version": "0.0.1",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.17.1",
"util": "0.12.2"
}
}

index.js

const express = require('express'),
util = require('util'),
let app = express();
app.get('/',
function(req, res){
res.setHeader('Content-Type',
'text/plain'
);
res.end(util.format(
'%s - %s',
new Date(),
'Got HTTP Get Request'
)
);
});
app.listen(process.env.PORT || 80);

Création de l'image :

sudo docker image build -t nodewww .

Création d'un container à partir de l'image créée :

sudo docker container run -p 8080:80 nodewww