Docker

image

Docker a pour objectif de faciliter le déploiement d’applications, d’avoir plusieurs versions d’une même application sur un son serveur (phase de développement, tests), mais aussi d’automatiser le packaging d’applications. Avec Docker, on s’oriente vers de l’intégration et du déploiement en continu grâce au système de container.

De plus, Docker permet de garder son système de base propre, tout en installant de nouvelles fonctionnalités au sein de containers. En quelque sorte, on part d’une base qui est le système d’exploitation et on ajoute différentes briques conteneurisées qui sont les applications.

On se connecte sur shuttle (yunohost yanspm.com et ouestline.net)

sshm shuttle

Installation Docker sur serveur Shuttle

Création bash

nano docker-install.sh
#!/bin/bash

# compiled from https://docs.docker.com/engine/installation/linux/debian/#/debian-jessie-80-64-bit

sudo apt-get update
sudo apt-get dist-upgrade -y
sudo apt-get install apt-transport-https ca-certificates -y

sudo sh -c "echo deb https://apt.dockerproject.org/repo debian-jessie main > /etc/apt/sources.list.d/docker.list"
sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

sudo apt-get update
sudo apt-cache policy docker-engine
sudo apt-get install docker-engine -y

sudo service docker start
sudo docker run hello-world

sudo group add docker
sudo groupadd docker
sudo gpasswd -a $USER docker
sudo service docker restart

Droits et exécution

chmod +x docker-install.sh
./docker-install.sh

Gitlab

image

Installer image GitLab sur un seul conteneur

Les images GitLab Docker sont des images monolithiques de GitLab exécutant tous les services nécessaires sur un seul conteneur.

Installation GitLab Docker Image

Exécuter image GitLab

sudo docker run --detach \
    --hostname gitlab.ouestline.net \
    --publish 4443:443 --publish 8929:80 --publish 2922:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

Cela va télécharger et démarrer un conteneur GitLab CE et publier les ports nécessaires pour accéder à SSH, HTTP et HTTPS. Toutes les données GitLab seront stockées sous la forme de sous-répertoires de /srv/gitlab/. Le conteneur redémarre automatiquement après un redémarrage du système.

Vous pouvez maintenant vous connecter à l’interface Web comme expliqué dans Après avoir démarré un conteneur.

Paramétrage lanceur image gitlab

sudo docker stop gitlab
sudo docker rm gitlab

sudo docker run --detach \
    --hostname gitlab.ouestline.net \
    --publish 192.168.0.45:4443:443 \
    --publish 192.168.0.45:8929:80 \
    --publish 192.168.0.45:2922:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

Mise à niveau image GitLab

Pour mettre à niveau GitLab vers une nouvelle version, vous devez:
Arrêtez le conteneur courant:

 sudo docker stop gitlab

Supprimez le conteneur existant:

 sudo docker rm gitlab

Chargez la nouvelle image:

 sudo docker pull gitlab/gitlab-ce:latest

Exécuter le conteneur avec les options précédemment spécifiées:

sudo docker run --detach \
    --hostname gitlab.ouestline.net \
    --publish 192.168.0.45:4443:443 \
    --publish 192.168.0.45:8929:80 \
    --publish 192.168.0.45:2922:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

Configuration vhost serveur shuttle

Installer Gitlab en https avec Docker et Nginx

Créer un proxy sur le serveur shuttle
On utilise l’adresse ip 192.168.0.45 du serveur shuttle et le port 8929

Utilisation du sous domaine gitlab.ouestline.net
Modifier le fichier de configuration vhost /etc/nginx/conf.d/subdomain.ouestline.net.conf
Ajouter en fin de fichier

# proxy gitlab
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name gitlab.ouestline.net;

    include ssl_params;

    ssl_dhparam /etc/ssl/private/dh4096.pem;

    location / {
      proxy_pass http://192.168.0.45:8929;
    }
  #logs
    access_log /var/log/nginx/gitlab.ouestline.net-access.log;
    error_log /var/log/nginx/gitlab.ouestline.net-error.log;
}

Relancer le serveur après vérification

sudo nginx -t
sudo systemctl restart nginx

Ouvrir le port SSH pour gitlab

sudo yunohost firewall allow TCP 2922

Utilisation GitLab

GitLab Community Edition

