Docker : le cinquième pas.

Attention ceci est mon brouillon avant de faire une belle documentation sur Docker (il y a à boire et à manger).

Avant de me lancer dans « HAProxy« , je vais faire un test avec « Docker Swarm« .

Pour l’instant « Docker Swarn » n’est pas un répartiteur de charge comme « HAproxy ». En fait il répartit la charge au moment du déploiement. Et aussi il permet le déploiement sur plusieurs servers à la fois, ce qui est un gain de temps énorme pour les administrateurs.

Je vais donc me lancer dans « Docker Swarm« , la première étape est la suivante :

[root@localhost ~]# docker pull swarm
Using default tag: latest
latest: Pulling from library/swarm
8c01723048ed: Pull complete 
28ef38ffcca5: Pull complete 
f1f933319091: Pull complete 
a3ed95caeb02: Pull complete 
Digest: sha256:8b007c8fc861cfaa2f0b9160e6ed3a39109af6e28dfe03982a05158e218bcc52
Status: Downloaded newer image for swarm:latest

On crée le swarm :

[root@localhost ~]# docker run --rm swarm create
553e1256993f92792ddd075713b16e34

Ensuite on lance des agents (bien noter le token en vert pour la suite):

[root@localhost ~]# docker run -d swarm join --advertise 10.0.0.101:2375 token://553e1256993f92792ddd075713b16e34
b61b2c9ea993e85279f720ebaa7bb60f1e187f2f09aa073772f7ae1ac99df636
[root@localhost ~]# docker run -d swarm join --advertise 10.0.0.102:2375 token://553e1256993f92792ddd075713b16e34
7acaca267109e1505890757a03d01b2833dd6dc2a750520bab46bf463d4c344b
[root@localhost ~]# docker run -d swarm join --advertise 10.0.0.103:2375 token://553e1256993f92792ddd075713b16e34
6c8fae76bce2c75be454944b3fd04a591f3811f6109e400dd62b0f9cab3a8c11
[root@localhost ~]# docker run -d swarm join --advertise 10.0.0.104:2375 token://553e1256993f92792ddd075713b16e34
75003c0fea9dfe0df1f613d360968758d96257aa27c19b39a671d4028235685f

J’ai donc 4 agents qui sont sur 4 ip différentes et qui écoutent sur le port 2375.
Maintenant je lance le manageur

[root@localhost ~]# docker run -d -p 80:2375 swarm manage token://553e1256993f92792ddd075713b16e34
cd4d60fd7638f775a4e04afad034877adf38a2b627abc31e4d4182ddd6e43470
docker: Error response from daemon: driver failed programming external connectivity on endpoint compassionate_mahavira (b4edffad195ad03292147ffe3cc6d753c6814c9b6bcd16835e01f249e64364e6): Bind for 0.0.0.0:80 failed: port is already allocated.

