= README Για να συνδεθούμε στην εικονική μηχανή τρέχουμε την εντολή. [source, console] ---- ssh user@ password: **** ---- image::https://i.imgur.com/P4ViujF.png[] [CAUTION] Πρέπει να είστε συνδεδεμένοι στο https://wiki.noc.uniwa.gr/doku.php?id=vpn_service_openvpn[VPN - Πανεπιστημίου Δυτικής Αττικής] == Τεχνολογίες Για την υλοποίηση της εργασίας χρησιμοποιήθηκε η τεχνολογία *Docker* το οποίο εικονικοποιεί σε επίπεδο λειτουργικού συστήματος. [source, console] ---- sudo apt-get update sudo apt install docker.io sudo systemctl start docker sudo systemctl enable docker ---- [TIP] Για να ελέγξουμε ότι η υπηρεσία του *Docker* λειτουργεί εκτελούμε την εντολή [source, console] ---- docker --version ---- == Εκτέλεση Εργασίας Αρχικά, δημιουργούμε το δικό μας image για τον *nginx* ανάλογα με τις ανάγκες της υπηρεσίας μας. Το αποθηκεύουμε σε ένα αρχείο ονομάζοντας το [underline]#Dockerfile# Επόμενο βήμα είναι η εκτέλεση της παρακάτω εντολής για τη δημιουργία του image [source, console] ---- docker build -f Dockerfile -t anginx . ---- [NOTE] ==== Οptions: * -f προσδιορίζει το αρχείο για το build * -t tag (το όνομα του image) * "." είναι το current directory ==== Όλα τα services τα οποία θα τρέξουν στην εργασία μας βρίσκονται στο αρχείο [underline]#docker-compose.yml# Αναλυτικά: === Nginx [source, yml] ---- nginx: image: anginx #image from docker building my Dockerfile (docker build -f Dockerfile -t anginx .) // <1> container_name: production_nginx // <2> volumes: // <3> - /home/user/docker/nginx.conf:/etc/nginx/conf.d/default.conf - /home/user/docker/cert.pem:/etc/nginx/public.crt - /home/user/docker/key.pem:/etc/nginx/private.key ports: // <4> - 9080:80 - 9443:443 networks: // <5> - main_net ---- === MariaDB [source, yml] ---- mariadb: image: mariadb // <1> container_name: mariadb // <2> volumes: // <3> - db_data:/var/lib/mysql environment: // <8> MYSQL_ROOT_PASSWORD: wordpress MYSQL_DATABASE: wordpress networks: // <5> - main_net ---- === WordPress [source, yml] ---- wordpress: image: wordpress:latest // <1> container_name: wordpress // <2> restart: always deploy: #create replicas with specific resources // <6> mode: replicated replicas: 2 # max_replicas_per_node: 1 resources: limits: #max resources cpus: '0.50' memory: 50M reservations: #default resources cpus: '0.25' memory: 20M ports: // <4> - 80:80 volumes: // <3> - wp-app:/var/www/html environment: // <8> WORDPRESS_DB_HOST: mariadb:3306 WORDPRESS_DB_NAME: wordpress WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: wordpress networks: // <5> - main_net depends_on: // <7> - mariadb ---- === PHPMyAdmin [source, yml] ---- phpmyadmin: image: phpmyadmin/phpmyadmin // <1> container_name: phpmyadmin // <2> deploy: // <6> mode: replicated replicas: 2 # max_replicas_per_node: 1 resources: limits: cpus: '0.50' memory: 50M reservations: cpus: '0.25' memory: 20M environment: // <8> PMA_HOST: mariadb MYSQL_ROOT_PASSWORD: wordpress PMA_PORT: 3306 ports: // <4> - 8080:80 networks: // <5> - main_net ---- === Minio [source, yml] ---- minio1: image: minio/minio:RELEASE.2020-04-10T03-34-42Z // <1> hostname: minio1 volumes: // <3> - minio1-data:/export ports: // <4> - "9001:9000" networks: // <5> - minio_distributed deploy: // <6> restart_policy: delay: 10s max_attempts: 10 window: 60s placement: constraints: - node.labels.minio1==true command: server http://minio{1...4}/export environment: // <8> MINIO_ACCESS_KEY: AKIAIOSFODNN7EXAMPLE MINIO_SECRET_KEY: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY # secrets: # - secret_key # - access_key healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 ---- === Configuration Options: :nofooter: <1> image: Το image file από το οποίο θα τρέξει το service <2> container_name: Είναι το όνομα του service <3> volumes: "Mount host paths or named volumes from our VM to the service" <4> ports: Είναι τα ports τα οποία κάνουμε expose "στον έξω" κόσμο <5> networks: Είναι το εικονικό δίκτυο στο οποίο θα τρέξει το service <6> deploy: Κάνουμε specify τα resources και τον αριθμό των replicas που θα τρέξουν <7> depends_on: "Express dependency between services" <8> environment: "Add environment variables"