//Primi passi con Docker

Primi passi con Docker

0 votes
Share on FacebookShare on Google+Tweet about this on TwitterEmail this to someonePrint this page

This post has already been read 2212 times!

Mi scuso prima di tutto per aver aspettato tanto nel continuare la serie di tutorial su docker.
Inziamo, una volta terminato il processo di installazione possiamo iniziare direttamente a giocare con i dockers, prima di tutto dovremmo fare un giro in Docker Hub un repository di immagini pronte all uso.

Docker dispone di una serie di immagini ufficiali di postgres, redis, mysql, ubuntu, rabbitmq, mongodb … in più è anche possibile trovare immagini create dai propri utenti che pubblicano le loro proprie immagini customizzate.
nel mio caso caricherò un contenitore con il server mysql :

$ docker run --name mysql-server-name -e MYSQL_ROOT_PASSWORD=mysql_password -d mysql:5.6

Una volta scaricato il contenitore il server verrà avviato e potremo controllare che  sia realmente online:

matteo@Duff:~/app/dockers$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
090c1dd6665a mysql:5.6 "docker-entrypoint.sh" 2 minutes ago Up 2 minutes 3306/tcp mysql-server-name

Perfetto a questo punto avvieremo una console mysql :

$ docker run -it --link mysql-server-name:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

Ci verrà mostrata nel terminale direttamente la shell :

mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.30 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases
-> ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

mysql>

Creiamo un database e usciamo :

mysql> create database test; 
Query OK, 1 row affected (0.00 sec)

mysql> exit
Bye

Rientrando possiamo controllare che il database continua ad esistere.

matteo@Duff:~/app/dockers/redis$ docker run -it --link mysql-server-name:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.30 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases; 
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.01 sec)

mysql>

Nel caso avessimo un altro docker con l’applicazione che comunica con il database basterebbe eseguire il seguente comando per avviarlo :

$ docker run --name app-that-use-mysql --link mysql-server-name:mysql -d application-that-uses-mysql

Per aprire un terminale nel server basterà :

matteo@Duff:~/app/dockers$ docker exec -it mysql-server-name bash
root@090c1dd6665a:/# ls
bin docker-entrypoint-initdb.d home media proc sbin tmp
boot entrypoint.sh lib mnt root srv usr
dev etc lib64 opt run sys var
root@090c1dd6665a:/# mysql -p
Enter password: 
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.30 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases; 
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)

mysql>

dopo essere usciti dal contenitore, se vogliamo salvare le modifiche fatte sul filesystem come i file creati possiamo eseguire il comando :

matteo@Duff:~/app/dockers/redis$ docker commit -m "mysqlserver-with-test-db" -a "matteo" 090c1dd6665a my-mysql-server:test-db
e583ed3e845d25c0a4cc87436f0d04220c10ef7fb4ea0c38f6407dae35c603a2
matteo@Duff:~/app/dockers/redis$

Questo sfortunatamente non salverà le modifiche fatte al database, nel caso avessimo la necessità di salvare le modifiche al db dopo ogni salvataggio, la forma piu semplice è quella di crearsi una directory da montare all avvio del container ad esempio:

docker run --name my-container-name -v /home/matteo/app/dockers/mysql_data/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql/mysql-server

Per listare le immagini che abbiamo in locale possiamo eseguire :

matteo@Duff:~/app/dockers$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
my-mysql-server test-db e583ed3e845d About a minute ago 324.6 MB

Per stoppare un contenitore :

matteo@Duff:~/app/dockers$ docker stop 090c1dd6665a
090c1dd6665a
matteo@Duff:~/app/dockers$

Per cancellare un container :

docker rm <container id>

 

Infine  per cancellare un immagine :

docker rmi <image id>