Aie cela plante car j’ai oublié de tuer le précédent qui écoute aussi sur le port 80.

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
75003c0fea9d        swarm               "/swarm join --advert"   4 minutes ago       Up 4 minutes        2375/tcp                 nauseous_carson
6c8fae76bce2        swarm               "/swarm join --advert"   4 minutes ago       Up 4 minutes        2375/tcp                 adoring_visvesvaraya
7acaca267109        swarm               "/swarm join --advert"   4 minutes ago       Up 4 minutes        2375/tcp                 evil_northcutt
b61b2c9ea993        swarm               "/swarm join --advert"   4 minutes ago       Up 4 minutes        2375/tcp                 dreamy_lovelace
9cf698cacc2e        my-server           "/sbin/server"           About an hour ago   Up About an hour    0.0.0.0:80->80/tcp       my-server3
2fc533c55725        postgres            "/docker-entrypoint.s"   4 hours ago         Up 4 hours          0.0.0.0:5432->5432/tcp   postgres2
[root@localhost ~]# docker stop 9cf698cacc2e
9cf698cacc2e
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
75003c0fea9d        swarm               "/swarm join --advert"   5 minutes ago       Up 5 minutes        2375/tcp                 nauseous_carson
6c8fae76bce2        swarm               "/swarm join --advert"   5 minutes ago       Up 5 minutes        2375/tcp                 adoring_visvesvaraya
7acaca267109        swarm               "/swarm join --advert"   5 minutes ago       Up 5 minutes        2375/tcp                 evil_northcutt
b61b2c9ea993        swarm               "/swarm join --advert"   5 minutes ago       Up 5 minutes        2375/tcp                 dreamy_lovelace
2fc533c55725        postgres            "/docker-entrypoint.s"   4 hours ago         Up 4 hours          0.0.0.0:5432->5432/tcp   postgres2
[root@localhost ~]# docker run -d -p 80:2375 swarm manage token://553e1256993f92792ddd075713b16e34
37a3a8a409b6683c7495cbbda3f18f7e1bd2da3c364252303ba52860eaba9a64
[root@localhost ~]# docker run --rm swarm list token://553e1256993f92792ddd075713b16e34
10.0.0.104:2375
10.0.0.102:2375
10.0.0.103:2375
10.0.0.101:2375
[root@localhost ~]# telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

HTTP/1.1 400 Bad Request

Maintenant je peux donc repasser à HAproxy qui est un vrai loadbalanceur. Pour le loadbalanceur il y a aussi Nginx.

Les notions à connaitre sous Docker semblent être (dans un premier temps):

  • Consul pour la découverte des services de façon dynamique.
  • Nginx ou HAProxy pour la répartition de charge.
  • Registrator pour s’enregistrer en temps que service.
  • La création d’un Dockerfile
  • Le lancement, l’arrêt, le status de ./Container sous Docker.

Je vais essayer de faire une documentation détaillée quand je maitriserais un peu mieux.

Docker : le quatrième pas.

Attention ceci est mon brouillon avant de faire une belle documentation sur Docker (il y a à boire et à manger). 

Je commence donc par faire table rase de toutes les images, a force de jouer je ne sais plus ou j’en suis 😉

[root@localhost ~]# docker rmi $(docker images -q)
[root@localhost ~]# docker rm $(docker ps -a -q)
Error response from daemon: conflict: unable to delete 0f3af79d8673 (cannot be forced) - image is being used by running container f33064cbf168
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
postgres            latest              0f3af79d8673        9 days ago          265.7 MB

Visiblement ils (les containers) n’étaient pas tous arrêtés .

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
postgres            latest              0f3af79d8673        9 days ago          265.7 MB
[root@localhost ~]# docker stop $( docker ps -a -q)
f33064cbf168
[root@localhost ~]# docker rm $(docker ps -a -q)
f33064cbf168
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
postgres            latest              0f3af79d8673        9 days ago          265.7 MB

Maintenant je fais « mon installation » classique de PostgreSQL dans le Dockfile.

[root@localhost ~]# cat Dockerfile
FROM fedora
MAINTAINER toto toto@cyber-neurones.org 
RUN dnf install postgresql -y 
RUN dnf install postgresql-server postgresql-contrib -y 
# Modification de la configuration 
#RUN echo "host all all 0.0.0.0/0 md5" >> /var/lib/pgsql/data/pg_hba.conf 
RUN echo "local 		all		all 			trust" > /var/lib/pgsql/data/pg_hba.conf
RUN echo "host 		all 		all 	127.0.0.1/32 	trust" >> /var/lib/pgsql/data/pg_hba.conf
RUN echo "host 		all 		all 	::1/128 	trust" >> /var/lib/pgsql/data/pg_hba.conf

#RUN echo "listen_addresses='*'" >> /var/lib/pgsql/data/postgresql.conf 
#RUN echo "tcpip_socket = true" >> /var/lib/pgsql/data/postgresql.conf 

