
Os contêineres são feitos para serem efêmeros e, portanto, escalam muito bem para aplicativos sem estado. Os contêineres com estado, como o Couchbase, precisam ser tratados de forma diferente. Gerenciando a persistência para contêineres do Docker fornecem uma excelente visão geral de como gerenciar a persistência para contêineres com estado.
Este blog explicará como usar o Plug-ins de volume do Docker e Portworx para criar um contêiner com estado.
Por que a Portworx?
Portworx é um serviço de dados de contêiner fácil de implantar que oferece persistência, replicação, instantâneos, criptografia, RBAC seguro e muito mais. Alguns dos benefícios são:
- Volumes granulares de contêineres - A Portworx pode pegar vários volumes EBS por host, agregar a capacidade e derivar volumes virtuais (soft) granulares de contêineres por contêiner.
- HA de zona de disponibilidade cruzada - A Portworx protegerá os dados, em nível de bloco, em várias instâncias de computação em zonas de disponibilidade. Como os controladores de replicação reiniciam os pods em nós diferentes, os dados ainda estarão altamente disponíveis nesses nós.
- Suporte para operações de dados corporativos - A Portworx implementa snapshots granulares de contêineres, classe de serviço e classificação por níveis sobre os volumes físicos disponíveis.
- Facilidade de implementação e provisionamento - A própria Portworx é implantada como um contêiner e integrada às ferramentas de orquestração. O DevOps pode provisionar programaticamente o armazenamento granular do contêiner com qualquer propriedade, como tamanho, classe de serviço, chave de criptografia etc.
Configurar a instância do AWS EC2
A Portworx é executada somente no Linux ou no CoreOS. Configure uma instância do Ubuntu no AWS EC2:
- Inicie a instância do Ubuntu 14.04 com
m3.mediumtipo de instância. Certifique-se de adicionar a porta 8091 às regras de segurança de entrada. Isso permite que Console da Web do Couchbase para ficar acessível depois. - Faça login na instância do EC2 usando o comando:
ssh -i ~/.ssh/arun-cb-west1.pem ubuntu@ - Atualize a instância do Ubuntu:
sudo apt-get update - Instalar o Docker:
curl -sSL https://get.docker.com/ | sh. Instruções mais detalhadas estão disponíveis em Obter o Docker para Ubuntu. - Habilite o acesso não raiz para o comando docker:
sudo usermod -aG docker ubuntu - Faça logout da instância do EC2 e faça login novamente
Criar volume do AWS EBS
- Crie um volume EBS de 10 GB usando o console do EC2, conforme explicado em documentos.
- Obtenha o ID da instância no console do EC2. Anexe esse volume à instância do EC2 usando esse ID de instância e use o nome de dispositivo padrão
/dev/sdf.

