PostgreSQL com docker em OS-X

fundo

  • Docker usando sistema de virtualização de peso leve fornecido por linux kernal que introduziu como contêiner
  • Mais informações – contêineres Linux
  • Uma vez que o docker usa os recursos do Linux Kernal, a máquina docker deve ser executada no Linux
  • Para executar o docker no OS-X, temos que usar a máquina virtual Linux
  • Estamos usando boot2docker leve linux VM aqui
  • O diagrama a seguir explica resumidamente como o docker funciona no OS-X

Cenário

  • O servidor Docker é executado na VM boot2docker (host docker)
  • O cliente Docker é executado na máquina host OS-X
  • Podemos interagir com o docker através da VM boot2docker

Instale boot2docker

  • Primeiro instale o VirtualBox
  • Em seguida, instale o boot2docker e outros pacotes, estou usando o Homebrew para instalar todos os pacotes
brew update

## install boot2docker
brew install boot2docker


## install docker client
brew install docker


## up boot2docker
boot2docker init

boot2docker up
  • Execute os seguintes comandos para visualizar as informações do docker
## docker info
docker info


## boot2docker info
boot2docker info

boot2docker status

boot2docker ip


## docker host
echo $DOCKER_HOST

Docker e postgres

Pesquisar postgres

  • Você pode obter a versão mais recente da imagem postgres no docker-registry
  • Se você tiver seu próprio registro docker privado, você também pode obter o postgres a partir dele
  • Mais informações – usando o registro docker privado
  • Para obter um exemplo, use o seguinte comando para pesquisar postgres em docker-registry
docker search "postgres"
  • A seguir está o resultado da pesquisa

Cenário

Instale o postgres

  • Você pode instalar o postgres via docker runcomando
docker run -p 5432:5432 \
--name postgres-db \
-d postgres:latest
  • Poucas coisas para notar

    1. -p 5432:5432 define o encaminhamento de porta, significa encaminhar a porta do contêiner docker 5432 para o posto de host docker 5432
    2. --name postgres-db define o nome do container
    3. -d permite executar o contêiner como um demônio
    4. postgres:latest define o nome do contêiner e a tag em docker-registry
  • Se você baixar o postgres de seu próprio registro (registro privado), deverá especificar os detalhes do registro com o comando docker run

docker run -p 5432:5432 \
--name postgres-db \
-d 10.2.4.201/postgres:2.48
  • Poucas coisas para notar

    1. 10.2.4.201 define host de registro privado
    2. postgres:2.48 define o nome do contêiner postgres e a tag no registro
  • Agora instalamos com sucesso o postgres com docker (no contêiner do docker)

Executar postgres

  • Temos que iniciar o contêiner postgres recém-criado
## docker start <container-name>
docker start postgres
-db
  • Emita um docker pscomando para verificar o status dos contêineres
docker ps -a
  • A saída seria como abaixo (listará os detalhes do contêiner)

Cenário

Conecte-se ao postgres

  • Agora você pode se conectar ao serviço postgres de pgAdmin(ou qualquer outro cliente postgres)
  • A seguir estão meus parâmetros de conexão em pgAdmin3

Cenário

  • Poucas coisas para notar,

    1. Estou tentando conectar o serviço postgres via localhost
    2. Isso dará um erro Failed connect to localhost:5432; Connection refused
  • A razão para este erro é que estamos tentando nos conectar de nossa máquina OS-X hostlocalhost:5432

  • Mas nossas regras de encaminhamento de porta definem encaminhar a porta do contêiner docker 5432 para o posto docker host 5432 (em boot2docker VM)

  • NÃO é para host OS-X porta 5432

  • Para simplesmente resolver esse problema, podemos nos conectar a boot2docker VM (docker host)

  • Use o seguinte comando para obter o IP boot2docker

boot2docker ip

## output 192.168.59.103
  • Meus últimos parâmetros de conexão de trabalho estão abaixo

Cenário

Mais sobre boot2docker e encaminhamento de porta

docker e docker-host

  • Como mencionei anteriormente, docker encaminhar posts para docker host
  • Em nosso cenário, boot2docker é o host docker (não nossa máquina OS-X)

Porta de encaminhamento para host local OS-X

  • Se você deseja acessar o postgres via localhost, você deve encaminhar a porta 5432 do boot2docker para a porta OS-X 5432
  • O diagrama a seguir mostra a visão geral das camadas de encaminhamento de porta

Cenário

Definir regras de encaminhamento de porta

  • VirtaulBox fornece um pacote VBoxManageque pode ser usado para definir / modificar a configuração da caixa virtual
  • Podemos usar VBoxManagepara especificar as regras de encaminhamento de porta (do boot2docker para o host OS-X)
  • Execute os seguintes comandos do OS-X
## first need to down boot2docker
boot2docker down


## define port forwarding rules
VBoxManage modifyvm "boot2docker-vm" --natpf1 "postgres-port,tcp,127.0.0.1,5432,,5432"

## up boot2docker
boot2docker up


## start postgres
docker start postgres
-db
  • Poucas coisas para notar,

    1. postgres-port – nome da modificação
    2. 127.0.0.1 – localhost
    3. 5432,,5432 – Posto da máquina VM (boot2docker) e porta da máquina host (máquina OS-X)
  • Agora você pode se conectar ao postgres via localhost(sem boot2docker ip – )192.168.59.103

  • Se você deseja excluir a regra de encaminhamento de porta definida anteriormente, use o seguinte comando

## first need to down boot2docker
boot2docker down


## delete port forwarding rule
VBoxManage modifyvm "boot2docker-vm" --natpf1 delete "postgres-port"

## up boot2docker
boot2docker up

Referência