RUN echo "tcpip_socket = true          #" > /var/lib/pgsql/data/postgresql.conf
RUN echo "max_connections = 124        #" >> /var/lib/pgsql/data/postgresql.conf
RUN echo "sort_mem = 2048              #" >> /var/lib/pgsql/data/postgresql.conf
RUN echo "shared_buffers = 1024        #" >> /var/lib/pgsql/data/postgresql.conf
RUN echo "debug_level = 0              #" >> /var/lib/pgsql/data/postgresql.conf
RUN echo "debug_print_query = false     #" >> /var/lib/pgsql/data/postgresql.conf
RUN echo "debug_print_parse = false     #" >> /var/lib/pgsql/data/postgresql.conf
RUN echo "debug_print_rewritten = false #" >> /var/lib/pgsql/data/postgresql.conf
RUN echo "debug_print_plan = false      #" >> /var/lib/pgsql/data/postgresql.conf
RUN echo "debug_pretty_print = false    #" >> /var/lib/pgsql/data/postgresql.conf

USER postgres
ENV PGDATA /var/lib/pgsql/data
#Comment lancer PostgreSQL pour créer les utilisateurs ?
#RUN /etc/init.d/postgresql start ...
#RUN /etc/rc.d/init.d/postgresql start ...
#RUN service postgres start ...
RUN systemctl start postgres.service &&\ psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&\ createdb -O docker docker 
#RUN initdb --data-checksums 
# Le port en ecoute 
EXPOSE 5432 
# Ajout des volumes pour faire un backup 
VOLUME ["/etc/postgresql", "/var/log/postgresql", "/var/lib/pgsql"] 
# Pour lancer postgres 
CMD ["/var/lib/pgsql/bin/postgres", "-D", "/var/lib/pgsql/data", "-c", "config_file=/var/lib/pgsql/data/postgresql.conf"]

Quand je lance la création :

[root@localhost ~]# docker build -t my-postgres .
Sending build context to Docker daemon 17.41 kB
...
Step 20 : RUN systemctl start postgres.service &&    psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&    createdb -O docker docker
 ---> Running in c2b02a1f1bca
Failed to get D-Bus connection: Operation not permitted
The command '/bin/sh -c systemctl start postgres.service &&    psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&    createdb -O docker docker' returned a non-zero code: 1

ou alors cette erreur :

[root@localhost ~]# docker build -t my-postgres .
Sending build context to Docker daemon 17.41 kB
...
Step 20 : RUN /etc/init.d/postgresql start &&    psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&    createdb -O docker docker
 ---> Running in 4dfdeb08e3f3
/bin/sh: /etc/init.d/postgresql: No such file or directory
The command '/bin/sh -c /etc/init.d/postgresql start &&    psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&    createdb -O docker docker' returned a non-zero code: 127

ou encore :

[root@localhost ~]# docker build -t my-postgres .
Sending build context to Docker daemon 17.41 kB
...
Step 20 : RUN service postgres start &&    psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&    createdb -O docker docker
 ---> Running in 9a3bfd9a664f
/bin/sh: service: command not found
The command '/bin/sh -c service postgres start &&    psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&    createdb -O docker docker' returned a non-zero code: 127

Je laisse donc tomber provisoirement l’ajout d’un utilisateur Docker et la création de la db Docker dans le Dockerfile 🙁 .

[root@localhost ~]# docker build -t my-postgres .
Sending build context to Docker daemon 17.92 kB
Step 1 : FROM fedora
 ---> ddd5c9c1d0f2
Step 2 : MAINTAINER toto toto@cyber-neurones.org
 ---> Using cache
 ---> bb6bc55cbbfc
Step 3 : RUN dnf install postgresql -y
 ---> Using cache
 ---> 9b581b9c8425
Step 4 : RUN dnf install postgresql-server postgresql-contrib -y
 ---> Using cache
 ---> ed6bccd45fd3
Step 5 : RUN echo "local 		all		all 			trust" > /var/lib/pgsql/data/pg_hba.conf
 ---> Using cache
 ---> 8a3ea8273f9e