Accéder au gitlab https://gitlab.ouestline.net

Premier accès au site

Saisir un mot de passe et confirmer à la première connexion
Cliquer ensuite sur Register pour la saisie d’un utilisateur
Name : ouestgit
Username : ouestgit Email : ouestgit@ouestline.net Password (8 car min) : xxxxxxxxxx

Cliquer sur New group

Group : open-source Group name : yanspm
Description : Projets divers
Public The group and any public projects can be viewed without any authentication.
Cliquer sur Create group

Cliquer sur New Project
Public The project can be cloned without any authentication.
Project Description : Création de site statique jekyll
Cliquer sur import project from git repo by url
Git repository URL : https://github.com/yanspm/wikistatic.git
Project name : wikistatic puis cliquer sur Create project

Le projet est importé de Git

Sur le poste distant

Clé SSH rsa pour gitlab

Créer une clé SSH rsa pour gitlab

cd ~/.ssh
ssh-keygen -t rsa -b 4096 -f gitlabkey -C "ouestgit@ouestline.net"
cat ~/.ssh/gitlabkey.pub  # copier le contenu du fichier dans le presse papier

Accéder au gitlab https://gitlab.ouestline.net
Cliquer en haut à doite de l’écran sur alt text ,puis sur Settings dans la fenêtre déroulante
Onglet SSH Keys
Coller le contenu de la clé publique (cat ~/.ssh/gitlabkey.pub), Title Clé publique ouestgit
Cliquer sur Add key

renseigner votre nom et votre adresse de courriel.

git config --global user.name ouestgit
git config --global user.email ouestgit@ouestline.net
Git : Liste des entrepôts distants associés

Git de base
Quand un entrepôt est créé avec la commande clone, un lien vers l’entrepôt d’origine est conservé. Pour obtenir la liste des entrepôts distants associés à un entrepôt on utilise la commande git remote.

git remote -v
origin	https://github.com/yanspm/wikistatic.git (fetch)
origin	https://github.com/yanspm/wikistatic.git (push)

Modifier les URL , passage de github à gitlab
Syntaxe : **git remote set-url [–push] []**

git remote set-url origin https://gitlab.ouestline.net/open-source/wikistatic.git https://github.com/yanspm/wikistatic.git
git remote -v
origin	https://gitlab.ouestline.net/open-source/wikistatic.git (fetch)
origin	https://gitlab.ouestline.net/open-source/wikistatic.git (push)
Git : Vérifier le status du projet wikistatic
cd media/devel/git/wikistatic/
git status
Sur la branche master
Votre branche est en avance sur 'origin/master' de 1 commit.
  (utilisez "git push" pour publier vos commits locaux)
rien à valider, la copie de travail est propre
git push
Username for 'https://gitlab.ouestline.net': ouestgit@ouestline.net
Password for 'https://ouestgit@ouestline.net@gitlab.ouestline.net': 
To https://gitlab.ouestline.net/open-source/wikistatic.git
 ! [rejected]        master -> master (fetch first)
error: impossible de pousser des références vers 'https://gitlab.ouestline.net/open-source/wikistatic.git'
astuce: Les mises à jour ont été rejetées car la branche distante contient du travail que
astuce: vous n'avez pas en local. Ceci est généralement causé par un autre dépôt poussé
astuce: vers la même référence. Vous pourriez intégrer d'abord les changements distants
astuce: (par exemple 'git pull ...') avant de pousser à nouveau.
astuce: Voir la 'Note à propos des avances rapides' dans 'git push --help' pour plus d'information.
git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0)
Dépaquetage des objets: 100% (3/3), fait.
Depuis https://gitlab.ouestline.net/open-source/wikistatic
   ec0a967..1b1c38a  master     -> origin/master
Mise à jour 4ba2723..1b1c38a
Fast-forward
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
git push
Username for 'https://gitlab.ouestline.net': ouestgit@ouestline.net
Password for 'https://ouestgit@ouestline.net@gitlab.ouestline.net': 
Everything up-to-date
Git : Sauvegarde log/mp

Commandes pour stocker les informations de connexion au gitlab

git config --global credential.helper store

Le fichier de configuration ~/.gitconfig

[user]
	name = ouestgit
	email = ouestgit@ouestline.net
[credential]
	helper = store

Faire un premier git push pour la saisie des informations de connexion

