DOCKER - gestion du FROM dans dockerfile
Bonjour
Je débute actuellement avec Docker (en gros je cherche à comprendre comment cela fonctionne et donc comment je peux m'en servir)
J'ai crée ma première image avec ce docker file
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
FROM debian
# install apache and site
RUN apt-get update && apt-get install -y \
apache2 \
&& rm -rf /var/lib/apt/lists/*
# create directories if necessary
RUN if ! [ -d /var/run/apache2 ]; then mkdir /var/run/apache2;fi
RUN if ! [ -d /var/log/apache2 ]; then mkdir /var/log/apache2;fi
RUN if ! [ -d /var/lock/apache2 ]; then mkdir /var/lock/apache2;fi
# add variable system
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
# add module apache
RUN a2enmod proxy proxy_http
RUN a2ensite default-ssl
RUN a2enmod ssl
# minimal param
RUN rm /etc/apache2/sites-enabled/*
RUN echo "<VirtualHost *:80>" > /etc/apache2/sites-enabled/default.conf
RUN echo " DocumentRoot /var/www" >> /etc/apache2/sites-enabled/default.conf
RUN echo " <IfModule dir_module>" >> /etc/apache2/sites-enabled/default.conf
RUN echo " DirectoryIndex index.html" >> /etc/apache2/sites-enabled/default.conf
RUN echo " </IfModule>" >> /etc/apache2/sites-enabled/default.conf
RUN echo "</VirtualHost>" >> /etc/apache2/sites-enabled/default.conf
RUN rm -r /var/www/html
RUN echo "<html><body>step1</body></html>" > /var/www/index.html
# expose
EXPOSE 80
EXPOSE 443
# volume
VOLUME /var/www
VOLUME /etc/apache2/sites-enabled
# cmd
CMD ["/usr/sbin/apache2","-D","FOREGROUND"] |
et j'ai lancer la génération de l'image
Code:
1 2
|
docker build -t step1 - < step1.dockerfile |
si je lance un container à partir de cette image, que je me connecte en intéractif sur le container je peux voir ce que contient le fichier /var/www/index.html
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
root@debian:~# docker run -d --name step1 step1
f46e9b20790d88c2abaf13ab01fac2da428dee4e9ec68fa3175b2845a27b8f22
root@debian:~# docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f46e9b20790d step1:latest "/usr/sbin/apache2 - 11 seconds ago Up 10 seconds 80/tcp, 443/tcp step1
e76a731c732b dockerui/dockerui:latest "/dockerui" 23 hours ago Up 5 hours 0.0.0.0:9000->9000/tcp dockerui
root@debian:~# docker exec -it f46e9b20790d bash
root@f46e9b20790d:/# cat /var/www/index.html
<html><body>step1</body></html>
root@f46e9b20790d:/# exit
exit |
la je suis plutôt content :lol:
je souhaite créer une image step2 (je sais je suis trop fort sur les noms) qui part de step1 pour modifier uniquement le fichier index.html.
mon dockerfile est le suivant
Code:
1 2 3 4
|
FROM step1
RUN echo "<html><body>step2</body></html>" > /var/www/index.html |
je build cette image sans soucis, mais quand je lance un container à partir de l(image step2 ... le résultat de la modification du fichier index.html n'est pas là
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
root@debian:~# docker run -d --name step2 step2
b27ec5c825a0c7a21af9f4e263c6787ff1336ac54a5c220973fefb1577c5d014
root@debian:~# docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b27ec5c825a0 step2:latest "/usr/sbin/apache2 - 7 seconds ago Up 6 seconds 80/tcp, 443/tcp step2
f46e9b20790d step1:latest "/usr/sbin/apache2 - 11 seconds ago Up 10 seconds 80/tcp, 443/tcp step1
e76a731c732b dockerui/dockerui:latest "/dockerui" 23 hours ago Up 5 hours 0.0.0.0:9000->9000/tcp dockerui
root@debian:~# docker exec -it b27ec5c825a0 bash
root@b27ec5c825a0:/# cat /var/www/index.html
<html><body>step1</body></html>
root@b27ec5c825a0:/# exit
exit |
et là je ne comprends pas ...
si je regarde l'history de step2 ... je retrouve bien toutes les étapes
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
root@debian:~# docker history step2
IMAGE CREATED CREATED BY SIZE
dc0fe4e04ce8 9 seconds ago /bin/sh -c echo "<html><body>step2</body></ht 0 B
f6247af898c3 28 seconds ago /bin/sh -c #(nop) CMD ["/usr/sbin/apache2" "- 0 B
42063c91344b 28 seconds ago /bin/sh -c #(nop) VOLUME [/etc/apache2/sites- 0 B
3d0c42ed2fda 28 seconds ago /bin/sh -c #(nop) VOLUME [/var/www] 0 B
e3dd7dd1d19f 29 seconds ago /bin/sh -c #(nop) EXPOSE 443/tcp 0 B
49b95672822f 29 seconds ago /bin/sh -c #(nop) EXPOSE 80/tcp 0 B
18466547640a 29 seconds ago /bin/sh -c echo "<html><body>step1</body></ht 32 B
1120cd3196a4 2 hours ago /bin/sh -c rm -r /var/www/html 0 B
6e70f415ecfb 2 hours ago /bin/sh -c echo "</VirtualHost>" >> /etc/apac 131 B
8add5bb9ff04 2 hours ago /bin/sh -c echo " </IfModule>" >> /etc/apac 116 B
9365228096b9 2 hours ago /bin/sh -c echo " DirectoryIndex index.h 101 B
d9ff201a495f 2 hours ago /bin/sh -c echo " <IfModule dir_module>" >> 69 B
c9b9a6348471 2 hours ago /bin/sh -c echo " DocumentRoot /var/www" >> 44 B
782cf15b910a 2 hours ago /bin/sh -c echo "<VirtualHost *:80>" > /etc/a 19 B
b056285a2805 2 hours ago /bin/sh -c rm /etc/apache2/sites-enabled/* 0 B
51b3999c8bc5 2 hours ago /bin/sh -c a2enmod ssl 88 B
293eb96de689 2 hours ago /bin/sh -c a2ensite default-ssl 35 B
1a6556962390 2 hours ago /bin/sh -c a2enmod proxy proxy_http 89 B
8c4c45c9defe 2 hours ago /bin/sh -c #(nop) ENV APACHE_PID_FILE=/var/ru 0 B
324de6abdff1 2 hours ago /bin/sh -c #(nop) ENV APACHE_LOCK_DIR=/var/lo 0 B
8b8923b66f72 2 hours ago /bin/sh -c #(nop) ENV APACHE_LOG_DIR=/var/log 0 B
af4c51ba46dc 2 hours ago /bin/sh -c #(nop) ENV APACHE_RUN_GROUP=www-da 0 B
3c1551344051 2 hours ago /bin/sh -c #(nop) ENV APACHE_RUN_USER=www-dat 0 B
09fb83c58511 2 hours ago /bin/sh -c if ! [ -d /var/lock/apache2 ]; the 0 B
d306813ad255 2 hours ago /bin/sh -c if ! [ -d /var/log/apache2 ]; then 0 B
296dc34fdfed 2 hours ago /bin/sh -c if ! [ -d /var/run/apache2 ]; then 0 B
eb6f3acebaee 2 hours ago /bin/sh -c apt-get update && apt-get install 58.63 MB
a582cd499e0f 2 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
d8bd0657b25f 2 weeks ago /bin/sh -c #(nop) ADD file:b5391cb13172fb513d 125.1 MB |
je ne comprends donc pas pourquoi cela ne fonctionne pas ... quelqu'un pourrait m'aider à expliciter le fonctionnement ... merci