Step 6 : RUN echo "host 		all 		all 	127.0.0.1/32 	trust" >> /var/lib/pgsql/data/pg_hba.conf
 ---> Using cache
 ---> fc65b9c9661e
Step 7 : RUN echo "host 		all 		all 	::1/128 	trust" >> /var/lib/pgsql/data/pg_hba.conf
 ---> Using cache
 ---> 6c9ab1b370d6
Step 8 : RUN echo "tcpip_socket = true          #" > /var/lib/pgsql/data/postgresql.conf
 ---> Using cache
 ---> ac205ea5bbf7
Step 9 : RUN echo "max_connections = 124        #" >> /var/lib/pgsql/data/postgresql.conf
 ---> Using cache
 ---> 975e0845fdbb
Step 10 : RUN echo "sort_mem = 2048              #" >> /var/lib/pgsql/data/postgresql.conf
 ---> Using cache
 ---> 23ab63545319
Step 11 : RUN echo "shared_buffers = 1024        #" >> /var/lib/pgsql/data/postgresql.conf
 ---> Using cache
 ---> 327533e655c4
Step 12 : RUN echo "debug_level = 0              #" >> /var/lib/pgsql/data/postgresql.conf
 ---> Using cache
 ---> 7e51ec7dd6cb
Step 13 : RUN echo "debug_print_query = false     #" >> /var/lib/pgsql/data/postgresql.conf
 ---> Using cache
 ---> 0b8663d1fe21
Step 14 : RUN echo "debug_print_parse = false     #" >> /var/lib/pgsql/data/postgresql.conf
 ---> Using cache
 ---> 82879441164c
Step 15 : RUN echo "debug_print_rewritten = false #" >> /var/lib/pgsql/data/postgresql.conf
 ---> Using cache
 ---> 3bd7eb375391
Step 16 : RUN echo "debug_print_plan = false      #" >> /var/lib/pgsql/data/postgresql.conf
 ---> Using cache
 ---> b269cdf8abf3
Step 17 : RUN echo "debug_pretty_print = false    #" >> /var/lib/pgsql/data/postgresql.conf
 ---> Using cache
 ---> 8bad41390294
Step 18 : RUN echo "listen_addresses='*'          #" >> /var/lib/pgsql/data/postgresql.conf
 ---> Running in f53205205b0b
 ---> 896e6064081e
Removing intermediate container f53205205b0b
Step 19 : USER postgres
 ---> Running in 3d4aa9d10075
 ---> 77f821b4582f
Removing intermediate container 3d4aa9d10075
Step 20 : ENV PGDATA /var/lib/pgsql/data
 ---> Running in 1d25c9d8ee02
 ---> 86584da17774
Removing intermediate container 1d25c9d8ee02
Step 21 : EXPOSE 5432
 ---> Running in 0c2d98c939de
 ---> 60baae86afc9
Removing intermediate container 0c2d98c939de
Step 22 : VOLUME /etc/postgresql /var/log/postgresql /var/lib/pgsql
 ---> Running in d6f248e4b0f6
 ---> 3a00e74a6f0f
Removing intermediate container d6f248e4b0f6
Step 23 : CMD /var/lib/pgsql/bin/postgres -D /var/lib/pgsql/data -c config_file=/var/lib/pgsql/data/postgresql.conf
 ---> Running in 46016d0af473
 ---> 4b31f92a3ed5
Removing intermediate container 46016d0af473
Successfully built 4b31f92a3ed5
[root@localhost ~]# docker run -p 5432:5432 --name postgres2 -e POSTGRES_PASSWORD=password -d postgres
2fc533c557259f65236a97e1e4eb7123867d4c0e0cae784a620cc9c96e55c168
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
2fc533c55725        postgres            "/docker-entrypoint.s"   24 seconds ago      Up 24 seconds       0.0.0.0:5432->5432/tcp   postgres2
[root@localhost ~]# psql -h localhost -p 5432 -u postgres
psql : option invalide -- 'u'
Essayez « psql --help » pour plus d'informations.
[root@localhost ~]# psql -h localhost -p 5432 -d postgres
Mot de passe : 
psql: FATAL:  password authentication failed for user "root"