git push
Username for 'https://gitlab.ouestline.net': ouestgit@ouestline.net
Password for 'https://ouestgit@ouestline.net@gitlab.ouestline.net': 
Everything up-to-date

Puis un second git push , pas de saisie

git push
Everything up-to-date

Docker : Sauvegarde Restauration Suppression

Sauvegarde / Restauration de Conteneurs DOCKER
Docker backup – Easy steps to backup and restore your containers

Lorsque l’on veut enregistrer les modifications faites sur un conteneur on utilise la commande commit qui vas se charger de créer une image instantanée de notre conteneur. Les modifications faites sur le 1er conteneur sont donc tout enregistrées dans notre image. L’intérêt ici est de pouvoir désormais instancier un conteneur directement à partir de l’image que l’on a enregistrée.
Syntaxe :

docker commit  -p  ID_conteneur_a_sauvegarder  Nom_Conteneur_de_sauvegarde

Liste des conteneurs

sudo -s
docker ps
CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS                PORTS                                                                              NAMES
0adf06d6dff2        gitlab/gitlab-ce:latest   "/assets/wrapper"   3 days ago          Up 3 days (healthy)   192.168.0.45:2922->22/tcp, 192.168.0.45:8929->80/tcp, 192.168.0.45:4443->443/tcp   gitlab

Sauvegarde interne

docker commit  -p  0adf06d6dff2 gitlab_backup_20170511

Il nous renvoie le checksum

sha256:a023bba94702877d4de62ad3230581d4cf5f9fd1a78fe55c6b9397a6d71f5b37

Les images

docker images
gitlab_backup_20170511   latest              a023bba94702        About a minute ago   1.15GB
gitlab/gitlab-ce         latest              9eacf3c0aeec        5 days ago           1.1GB
hello-world              latest              48b5124b2768        3 months ago         1.84kB

Sauvegarde locale d’une image (dans un autre dossier)

Si vous souhaitez sauvegarder votre image en local dans un fichier compressé (tar) afin de le de le déplacer sur un serveur hors ligne ou même sur votre espace de sauvegarder privée. Vous devez utiliser la commande docker Save et vous lui passé le chemin et le nom du fichier de sauvegarder ainsi que le nom de l’image à sauvegarder (l’image que l’on a enregistrée précédent).

Créer un dossier /media/yanplus/sauvegarde/docker sur le shuttle

docker save -o  /media/yanplus/sauvegarde/docker/gitlab_backup_20170511.tar   gitlab_backup_20170511

Restauration depuis un conteneur en local ou un espace privé

Pour restaurer une image que nous avons sauvegardée en local, il suffit d’utiliser la commande docker load et de lui indiquer en paramètre le chemin d’accès à notre fichier de sauvegarde.

docker load –i  /media/yanplus/sauvegarde/docker/gitlab_backup_20170511.tar

Vérifier la présence de l’image restaurée

docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
gitlab_backup_20170511   latest              a023bba94702        17 minutes ago      1.15GB

Arrêtez le conteneur courant:

 sudo docker stop gitlab

Exécuter le conteneur issu de la sauvegarde les options précédemment spécifiées:

sudo docker run --detach \
    --hostname gitlab.ouestline.net \
    --publish 192.168.0.45:4443:443 \
    --publish 192.168.0.45:8929:80 \
    --publish 192.168.0.45:2922:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab_backup_20170511:latest

Supprimer une image

Liste des images

docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
gitlab_backup_20170511   latest              a023bba94702        About an hour ago   1.15GB
gitlab/gitlab-ce         latest              9eacf3c0aeec        5 days ago          1.1GB
hello-world              latest              48b5124b2768        3 months ago        1.84kB

On efface en fournissant ID

docker rmi a023bba94702
Untagged: gitlab_backup_20170511:latest
Deleted: sha256:a023bba94702877d4de62ad3230581d4cf5f9fd1a78fe55c6b9397a6d71f5b37
Deleted: sha256:7694728f802343f2ea8f082d3a878c3134afcab3970f9eb38f8912986c3ab9b9

Désinstaller Docker

Pour une désinstallation complète

sudo apt-get purge docker-engine
sudo apt-get autoremove --purge docker-engine
rm sudo -rf /var/lib/docker # This deletes all images, containers, and volumes