Não vou perder tempo explicando o que é o docker ou pra que server o docker vamos para parte prática.
Docker - https://www.docker.com/
Instalação no Linux: http://docs.docker.com/linux/step_one/
Depois do docker instalado vamos a um exemplo prático.
Resolvi substituir alguns serviços da minha minha máquina e usar o docker e o primeiro serviço foi o MySql:
Instalando a imagem do MySql:
sudo docker pull mysql - baixa o docker (imagem) com mysql
O parâmetro "pull" irá baixar a imagem "mysql" dos repositório do docker, https://hub.docker.com/_/mysql/
sudo docker images - Listas as imagens baixadas/criadas na máquina
O resultado fica assim:
ubuntu@ubuntu:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
mysql latest c29b1276a98a 12 days ago 359.8 MB
ubuntu@ubuntu:~$
Agora vamos cria o container para usar o mysql, em resumo o container nada mais é do que uma instancia real da imagem, o container usa a imagem instalada e aplica as configurações para que o serviço ou servidor funcione. Podemos ter vários container de uma unica imagem e cada container tem sua funcionalidade.
Como exemplo irei criar 2 servidores mysql, serão 2 container:
1 - Servidor mysql com ip próprio:
sudo docker run --name mymysql -e MYSQL_ROOT_PASSWORD=root1 -d mysql
Parâmetros:
run - executa a imagem criando um container
--name - da uma nome para o container
mymysql - nome do container fica a critério da pessoal
-e - setando variaveis de ambiente no exemplo acima estamos setando a variavel MYSQL_ROOT_PASSWORD
-d - deixa o container rodando em background
mysql - neste exemplo é nome da imagem no repositório que baixar anteriormente
Para ver se o container esta rodando:
sudo docker ps
O resultado fica assim:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aed91beee6fe mysql "/entrypoint.sh mysql" 3 days ago Up 5 seconds 3306/tcp mymysql
Agora temos um servidor de MySql rodando no docker vamos pegar o ip para podemos usar na nossa aplicação:
sudo docker inspect aed91beee6fe
Parâmetros:
inspect - returna informações do container e da imagem
aed91beee6fe - Id do container, cada container tem um id próprio
ubuntu@ubuntu-Aspire-E1-571:~$ sudo docker inspect aed
[
{
"Id": "aed91beee6fe517d6358a39a0ba0b02c2daec2a4f2c393405ccba451b446130b",
"Created": "2015-11-20T02:26:58.154562367Z",
"Path": "/entrypoint.sh",
"Args": [
"mysqld"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 13163,
"ExitCode": 0,
"Error": "",
"StartedAt": "2015-11-23T13:07:50.033191231Z",
"FinishedAt": "2015-11-20T16:28:28.493679426Z"
},
...........,
"Mounts": [
{
"Name": "4dcf2234e155ef26d1f22e0279634b7594b6cfa18af4b04f7c6afe3f699e131a",
"Source": "/var/lib/docker/volumes/4dcf2234e155ef26d1f22e0279634b7594b6cfa18af4b04f7c6afe3f699e131a/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "",
"RW": true
}
],
"Config": {
"Hostname": "aed91beee6fe",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"3306/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"MYSQL_ROOT_PASSWORD=root6Beer",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"MYSQL_MAJOR=5.7",
"MYSQL_VERSION=5.7.9-1debian8"
],
"Cmd": [
"mysqld"
],
"Image": "mysql",
"Volumes": {
"/var/lib/mysql": {}
},
"WorkingDir": "",
"Entrypoint": [
"/entrypoint.sh"
],
"OnBuild": null,
"Labels": {},
"StopSignal": "SIGTERM"
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "5e68cbcf0e18acad52ca101565fcc9df5b137a89ca018ac351cf9a14975d9344",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"3306/tcp": null
},
"SandboxKey": "/var/run/docker/netns/5e68cbcf0e18",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "71d73085e4009639f332caf43689e3ba6b3331c8148a1105922b4d797adb0eff",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:03",
"Networks": {
"bridge": {
"EndpointID": "71d73085e4009639f332caf43689e3ba6b3331c8148a1105922b4d797adb0eff",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:03"
}
}
}
}
]
ubuntu@ubuntu:~$
Ficando assim os dados para conexão com o banco e pode ser usando em qualquer aplicação:
hostname: 172.17.0.3 Port: 3306 User: root Password: root1
Agora vamos a outro exemplo, no exemplo acima criei uma servidor com um ip próprio, mas existe uma opção para usarmos como se fosse localhost vamos ao exemplo:
sudo docker run -p 3306:3306 --name mymysql2 -e MYSQL_ROOT_PASSWORD=root1 -d mysql
Como podemos ver o que difere é o parâmetro 3306:3306 aqui estamos expondo a porta 3306 do container que será acessada também pela porta 3306 do localhost.
Ficando assim para conexão com o banco:
hostname: localhost Port: 3306 User: root Password: root1
E temos dois servidores de banco rodando na nossa maquina, um em cada container criado:
ubuntu@ubuntu:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
52d08d09e575 mysql "/entrypoint.sh mysql" 3 days ago Up 21 hours 0.0.0.0:3306->3306/tcp mymysql2
aed91beee6fe mysql "/entrypoint.sh mysql" 3 days ago Up 46 minutes 3306/tcp mymysql
ubuntu@ubuntu:~$