[root@localhost ~]# adduser postgres
[root@localhost ~]# su postgres
[postgres@localhost root]$ cd
[postgres@localhost ~]$ psql -h localhost -p 5432 -d postgres
Mot de passe : 
psql (9.2.15, serveur 9.5.2)
ATTENTION : psql version 9.2, version du serveur 9.5.
         Certaines fonctionnalités de psql pourraient ne pas fonctionner.
Saisissez « help » pour l'aide.

postgres=# 

J’ai donc ajouter l’utilisateur postgres en local afin d’avoir l’accès à PostgreSQL. J’aurai pu aussi utiliser l’option -U pour préciser l’utilisateur à psql.

[postgres@localhost ~]$ psql -h localhost -p 5432 -d postgres -U postgres
Mot de passe pour l'utilisateur postgres : 
psql (9.2.15, serveur 9.5.2)
ATTENTION : psql version 9.2, version du serveur 9.5.
         Certaines fonctionnalités de psql pourraient ne pas fonctionner.
Saisissez « help » pour l'aide.

postgres=# create database Docker;
CREATE DATABASE
postgres=# CREATE USER Docker WITH PASSWORD 'Docker';
CREATE ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE Docker to Docker;
GRANT

Maintenant on va développer un serveur pour voir s’il est possible de lancer des containers dynamiquement. On va limiter ce server à 5 clients maximums et on va essayer de lancer un nouveau conteneur quand les 5 clients seront occupés.

Le source de server.c:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h> 
#include <sys/types.h> 
#include <netinet/in.h> 
#include <sys/socket.h> 
#include <sys/wait.h> 
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/un.h> 

#define MYPORT 80  
#define BACKLOG 5   
#define MAXCLIENTS 5
#define MAXDATASIZE 100

int main(void)
{
   int sockfd = -1,new_fd,numbytes,highest = 0,i;
   int clients[MAXCLIENTS];
   char buffer[MAXDATASIZE] ;

   struct sockaddr_in my_addr,their_addr;
   socklen_t sin_size;
   struct timeval tv;
   fd_set readfds;

   if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
     perror("SOCKET");
     exit(-1);
   }
   my_addr.sin_family = AF_INET;        
   my_addr.sin_port = htons(MYPORT);   
   my_addr.sin_addr.s_addr = INADDR_ANY; 
   bzero(&(my_addr.sin_zero), 8);

   if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) {
      perror("BIND");
      exit(-1);
   }
   if (listen(sockfd, BACKLOG) == -1) {
      perror("LISTEN");
      exit(-1);
   }
   bzero(clients,sizeof(clients));
   highest = sockfd ;
   while(1) {
      sin_size = sizeof(struct sockaddr_in);      
      tv.tv_sec = 0;
      tv.tv_usec = 250000;
      FD_ZERO(&readfds);
      for ( i = 0 ; i < MAXCLIENTS ; i ++ ) { if ( clients[i] != 0 ) { FD_SET(clients[i],&readfds); } } FD_SET(sockfd,&readfds); if (select(highest+1, &readfds, NULL, NULL, &tv) >=0 ) {
         if (FD_ISSET(sockfd, &readfds)) {
            if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) {
               perror("ACCEPT");
               continue;
            } 
            for( i = 0 ; i < MAXCLIENTS ; i ++ ) { if ( clients[i] == 0 ) { clients[i] = new_fd ; break; } } if ( i != MAXCLIENTS ) { if ( new_fd > highest ) {
                  highest = clients[i] ;
               }
               printf("Connexion received from %s (slot %i) ",inet_ntoa(their_addr.sin_addr),i);
               send(new_fd,"PING",4,MSG_NOSIGNAL);
            }     
            else {
               send(new_fd, "TOO MANY CLIENT",15,MSG_NOSIGNAL); 
               close(new_fd);   
            }
         }
         for ( i = 0 ; i < MAXCLIENTS ; i ++ ) {
            if ( FD_ISSET(clients[i],&readfds) ) {
               if ( (numbytes=recv(clients[i],buffer,MAXDATASIZE,0)) <= 0 ) {
                  printf("Connexion lost from slot %i",i);  
                  close(clients[i]);
                  clients[i] = 0 ;
               }
               else {
                  buffer[numbytes] = '\0';
                  printf("Received from slot %i : %s",i,buffer); 
               }
            }
         }
      } 
      else {
         perror("select");
         continue;
      }
   }
   return 0;
}