- Uso
lsblkna instância do EC2 para verificar se o volume está anexado à instância:12345NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTxvda 202:0 0 8G 0 disk└─xvda1 202:1 0 8G 0 part /xvdb 202:16 0 30G 0 disk /mntxvdf 202:80 0 10G 0 disk
Contêineres Portworx
- A composição do armazenamento físico de cada nó, todos os volumes provisionados no cluster, bem como seus mapeamentos de contêineres, são armazenados em um cluster etcd. Inicie um cluster etcd:
12345docker run -v \/data/varlib/etcd \-p 4001:4001 \-d \portworx/etcd:latest - Por padrão, os volumes montados na raiz não podem ser compartilhados. Ative essa opção usando o comando:
1sudo mount --make-shared /
Isso é explicado com mais detalhes em Configuração do Ubuntu e montagens compartilhadas. - O contêiner do PX-Developer (px-dev) em um servidor com o Docker Engine transforma esse servidor em um nó de armazenamento de expansão horizontal. O PX-Enterprise, por outro lado, oferece suporte a vários clusters e várias nuvens, em que o armazenamento sob gerenciamento pode estar no local ou em uma nuvem pública como a AWS.
Para este blog, iniciaremos um contêiner px-dev:
123456789101112docker run --restart=always --name px -d --net=host \--privileged=true \-v /run/docker/plugins:/run/docker/plugins \-v /var/lib/osd:/var/lib/osd:shared \-v /dev:/dev \-v /etc/pwx:/etc/pwx \-v /opt/pwx/bin:/export_bin:shared \-v /var/run/docker.sock:/var/run/docker.sock \-v /var/cores:/var/cores \-v /usr/src:/usr/src \--ipc=host \portworx/px-dev -daemon -k etcd://localhost:4001 -c cluster1 -s /dev/xvdf
Detalhes completos sobre esse comando estão disponíveis em Executar o PX com o Docker. - Procure por registros que usem
registros do contêiner docker -f pxe fique atento às declarações a seguir:
1234time="2017-02-16T05:33:26Z" level=info msg="Initialize the scheduler client and the scheduler watch"time="2017-02-16T05:33:26Z" level=info msg="Started a kvdb watch on key : scheduler/containers"time="2017-02-16T05:33:26Z" level=info msg="Started a kvdb watch on key : scheduler/volumes"time="2017-02-16T05:33:26Z" level=info msg="Started a kvdb watch on key : scheduler/nodes/list" - Verifique o status dos volumes anexados que estão disponíveis para a Portworx usando
sudo /opt/pwx/bin/pxctl statuspara ver a saída:
12345678910111213141516Status: PX is operationalNode ID: 679b79b1-f4c3-413e-a8e0-c527348647c9IP: 172.31.25.21Local Storage Pool: 1 poolPool IO_Priority Size Used Status Zone Region0 LOW 10 GiB 266 MiB Online a us-west-1Local Storage Devices: 1 deviceDevice Path Media Type Size Last-Scan0:1 /dev/xvdf STORAGE_MEDIUM_SSD 10 GiB 16 Feb 17 05:33 UTCtotal - 10 GiBCluster SummaryCluster ID: cluster1Node IP: 172.31.25.21 - Capacity: 266 MiB/10 GiB Online (This node)Global Storage PoolTotal Used : 266 MiBTotal Capacity : 10 GiB
Ele mostra a capacidade total disponível e utilizada.
Volume do Docker
- Vamos criar um volume do Docker:
1docker volume create -d pxd -o size=10G -o fs=ext4 --name cbvol
Mais detalhes sobre esse comando estão em Criar volumes com o Docker. - Verifique a lista de volumes disponíveis usando
docker volume lscomando:
1234DRIVER VOLUME NAMElocal 70f7b9a356df4c1f0c08e13a4e813f1ef3e174a91001f277a63b62d683a27159pxd cbvollocal f7bc5fa455a88638c106881f1bce98244b670e094d5fdc47917b53a88e46c073
Como mostrado,cbvolé criado compxdmotorista.
Couchbase com Portworx Volume
- Crie um contêiner do Couchbase usando o volume do Portworx:
1234567docker container run \-d \--name db \-v cbvol:/opt/couchbase/var \-p 8091-8094:8091-8094 \-p 11210:11210 \arungupta/couchbase
Observe como/opt/couchbase/varonde todos os dados do Couchbase são armazenados no contêiner é mapeado para ocbvolno host. Esse volume é mapeado pela Portworx. - Faça login no Console da Web do Couchbase em https://:8091, use o login
Administradoresenhacomo senha. - Vá para Data Buckets e crie um novo data bucket pwx:

- Na instância do EC2, veja a lista de contêineres:
12345ubuntu@ip-172-31-25-21:~$ docker container lsCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES8ae763d9d53b arungupta/couchbase "/entrypoint.sh /o..." 5 minutes ago Up 5 minutes 0.0.0.0:8091-8094->8091-8094/tcp, 11207/tcp, 11211/tcp, 0.0.0.0:11210->11210/tcp, 18091-18093/tcp db5423bcd9b426 portworx/px-dev "/docker-entry-poi..." 14 minutes ago Up 14 minutes pxcf3c779a4459 portworx/etcd:latest "/entrypoint.sh /b..." 21 minutes ago Up 21 minutes 2379-2380/tcp, 7001/tcp, 0.0.0.0:4001->4001/tcp youthful_jepsen
etcd,px-devedbestão em execução. - Matar o
dbcontêiner:
1docker container rm -f db - Reinicie o contêiner do banco de dados como:
1234567docker container run \-d \--name db \-v cbvol:/opt/couchbase/var \-p 8091-8094:8091-8094 \-p 11210:11210 \arungupta/couchbase
Agora, porquecbvolé mapeado para/opt/couchbase/varnovamente, os dados são preservados durante as reinicializações. Isso pode ser verificado acessando o Console da Web do Couchbase e verificando a variávelpwxcriado anteriormente.
Outra perspectiva interessante também está em Por que os bancos de dados não são para contêineres?. Só porque existe o Docker, isso não significa que todas as suas necessidades de banco de dados devam ser Dockerizadas. Mas, se você precisar, há muitas opções e elas podem ser usadas em aplicativos de nível de produção.
Deseja saber mais sobre como executar o Couchbase em contêineres?
[...] Fonte: blog.couchbase.com/stateful-docker-containers-portworx-couchbase/ [...]