Attention ceci est mon brouillon avant de faire une belle documentation sur Docker (il y a à boire et à manger).
Fort de mon expérience du premier POST ( https://www.cyber-neurones.org/2016/04/docker-les-premiers-pas/ ), je vais refaire une installation. J’ai pu voir qu’il me fallait 16 Go pour le « mkfs.btrfs » et j’ai vu que l’installation faisait 2 Go. Je vais donc garder 2 Go de plus, ce qui fait que je vais donc faire une installation à 20 Go.
Et voici la nouvelle création sur Virtual Box :
En bref, on fait l’installation, on fait le pont d’accès, on supprime selinux, on fait l’update du kernel, et pour finir on fait l’installation de docker-engine, et un petit reboot.
Attention pendant l’installation d’Oracle Linux, il faut faire ceci :
On croise les doigts pour que la création puisse se faire vu que l’on a suffisamment d’espace disque.
[root@localhost ~]# ln -s /docker/ /var/lib/docker [root@localhost ~]# df Sys. de fichiers blocs de 1K Utilisé Disponible Uti% Monté sur /dev/sda2 4278272 2042148 2236124 48% / devtmpfs 370420 0 370420 0% /dev tmpfs 380116 0 380116 0% /dev/shm tmpfs 380116 5164 374952 2% /run tmpfs 380116 0 380116 0% /sys/fs/cgroup /dev/sda1 17825792 544 15699712 1% /docker tmpfs 76024 0 76024 0% /run/user/0 [root@localhost ~]# df -h Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur /dev/sda2 4,1G 2,0G 2,2G 48% / devtmpfs 362M 0 362M 0% /dev tmpfs 372M 0 372M 0% /dev/shm tmpfs 372M 5,1M 367M 2% /run tmpfs 372M 0 372M 0% /sys/fs/cgroup /dev/sda1 17G 544K 15G 1% /docker tmpfs 75M 0 75M 0% /run/user/0 [root@localhost ~]# yum install docker-engine Modules complémentaires chargés : ulninfo Résolution des dépendances ... [root@localhost ~]# service docker start Redirecting to /bin/systemctl start docker.service [root@localhost ~]# chkconfig docker on Note : transfert de la requête par « systemctl enable docker.service ». Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
Modification de updated.conf pour ne pas faire de recherche dans Docker .
[root@localhost ~]# cat /etc/updatedb.conf PRUNE_BIND_MOUNTS = "yes" PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fuse.sshfs fusectl gfs gfs2 hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs" PRUNENAMES = ".git .hg .svn" PRUNEPATHS = "/afs /media /mnt /var/lib/docker /net /sfs /tmp /udev /var/cache/ccache /var/lib/yum/yumdb /var/spool/cups /var/spool/squid /var/tmp"
Roulement de tambour, est-ce que cela a fonctionné ? Ou alors ce n’est toujours pas bon …
[root@localhost ~]# docker run -it --rm --name haproxy-syntax-check haproxy:1.5 haproxy -c -f /usr/local/etc/haproxy/haproxy.cfg Unable to find image 'haproxy:1.5' locally 1.5: Pulling from library/haproxy efd26ecc9548: Pull complete a3ed95caeb02: Pull complete 545a1e51c226: Pull complete 4f8fd706ca7d: Pull complete c7652a33f7e1: Pull complete Digest: sha256:8970d415c69e563a2729b2d1d123f743daef86757b965686f12b1f840cab13da Status: Downloaded newer image for haproxy:1.5 haproxy-systemd-wrapper: executing /usr/local/sbin/haproxy -p /run/haproxy.pid -c -f /usr/local/etc/haproxy/haproxy.cfg -Ds [ALERT] 104/130317 (6) : Could not open configuration file /usr/local/etc/haproxy/haproxy.cfg : No such file or directory haproxy-systemd-wrapper: exit, haproxy RC=256
La première erreur vient du fait que le fichier /usr/local/etc/haproxy/haproxy.cfg n’est pas présent. Je vais donc prendre un fichier basique sur le net.
[root@localhost ~]# mkdir /usr/local/etc/haproxy [root@localhost ~]# vi /usr/local/etc/haxproxy/haproxy.cfg global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy user haproxy group haproxy maxconn 1024 daemon defaults log global mode http option httplog option dontlognull # # Listen on *:80 - Send traffic to the backend named "apache" # frontend www-http bind *:80 default_backend apache # # Back-end definition. # backend apache mode http balance roundrobin server web1 10.0.0.10:8080 server web2 10.0.0.20:8080 server web3 10.0.0.30:8080 server web4 10.0.0.40:8080 [root@localhost ~]# adduser haproxy
On refait le test mais on a toujours la même erreur, car on ne résonne pas en conteneur.
[root@localhost ~]# docker run -it --rm --name haproxy-syntax-check haproxy:1.5 haproxy -c -f /usr/local/etc/haproxy/haproxy.cfg haproxy-systemd-wrapper: executing /usr/local/sbin/haproxy -p /run/haproxy.pid -c -f /usr/local/etc/haproxy/haproxy.cfg -Ds [ALERT] 104/131841 (6) : Could not open configuration file /usr/local/etc/haproxy/haproxy.cfg : No such file or directory haproxy-systemd-wrapper: exit, haproxy RC=256 [root@localhost ~]# cat /usr/local/etc/haproxy/haproxy.cfg global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy user haproxy group haproxy maxconn 1024 daemon defaults log global mode http option httplog option dontlognull # # Listen on *:80 - Send traffic to the backend named "apache" # frontend www-http bind *:80 default_backend apache # # Back-end definition. # backend apache mode http balance roundrobin server web1 10.0.0.10:8080 server web2 10.0.0.20:8080 server web3 10.0.0.30:8080 server web4 10.0.0.40:8080 [root@localhost ~]# docker images -a REPOSITORY TAG IMAGE ID CREATED SIZE haproxy 1.5 011e001101c0 19 hours ago 138.2 MB
Si on fait cela de façon sale, on arrive à un début de solution (à noter que le locate fonctionne car je n’ai pas fait de reboot, sinon j’ai interdit le passage dans /docker/ à mlocate):
[root@localhost ~]# locate "/usr/local/sbin/haproxy" /docker/btrfs/subvolumes/2fe19a89b016b3521418f06de0bec2b54df0933294873630333d88da924a95d4/usr/local/sbin/haproxy /docker/btrfs/subvolumes/2fe19a89b016b3521418f06de0bec2b54df0933294873630333d88da924a95d4/usr/local/sbin/haproxy-systemd-wrapper /docker/btrfs/subvolumes/3922cbb258a566dfc4b4c9c0cb183a83b93353e6a66aadfdac080d741d2b59ea/usr/local/sbin/haproxy /docker/btrfs/subvolumes/3922cbb258a566dfc4b4c9c0cb183a83b93353e6a66aadfdac080d741d2b59ea/usr/local/sbin/haproxy-systemd-wrapper /docker/btrfs/subvolumes/a57fb85ecf435baab5bc2ceafc70ee00527f6b379dc0c9366c748f1563332376/usr/local/sbin/haproxy /docker/btrfs/subvolumes/a57fb85ecf435baab5bc2ceafc70ee00527f6b379dc0c9366c748f1563332376/usr/local/sbin/haproxy-systemd-wrapper /docker/btrfs/subvolumes/f0e08f7411c330363784c15ae4633fe7f14ed6fabf2dc5ffcd3fac1559cb2861/usr/local/sbin/haproxy /docker/btrfs/subvolumes/f0e08f7411c330363784c15ae4633fe7f14ed6fabf2dc5ffcd3fac1559cb2861/usr/local/sbin/haproxy-systemd-wrapper [root@localhost ~]# cp /usr/local/etc/haproxy/haproxy.cfg /docker/btrfs/subvolumes/2fe19a89b016b3521418f06de0bec2b54df0933294873630333d88da924a95d4/usr/local/etc/haproxy/. [root@localhost ~]# cp /usr/local/etc/haproxy/haproxy.cfg /docker/btrfs/subvolumes/3922cbb258a566dfc4b4c9c0cb183a83b93353e6a66aadfdac080d741d2b59ea/usr/local/etc/haproxy/. [root@localhost ~]# cp /usr/local/etc/haproxy/haproxy.cfg /docker/btrfs/subvolumes/a57fb85ecf435baab5bc2ceafc70ee00527f6b379dc0c9366c748f1563332376/usr/local/etc/haproxy/. [root@localhost ~]# cp /usr/local/etc/haproxy/haproxy.cfg /docker/btrfs/subvolumes/f0e08f7411c330363784c15ae4633fe7f14ed6fabf2dc5ffcd3fac1559cb2861/usr/local/etc/haproxy/. [root@localhost ~]# docker run -it --rm --name haproxy-syntax-check haproxy:1.5 haproxy -c -f /usr/local/etc/haproxy/haproxy.cfg haproxy-systemd-wrapper: executing /usr/local/sbin/haproxy -p /run/haproxy.pid -c -f /usr/local/etc/haproxy/haproxy.cfg -Ds [ALERT] 104/133221 (6) : parsing [/usr/local/etc/haproxy/haproxy.cfg:5] : cannot find user id for 'haproxy' (0:Success) [ALERT] 104/133221 (6) : parsing [/usr/local/etc/haproxy/haproxy.cfg:6] : cannot find group id for 'haproxy' (0:Success) [ALERT] 104/133221 (6) : Error(s) found in configuration file : /usr/local/etc/haproxy/haproxy.cfg [WARNING] 104/133221 (6) : config : missing timeouts for frontend 'www-http'. | While not properly invalid, you will certainly encounter various problems | with such a configuration. To fix this, please ensure that all following | timeouts are set to a non-zero value: 'client', 'connect', 'server'. [WARNING] 104/133221 (6) : config : missing timeouts for backend 'apache'. | While not properly invalid, you will certainly encounter various problems | with such a configuration. To fix this, please ensure that all following | timeouts are set to a non-zero value: 'client', 'connect', 'server'. [ALERT] 104/133221 (6) : Fatal errors found in configuration. haproxy-systemd-wrapper: exit, haproxy RC=256
La suite au prochain épisode … mais la nouvelle partition nous a permis de régler le premier gros problème. Maintenant il va falloir faire un fichier propre de configuration avec des conteneurs propres. Et il va falloir bien faire la différence entre fichier local et fichier dans un conteneur.
Avant de ce quitter un petit df afin de voir la taille utilisée :
[root@localhost ~]# df -h Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur devtmpfs 353M 0 353M 0% /dev tmpfs 370M 0 370M 0% /dev/shm tmpfs 370M 5,0M 365M 2% /run tmpfs 370M 0 370M 0% /sys/fs/cgroup /dev/sda2 4,1G 2,0G 2,2G 47% / /dev/sda1 17G 174M 15G 2% /docker tmpfs 74M 0 74M 0% /run/user/0
J’ai surement pas mis assez de place dans la partition / …. il va pas falloir compiler 😉 .
En fait rien ne fonctionne car je n’ai pas respecter l’ordre, dans un premier temps il faut faire un Dockerfile c’est ce fichier qui va créer la configuration et les utilisateurs dans l’environnement. Ensuite il faudra faire un build de ce fichier Dockerfile.
[root@localhost ~]# docker build -t my-haproxy . Sending build context to Docker daemon 13.82 kB Step 1 : FROM haproxy:1.5 ---> 011e001101c0 Step 2 : COPY ./haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg ---> 80428a4d0c7a Removing intermediate container a32307b4902e Successfully built 80428a4d0c7a [root@localhost ~]# cat Dockerfile FROM haproxy:1.5 COPY ./haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
Ensuite on peut indiquer qui est l’auteur et ajouter des utilisateurs …
[root@localhost ~]# docker build -t my-haproxy . Sending build context to Docker daemon 13.82 kB Step 1 : FROM haproxy:1.5 ---> 011e001101c0 Step 2 : MAINTAINER Toto <toto@cyber-neurones.org> ---> Running in 581f5cb3d821 ---> 2afe3bb2588d Removing intermediate container 581f5cb3d821 Step 3 : COPY ./haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg ---> 37b23cd1bd7f Removing intermediate container 40bf1ce4608a Step 4 : RUN groupadd -r haproxy && useradd -r -g haproxy haproxy ---> Running in 06b262433902 ---> 73e7842bb76b Removing intermediate container 06b262433902 Successfully built 73e7842bb76b [root@localhost ~]# cat Dockerfile FROM haproxy:1.5 MAINTAINER Toto <toto@cyber-neurones.org> COPY ./haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg RUN groupadd -r haproxy && useradd -r -g haproxy haproxy
Il faut penser à faire ceci si vous avez fait n’importe quoi avant
[root@localhost ~]# docker rmi $(docker images -q)
L’autre solution c’est l’utilisation de la commande -v à la place de -f (par exemple : -v /usr/local/etc/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg c.a.d. from:to )
Et un dernier pour finir encore un peu plus complexe :
FROM haproxy:1.5 MAINTAINER Toto <toto@cyber-neurones.org> COPY ./haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg ENV HAPROXY_USER haproxy RUN groupadd --system ${HAPROXY_USER} && \ useradd --system --gid ${HAPROXY_USER} ${HAPROXY_USER} && \ mkdir --parents /var/lib/${HAPROXY_USER} && \ chown -R ${HAPROXY_USER}:${HAPROXY_USER} /var/lib/${HAPROXY_USER} CMD ["haproxy", "-db", "-f", "/usr/local/etc/haproxy/haproxy.cfg"]
Pour la suite je vais aussi ajouter la commande netstat afin de pouvoir vérifier si le port est bien en écoute.
[root@localhost ~]# yum install net-tools [root@localhost ~]# netstat -at Connexions Internet actives (serveurs et établies) Proto Recv-Q Send-Q Adresse locale Adresse distante Etat tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN tcp 0 0 localhost.localdoma:ssh 192.168.1.10:62127 ESTABLISHED tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 localhost:smtp [::]:* LISTEN
Je vais aussi mettre la commande lsof afin de mieux étudier le système .
[root@localhost ~]# yum install lsof