On compile :

[root@localhost ~]# yum install gcc
...
[root@localhost ~]# gcc -o server server.c

On lance et on fait un petit test :

[root@localhost ~]# telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

PING

Attention il faut deux shell pour faire le test du telnet, un qui lance le ./server et l’autre qui fait le telnet.

Maintenant on va essayer de faire un conteneur de cette superbe application 😉 On va faire cela sur une base de Fédora.

[root@localhost ~]# docker build -t my-server .
Sending build context to Docker daemon 37.38 kB
Step 1 : FROM fedora
 ---> ddd5c9c1d0f2
Step 2 : MAINTAINER toto toto@cyber-neurones.org
 ---> Using cache
 ---> bb6bc55cbbfc
Step 3 : COPY ./server /sbin/server
 ---> 47dae6f4617a
Removing intermediate container adc5565dac13
Step 4 : EXPOSE 80
 ---> Running in 16c1c17c481b
 ---> 80328c54f6b4
Removing intermediate container 16c1c17c481b
Step 5 : CMD /sbin/server
 ---> Running in 621a41123e73
 ---> fea70bdfa97c
Removing intermediate container 621a41123e73
Successfully built fea70bdfa97c
[root@localhost ~]# cat Dockerfile
FROM fedora
MAINTAINER toto toto@cyber-neurones.org 
COPY ./server /sbin/server
# Le port en ecoute 
EXPOSE 80 
# Pour lancer postgres 
CMD ["/sbin/server"]

Ensuite on lance le container, et si j’essaye de lancer sur ce même port on voit qu’il y a une erreur :

[root@localhost ~]# docker run -p 80:80 --name my-server3 -d my-server 
9cf698cacc2e1e43d67c83b1b4c72e17f190559722e90517dca6095e9513a426
[root@localhost ~]# docker run -p 80:80 --name my-server4 -d my-server 
d40fe77df35aad7cec0e35d934a1dd73395eba40727f5367a529429c21264741
docker: Error response from daemon: driver failed programming external connectivity on endpoint my-server4 (11fe895fc0c58deab22b2cde63fb1f72cd58b1c21178a114897a699ec2e9e627): Bind for 0.0.0.0:80 failed: port is already allocated.

[root@localhost ~]# telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

PING

La prochaine étape serait de mettre HAproxy devant mon server sur le port 80. Pour ensuite faire du balancing sur plusieurs de mes servers.

Capture d’écran 2016-04-19 à 08.01.48

L’europe des lobbying a encore frappé …

Une fois de plus la loi sur le secret des affaires nous a fait prendre conscience du pouvoir des lobbying. Les seules personnes à avoir médiatisé sont Nicole Ferroni et Elise Lucet.

Voici la vidéo de Nicole Ferroni :

C’est la honte pour nos responsables politiques européens (surtout Constance Le Grip), à l’exception des Verts. Il faut dire que les Verts c’est spécial comme groupe pas un jour sans qu’il y ait une personne qui ne parte ou une personne qui fasse du racolage passif au chef du gouvernement pour l’intégrer 😉 .

On peut lire aussi ses articles : Le pouvoir du lobbying en Europe: un rapport tire la sonnette d’alarme. et aussi UNION EUROPÉENNE : LES LOBBIES FONT-ILS LA LOI À BRUXELLES ? .

