Docker
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)
Installation Docker sur serveur Shuttle
Création bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| #!/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
1
2
| chmod +x docker-install.sh
./docker-install.sh
|
Gitlab
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
1
2
3
4
5
6
7
8
9
| 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| 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:
1
| sudo docker stop gitlab
|
Supprimez le conteneur existant:
Chargez la nouvelle image:
1
| sudo docker pull gitlab/gitlab-ce:latest
|
Exécuter le conteneur avec les options précédemment spécifiées:
1
2
3
4
5
6
7
8
9
10
11
| 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| # 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
1
2
| sudo nginx -t
sudo systemctl restart nginx
|
Ouvrir le port SSH pour gitlab
1
| 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
1
2
3
| 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 ,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.
1
2
| 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.
1
2
| 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] []**
1
2
| git remote set-url origin https://gitlab.ouestline.net/open-source/wikistatic.git https://github.com/yanspm/wikistatic.git
git remote -v
|
1
2
| 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
1
2
| cd media/devel/git/wikistatic/
git status
|
1
2
3
4
| 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
|
1
2
3
4
5
6
7
8
9
10
| 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.
|
1
2
3
4
5
6
7
8
9
10
| 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(-)
|
1
2
3
| 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
1
| git config --global credential.helper store
|
Le fichier de configuration ~/.gitconfig
1
2
3
4
5
| [user]
name = ouestgit
email = ouestgit@ouestline.net
[credential]
helper = store
|
Faire un premier git push
pour la saisie des informations de connexion
1
2
3
| 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
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 :
1
| docker commit -p ID_conteneur_a_sauvegarder Nom_Conteneur_de_sauvegarde
|
Liste des conteneurs
1
2
| 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
1
| docker commit -p 0adf06d6dff2 gitlab_backup_20170511
|
Il nous renvoie le checksum
1
| sha256:a023bba94702877d4de62ad3230581d4cf5f9fd1a78fe55c6b9397a6d71f5b37
|
Les images
1
2
3
| 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
1
| 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.
1
| docker load –i /media/yanplus/sauvegarde/docker/gitlab_backup_20170511.tar
|
Vérifier la présence de l’image restaurée
1
2
| REPOSITORY TAG IMAGE ID CREATED SIZE
gitlab_backup_20170511 latest a023bba94702 17 minutes ago 1.15GB
|
Arrêtez le conteneur courant:
1
| sudo docker stop gitlab
|
Exécuter le conteneur issu de la sauvegarde les options précédemment spécifiées:
1
2
3
4
5
6
7
8
9
10
11
| 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
1
2
3
4
| 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
1
| docker rmi a023bba94702
|
1
2
3
| Untagged: gitlab_backup_20170511:latest
Deleted: sha256:a023bba94702877d4de62ad3230581d4cf5f9fd1a78fe55c6b9397a6d71f5b37
Deleted: sha256:7694728f802343f2ea8f082d3a878c3134afcab3970f9eb38f8912986c3ab9b9
|
Désinstaller Docker
Pour une désinstallation complète
1
2
3
| 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
|