En 2011, 3 députés se faisaient ainsi piégés par des journalistes du Sunday Times qui, se faisant passer pour lobbyistes, leur avait fait accepter jusqu’à 100 000 euros pour faire passer des amendements.

En premier lieu sur le manque de transparence des institutions mais aussi concernant les conflits d’intérêts et la pratique dite de la « porte tournante » qui désigne le fait que des députés, fonctionnaires ou commissaires passent au lobbying une fois leur mandat ou fonction publique achevés.  » Un cabinet est venu me voir récemment pour me proposer un emploi de lobbyiste, avoue ainsi Jean Paul Gauzès. Mais il est évident que je n’accepterai jamais ce genre de fonction. Tout simplement car cela entacherait tout ce que j’ai fait pendant mon mandat « 

La seule chose à faire c’est de signer cette pétition (https://www.change.org/p/ne-laissons-pas-les-entreprises-dicter-l-info-stop-directive-secret-des-affaires-tradesecrets )  en attendant les prochaines élections européennes pour sanctionner ses politiciens.

Quand on demande la protection et la reconnaissance des lanceurs d’alertes, on obtient une loi sur le « secret des affaires » et la décoration de la légion d’honneur à des partenaires financiers. Bien vu l’aveugle …

Misère.

Les innocentes (2016) de Anne Fontaine

Ah j’oubliais mais avant toute chose je dois dire que quand je vente les mérites « des visiteurs du soir« , en plus de payer un prix ridicule et d’avoir une ambiance chaleureuse, en début de projection à la place d’avoir des publicités comme dans les autres cinémas, qui coûtent trois fois le prix, on a droit a un court métrage. Cette fois c’était « Foudroyés« , drôle à souhait. C’est l’histoire d’un homme qui n’arrête pas de recevoir la foudre et d’une femme qui déclenche la pluie quand elle est heureuse … je n’en dis pas plus.

Que dire du film les innocentes, c’est le dialogue impossible entre la science et la religion. La science, sûre d’elle, athée qui ne cherche pas à discuter avec les religieux. Et, la religion, qui reste plongée dans ses moeurs et ses croyances. Les religieuses sont d’abord dans la secret, puis dans la honte. Une fois ses deux paliers passés, on va découvrir leurs souffrances. La souffrance physique, la souffrance psychologique car elles sont en plein doute face à leur amour de dieu, la souffrance du choix à faire pour les futurs enfants, et leurs avenirs. On va découvrir comment va s’installer la confiance, très surprenant, elle vient suite à une ruse (typhus). Et non comme on aurait pu le croire grâce a une vérité de la science. Les chemins des innocentes seront divers :

  • Le sucide.
  • Le départ avec abandon de l’enfant.
  • La souffrance avec refus des soins car c’est dieu qui impose cela.
  • Rester et garder les enfants.
  • La repentance.
  • ..

Un beau film qui montrent avant tout que la solidarité féminine peut dépasser certains clivages. Ce film est d’autant plus fort qu’il est inspiré d’une histoire vraie.

Maintenant je vais essayer de chercher dans ma mémoire un film de solidarité masculine (en mode cliché) et où les protagonistes dépassent leurs clivages….pas facile à trouver. Laissez moi encore un instant … si c’est bon j’ai trouvé Carnage (2011). Carnage est un très bon film ! Certains diront que c’est comme le Prénom (2012) , mais moi je vous dis : « Absolument pas ! » . Regardez ce film, on y voit des moments de solidarité masculine. Mais on n’est dans la Comédie et non pas dans le Drame 😉 . Le point commun entre Carnage et Le Prénom c’est que tout ce passe au même endroit, c’est quasiment le cas pour « Les innocentes ». On va dire qu’il y a deux lieux différents, ce sont les dialogues qui en font la richesse.

Mon conseil regarder « Les innocentes », puis « Carnage » et/ou « Le Prénom ».