Containers series III: Docker Compose
Serie de artigos sobre containers (Docker, Docker Compose, Docker Swarm e Kubernetes).
Lab 3 - Docker Compose
Executando servicos
Docker Compose permite definir serviços (que a sua vez são formados por containers) e a comunicação entre os mesmos. Esta comunicação é implementada via DNS nos containers. Além disso, no arquivo de configuração do Docker Compose (docker-compose.yml) é possível definir:
- variáveis de entorno: comando
environment - mapeamento de portas: comando
ports - persistência de dados: comando
volumes - dependências entre os serviços: comandos
linksedepends on
Vamos trabalhar com dois terminais abertos (T1 e T2).
Instalação
[T1] Instalação do Docker Compose:
[Ubuntu]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
$ sudo apt install docker-compose -y Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: golang-docker-credential-helpers libpython-stdlib libpython2.7-minimal libpython2.7-stdlib libsecret-1-0 libsecret-common python python-asn1crypto python-backports.ssl-match-hostname python-cached-property python-certifi python-cffi-backend python-chardet python-cryptography python-docker python-dockerpty python-dockerpycreds python-docopt python-enum34 python-funcsigs python-functools32 python-idna python-ipaddress python-jsonschema python-minimal python-mock python-openssl python-pbr python-pkg-resources python-requests python-six python-texttable python-urllib3 python-websocket python-yaml python2.7 python2.7-minimal Suggested packages: python-doc python-tk python-cryptography-doc python-cryptography-vectors python-enum34-doc python-funcsigs-doc python-mock-doc python-openssl-doc python-openssl-dbg python-setuptools python-socks python-ntlm python2.7-doc binutils binfmt-support The following NEW packages will be installed: docker-compose golang-docker-credential-helpers libpython-stdlib libpython2.7-minimal libpython2.7-stdlib libsecret-1-0 libsecret-common python python-asn1crypto python-backports.ssl-match-hostname python-cached-property python-certifi python-cffi-backend python-chardet python-cryptography python-docker python-dockerpty python-dockerpycreds python-docopt python-enum34 python-funcsigs python-functools32 python-idna python-ipaddress python-jsonschema python-minimal python-mock python-openssl python-pbr python-pkg-resources python-requests python-six python-texttable python-urllib3 python-websocket python-yaml python2.7 python2.7-minimal 0 upgraded, 38 newly installed, 0 to remove and 35 not upgraded. Need to get 6014 kB of archives. After this operation, 26.6 MB of additional disk space will be used. Get:1 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libpython2.7-minimal amd64 2.7.17-1~18.04 [335 kB] Get:2 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 python2.7-minimal amd64 2.7.17-1~18.04 [1294 kB] Get:3 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 python-minimal amd64 2.7.15~rc1-1 [28.1 kB] Get:4 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libpython2.7-stdlib amd64 2.7.17-1~18.04 [1915 kB] Get:5 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 python2.7 amd64 2.7.17-1~18.04 [248 kB] Get:6 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 libpython-stdlib amd64 2.7.15~rc1-1 [7620 B] Get:7 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 python amd64 2.7.15~rc1-1 [140 kB] Get:8 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/universe amd64 python-backports.ssl-match-hostname all 3.5.0.1-1 [7024 B] Get:9 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 python-pkg-resources all 39.0.1-2 [128 kB] Get:10 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/universe amd64 python-cached-property all 1.3.1-1 [7568 B] Get:11 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 python-six all 1.11.0-2 [11.3 kB] Get:12 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 libsecret-common all 0.18.6-1 [4452 B] Get:13 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 libsecret-1-0 amd64 0.18.6-1 [94.6 kB] Get:14 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/universe amd64 golang-docker-credential-helpers amd64 0.5.0-2 [444 kB] Get:15 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/universe amd64 python-dockerpycreds all 0.2.1-1 [4138 B] Get:16 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 python-certifi all 2018.1.18-2 [144 kB] Get:17 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 python-chardet all 3.0.4-1 [80.3 kB] Get:18 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 python-idna all 2.6-1 [32.4 kB] Get:19 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 python-urllib3 all 1.22-1ubuntu0.18.04.1 [85.9 kB] Get:20 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 python-requests all 2.18.4-2ubuntu0.1 [58.5 kB] Get:21 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/universe amd64 python-websocket all 0.44.0-0ubuntu2 [30.7 kB] Get:22 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 python-ipaddress all 1.0.17-1 [18.2 kB] Get:23 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/universe amd64 python-docker all 2.5.1-1 [69.0 kB] Get:24 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/universe amd64 python-dockerpty all 0.4.1-1 [10.8 kB] Get:25 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/universe amd64 python-docopt all 0.6.2-1build1 [25.6 kB] Get:26 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 python-enum34 all 1.1.6-2 [34.8 kB] Get:27 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 python-functools32 all 3.2.3.2-3 [10.8 kB] Get:28 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 python-funcsigs all 1.0.2-4 [13.5 kB] Get:29 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 python-pbr all 3.1.1-3ubuntu3 [53.7 kB] Get:30 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 python-mock all 2.0.0-3 [47.4 kB] Get:31 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 python-jsonschema all 2.6.0-2 [31.5 kB] Get:32 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/universe amd64 python-texttable all 0.9.1-1 [8160 B] Get:33 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 python-yaml amd64 3.12-1build2 [115 kB] Get:34 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/universe amd64 docker-compose all 1.17.1-2 [76.3 kB] Get:35 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 python-asn1crypto all 0.24.0-1 [72.7 kB] Get:36 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 python-cffi-backend amd64 1.11.5-1 [63.4 kB] Get:37 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 python-cryptography amd64 2.1.4-1ubuntu1.3 [221 kB] Get:38 http://us-east-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 python-openssl all 17.5.0-1ubuntu1 [41.3 kB] Fetched 6014 kB in 0s (27.4 MB/s) Extracting templates from packages: 100% Selecting previously unselected package libpython2.7-minimal:amd64. (Reading database ... 111722 files and directories currently installed.) Preparing to unpack .../0-libpython2.7-minimal_2.7.17-1~18.04_amd64.deb ... Unpacking libpython2.7-minimal:amd64 (2.7.17-1~18.04) ... Selecting previously unselected package python2.7-minimal. Preparing to unpack .../1-python2.7-minimal_2.7.17-1~18.04_amd64.deb ... Unpacking python2.7-minimal (2.7.17-1~18.04) ... Selecting previously unselected package python-minimal. Preparing to unpack .../2-python-minimal_2.7.15~rc1-1_amd64.deb ... Unpacking python-minimal (2.7.15~rc1-1) ... Selecting previously unselected package libpython2.7-stdlib:amd64. Preparing to unpack .../3-libpython2.7-stdlib_2.7.17-1~18.04_amd64.deb ... Unpacking libpython2.7-stdlib:amd64 (2.7.17-1~18.04) ... Selecting previously unselected package python2.7. Preparing to unpack .../4-python2.7_2.7.17-1~18.04_amd64.deb ... Unpacking python2.7 (2.7.17-1~18.04) ... Selecting previously unselected package libpython-stdlib:amd64. Preparing to unpack .../5-libpython-stdlib_2.7.15~rc1-1_amd64.deb ... Unpacking libpython-stdlib:amd64 (2.7.15~rc1-1) ... Setting up libpython2.7-minimal:amd64 (2.7.17-1~18.04) ... Setting up python2.7-minimal (2.7.17-1~18.04) ... Linking and byte-compiling packages for runtime python2.7... Setting up python-minimal (2.7.15~rc1-1) ... Selecting previously unselected package python. (Reading database ... 112470 files and directories currently installed.) Preparing to unpack .../00-python_2.7.15~rc1-1_amd64.deb ... Unpacking python (2.7.15~rc1-1) ... Selecting previously unselected package python-backports.ssl-match-hostname. Preparing to unpack .../01-python-backports.ssl-match-hostname_3.5.0.1-1_all.deb ... Unpacking python-backports.ssl-match-hostname (3.5.0.1-1) ... Selecting previously unselected package python-pkg-resources. Preparing to unpack .../02-python-pkg-resources_39.0.1-2_all.deb ... Unpacking python-pkg-resources (39.0.1-2) ... Selecting previously unselected package python-cached-property. Preparing to unpack .../03-python-cached-property_1.3.1-1_all.deb ... Unpacking python-cached-property (1.3.1-1) ... Selecting previously unselected package python-six. Preparing to unpack .../04-python-six_1.11.0-2_all.deb ... Unpacking python-six (1.11.0-2) ... Selecting previously unselected package libsecret-common. Preparing to unpack .../05-libsecret-common_0.18.6-1_all.deb ... Unpacking libsecret-common (0.18.6-1) ... Selecting previously unselected package libsecret-1-0:amd64. Preparing to unpack .../06-libsecret-1-0_0.18.6-1_amd64.deb ... Unpacking libsecret-1-0:amd64 (0.18.6-1) ... Selecting previously unselected package golang-docker-credential-helpers. Preparing to unpack .../07-golang-docker-credential-helpers_0.5.0-2_amd64.deb ... Unpacking golang-docker-credential-helpers (0.5.0-2) ... Selecting previously unselected package python-dockerpycreds. Preparing to unpack .../08-python-dockerpycreds_0.2.1-1_all.deb ... Unpacking python-dockerpycreds (0.2.1-1) ... Selecting previously unselected package python-certifi. Preparing to unpack .../09-python-certifi_2018.1.18-2_all.deb ... Unpacking python-certifi (2018.1.18-2) ... Selecting previously unselected package python-chardet. Preparing to unpack .../10-python-chardet_3.0.4-1_all.deb ... Unpacking python-chardet (3.0.4-1) ... Selecting previously unselected package python-idna. Preparing to unpack .../11-python-idna_2.6-1_all.deb ... Unpacking python-idna (2.6-1) ... Selecting previously unselected package python-urllib3. Preparing to unpack .../12-python-urllib3_1.22-1ubuntu0.18.04.1_all.deb ... Unpacking python-urllib3 (1.22-1ubuntu0.18.04.1) ... Selecting previously unselected package python-requests. Preparing to unpack .../13-python-requests_2.18.4-2ubuntu0.1_all.deb ... Unpacking python-requests (2.18.4-2ubuntu0.1) ... Selecting previously unselected package python-websocket. Preparing to unpack .../14-python-websocket_0.44.0-0ubuntu2_all.deb ... Unpacking python-websocket (0.44.0-0ubuntu2) ... Selecting previously unselected package python-ipaddress. Preparing to unpack .../15-python-ipaddress_1.0.17-1_all.deb ... Unpacking python-ipaddress (1.0.17-1) ... Selecting previously unselected package python-docker. Preparing to unpack .../16-python-docker_2.5.1-1_all.deb ... Unpacking python-docker (2.5.1-1) ... Selecting previously unselected package python-dockerpty. Preparing to unpack .../17-python-dockerpty_0.4.1-1_all.deb ... Unpacking python-dockerpty (0.4.1-1) ... Selecting previously unselected package python-docopt. Preparing to unpack .../18-python-docopt_0.6.2-1build1_all.deb ... Unpacking python-docopt (0.6.2-1build1) ... Selecting previously unselected package python-enum34. Preparing to unpack .../19-python-enum34_1.1.6-2_all.deb ... Unpacking python-enum34 (1.1.6-2) ... Selecting previously unselected package python-functools32. Preparing to unpack .../20-python-functools32_3.2.3.2-3_all.deb ... Unpacking python-functools32 (3.2.3.2-3) ... Selecting previously unselected package python-funcsigs. Preparing to unpack .../21-python-funcsigs_1.0.2-4_all.deb ... Unpacking python-funcsigs (1.0.2-4) ... Selecting previously unselected package python-pbr. Preparing to unpack .../22-python-pbr_3.1.1-3ubuntu3_all.deb ... Unpacking python-pbr (3.1.1-3ubuntu3) ... Selecting previously unselected package python-mock. Preparing to unpack .../23-python-mock_2.0.0-3_all.deb ... Unpacking python-mock (2.0.0-3) ... Selecting previously unselected package python-jsonschema. Preparing to unpack .../24-python-jsonschema_2.6.0-2_all.deb ... Unpacking python-jsonschema (2.6.0-2) ... Selecting previously unselected package python-texttable. Preparing to unpack .../25-python-texttable_0.9.1-1_all.deb ... Unpacking python-texttable (0.9.1-1) ... Selecting previously unselected package python-yaml. Preparing to unpack .../26-python-yaml_3.12-1build2_amd64.deb ... Unpacking python-yaml (3.12-1build2) ... Selecting previously unselected package docker-compose. Preparing to unpack .../27-docker-compose_1.17.1-2_all.deb ... Unpacking docker-compose (1.17.1-2) ... Selecting previously unselected package python-asn1crypto. Preparing to unpack .../28-python-asn1crypto_0.24.0-1_all.deb ... Unpacking python-asn1crypto (0.24.0-1) ... Selecting previously unselected package python-cffi-backend. Preparing to unpack .../29-python-cffi-backend_1.11.5-1_amd64.deb ... Unpacking python-cffi-backend (1.11.5-1) ... Selecting previously unselected package python-cryptography. Preparing to unpack .../30-python-cryptography_2.1.4-1ubuntu1.3_amd64.deb ... Unpacking python-cryptography (2.1.4-1ubuntu1.3) ... Selecting previously unselected package python-openssl. Preparing to unpack .../31-python-openssl_17.5.0-1ubuntu1_all.deb ... Unpacking python-openssl (17.5.0-1ubuntu1) ... Setting up libsecret-common (0.18.6-1) ... Setting up libsecret-1-0:amd64 (0.18.6-1) ... Setting up libpython2.7-stdlib:amd64 (2.7.17-1~18.04) ... Setting up python2.7 (2.7.17-1~18.04) ... Setting up libpython-stdlib:amd64 (2.7.15~rc1-1) ... Setting up golang-docker-credential-helpers (0.5.0-2) ... Setting up python (2.7.15~rc1-1) ... Setting up python-idna (2.6-1) ... Setting up python-texttable (0.9.1-1) ... Setting up python-functools32 (3.2.3.2-3) ... Setting up python-yaml (3.12-1build2) ... Setting up python-asn1crypto (0.24.0-1) ... Setting up python-certifi (2018.1.18-2) ... Setting up python-pkg-resources (39.0.1-2) ... Setting up python-backports.ssl-match-hostname (3.5.0.1-1) ... Setting up python-cffi-backend (1.11.5-1) ... Setting up python-six (1.11.0-2) ... Setting up python-dockerpty (0.4.1-1) ... Setting up python-pbr (3.1.1-3ubuntu3) ... update-alternatives: using /usr/bin/python2-pbr to provide /usr/bin/pbr (pbr) in auto mode Setting up python-enum34 (1.1.6-2) ... Setting up python-funcsigs (1.0.2-4) ... Setting up python-docopt (0.6.2-1build1) ... Setting up python-ipaddress (1.0.17-1) ... Setting up python-cached-property (1.3.1-1) ... Setting up python-urllib3 (1.22-1ubuntu0.18.04.1) ... Setting up python-chardet (3.0.4-1) ... Setting up python-dockerpycreds (0.2.1-1) ... Setting up python-mock (2.0.0-3) ... Setting up python-websocket (0.44.0-0ubuntu2) ... update-alternatives: using /usr/bin/python2-wsdump to provide /usr/bin/wsdump (wsdump) in auto mode Setting up python-cryptography (2.1.4-1ubuntu1.3) ... Setting up python-requests (2.18.4-2ubuntu0.1) ... Setting up python-jsonschema (2.6.0-2) ... update-alternatives: using /usr/bin/python2-jsonschema to provide /usr/bin/jsonschema (jsonschema) in auto mode Setting up python-openssl (17.5.0-1ubuntu1) ... Setting up python-docker (2.5.1-1) ... Setting up docker-compose (1.17.1-2) ... Processing triggers for man-db (2.8.3-2ubuntu0.1) ... Processing triggers for mime-support (3.60ubuntu1) ... Processing triggers for libc-bin (2.27-3ubuntu1) ...
[Amazon Linux]
1 2 3 4 5 6 7 8 9
$ sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 152 100 152 0 0 4252 0 --:--:-- --:--:-- --:--:-- 4342 100 664 100 664 0 0 16586 0 --:--:-- --:--:-- --:--:-- 16586 100 23.5M 100 23.5M 0 0 84.2M 0 --:--:-- --:--:-- --:--:-- 84.2M $ sudo chmod +x /usr/local/bin/docker-compose $ docker-compose version[Amazon Linux] Instalar o git:
1
$ sudo yum install -y git
- [T1] Clonar este repositório e navegar ate a pasta
/fiap/bdt/microservices:1 2 3 4 5 6 7
$ git clone https://github.com/josecastillolema/fiap.git $ cd fiap/bdt/microservices/compose $ pwd /home/ubuntu/fiap/bdt/microservices/compose $ ls api_v1 api_v2 api_v3 docker-compose.yml mongo mysql
- [T1] Mostrar o conteúdo do arquivo
docker-compose.yml. São definidos dois serviços:- api: a API escrita em Python, que tem dependência com (consulta) o serviço mysql
- mysql: o servidor MySQL, com mapeamento de portas (porta 3306), persistência de dados (pasta
/var/lib/mysql) e algumas variáveis de entorno1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
$ cat docker-compose.yml version: '2' services: api: build: api_v2/. ports: - "4000:5000" depends_on: - mysql mysql: build: mysql/. ports: - "3306:3306" volumes: - /var/lib/mysql environment: MYSQL_ROOT_PASSWORD: senhaFiap MYSQL_DATABASE: fiapdb
Uso
- [T1] Criar os serviços definidos no arquivo
docker-compose.yml:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
$ docker-compose up Creating network "compose_default" with the default driver Building mysql Step 1/3 : FROM mysql ---> 9228ee8bac7a Step 2/3 : MAINTAINER Jose Castillo <profjose.lema@fiap.com.br> ---> Running in 5f85965fa52d Removing intermediate container 5f85965fa52d ---> 1035c57e599d Step 3/3 : ADD ./aso.sql /docker-entrypoint-initdb.d ---> a809a9c5ca56 Successfully built a809a9c5ca56 Successfully tagged compose_mysql:latest WARNING: Image for service mysql was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`. Building api Step 1/8 : FROM python:2 ---> 154f4db0c875 Step 2/8 : MAINTAINER Jose Castillo <profjose.lema@fiap.com.br> ---> Using cache ---> defda7283ddf Step 3/8 : ADD api.py requirements.txt / ---> abb5e8e662ca Step 4/8 : RUN pip install -r ./requirements.txt ---> Running in ebd156421186 DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support Collecting flask Downloading Flask-1.1.2-py2.py3-none-any.whl (94 kB) Collecting flask-mysql Downloading Flask_MySQL-1.5.1-py2.py3-none-any.whl (3.8 kB) Collecting flask-cors Downloading Flask_Cors-3.0.8-py2.py3-none-any.whl (14 kB) Collecting cryptography Downloading cryptography-2.9-cp27-cp27mu-manylinux2010_x86_64.whl (2.7 MB) Collecting click>=5.1 Downloading click-7.1.1-py2.py3-none-any.whl (82 kB) Collecting itsdangerous>=0.24 Downloading itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB) Collecting Werkzeug>=0.15 Downloading Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB) Collecting Jinja2>=2.10.1 Downloading Jinja2-2.11.1-py2.py3-none-any.whl (126 kB) Collecting PyMySQL Downloading PyMySQL-0.9.3-py2.py3-none-any.whl (47 kB) Requirement already satisfied: Six in /usr/local/lib/python2.7/site-packages (from flask-cors->-r ./requirements.txt (line 3)) (1.14.0) Collecting ipaddress; python_version < "3" Downloading ipaddress-1.0.23-py2.py3-none-any.whl (18 kB) Collecting cffi!=1.11.3,>=1.8 Downloading cffi-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl (387 kB) Collecting enum34; python_version < "3" Downloading enum34-1.1.10-py2-none-any.whl (11 kB) Collecting MarkupSafe>=0.23 Downloading MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl (24 kB) Collecting pycparser Downloading pycparser-2.20-py2.py3-none-any.whl (112 kB) Installing collected packages: click, itsdangerous, Werkzeug, MarkupSafe, Jinja2, flask, PyMySQL, flask-mysql, flask-cors, ipaddress, pycparser, cffi, enum34, cryptography Successfully installed Jinja2-2.11.1 MarkupSafe-1.1.1 PyMySQL-0.9.3 Werkzeug-1.0.1 cffi-1.14.0 click-7.1.1 cryptography-2.9 enum34-1.1.10 flask-1.1.2 flask-cors-3.0.8 flask-mysql-1.5.1 ipaddress-1.0.23 itsdangerous-1.1.0 pycparser-2.20 Removing intermediate container ebd156421186 ---> 1897edcddbb5 Step 5/8 : ENV PORT=5000 ---> Running in 8dd8bb035819 Removing intermediate container 8dd8bb035819 ---> 3b92b6fb59a5 Step 6/8 : EXPOSE $PORT ---> Running in 99d862666779 Removing intermediate container 99d862666779 ---> 05c77804ed9d Step 7/8 : HEALTHCHECK CMD curl --fail http://localhost:$PORT || exit 1 ---> Running in ecbcbde1d83c Removing intermediate container ecbcbde1d83c ---> 178843362cde Step 8/8 : CMD [ "./api.py" ] ---> Running in bfe14e880a4b Removing intermediate container bfe14e880a4b ---> e401dc1035d7 Successfully built e401dc1035d7 Successfully tagged compose_api:latest WARNING: Image for service api was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`. Creating compose_mysql_1 ... Creating compose_mysql_1 ... done Creating compose_api_1 ... Creating compose_api_1 ... done Attaching to compose_mysql_1, compose_api_1 mysql_1 | 2020-04-08 19:52:56+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.19-1debian10 started. mysql_1 | 2020-04-08 19:52:57+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' mysql_1 | 2020-04-08 19:52:57+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.19-1debian10 started. mysql_1 | 2020-04-08 19:52:57+00:00 [Note] [Entrypoint]: Initializing database files mysql_1 | 2020-04-08T19:52:57.639740Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release. mysql_1 | 2020-04-08T19:52:57.639830Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.19) initializing of server in progress as process 41 api_1 | * Serving Flask app "api" (lazy loading) api_1 | * Environment: production api_1 | WARNING: This is a development server. Do not use it in a production deployment. api_1 | Use a production WSGI server instead. api_1 | * Debug mode: on api_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) api_1 | * Restarting with stat api_1 | * Debugger is active! api_1 | * Debugger PIN: 463-518-758 mysql_1 | 2020-04-08T19:53:03.024229Z 5 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option. mysql_1 | 2020-04-08 19:53:08+00:00 [Note] [Entrypoint]: Database files initialized mysql_1 | 2020-04-08 19:53:08+00:00 [Note] [Entrypoint]: Starting temporary server mysql_1 | 2020-04-08T19:53:08.721880Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release. mysql_1 | 2020-04-08T19:53:08.722007Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.19) starting as process 91 mysql_1 | 2020-04-08T19:53:09.446603Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. mysql_1 | 2020-04-08T19:53:09.457240Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory. mysql_1 | 2020-04-08T19:53:09.478577Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.19' socket: '/var/run/mysqld/mysqld.sock' port: 0 MySQL Community Server - GPL. mysql_1 | 2020-04-08 19:53:09+00:00 [Note] [Entrypoint]: Temporary server started. mysql_1 | 2020-04-08T19:53:09.527830Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/var/run/mysqld/mysqlx.sock' mysql_1 | Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it. mysql_1 | Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it. mysql_1 | Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it. mysql_1 | Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it. mysql_1 | 2020-04-08 19:53:13+00:00 [Note] [Entrypoint]: Creating database fiapdb mysql_1 | mysql_1 | 2020-04-08 19:53:13+00:00 [Note] [Entrypoint]: /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/aso.sql mysql_1 | mysql_1 | mysql_1 | 2020-04-08 19:53:14+00:00 [Note] [Entrypoint]: Stopping temporary server mysql_1 | 2020-04-08T19:53:14.140552Z 12 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.19). mysql_1 | 2020-04-08T19:53:15.777586Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.19) MySQL Community Server - GPL. mysql_1 | 2020-04-08 19:53:16+00:00 [Note] [Entrypoint]: Temporary server stopped mysql_1 | mysql_1 | 2020-04-08 19:53:16+00:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up. mysql_1 | mysql_1 | 2020-04-08T19:53:16.482021Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release. mysql_1 | 2020-04-08T19:53:16.482148Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.19) starting as process 1 mysql_1 | 2020-04-08T19:53:17.150498Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. mysql_1 | 2020-04-08T19:53:17.159715Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory. mysql_1 | 2020-04-08T19:53:17.180954Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.19' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL. mysql_1 | 2020-04-08T19:53:17.291602Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/var/run/mysqld/mysqlx.sock' bind-address: '::' port: 33060
[T1] (Opcional / Alternativa ao passo 4)
O comando anterior pode ser executado com a opção
-d. De esta forma os containers são executados no background, e não será necessário usar dois terminais. Porém, temos menos visibilidade no que está acontecendo nos containers:1 2 3 4 5 6
$ docker-compose up -d Creating network "compose_default" with the default driver Creating compose_mysql_1 ... Creating compose_mysql_1 ... done Creating compose_api_1 ... Creating compose_api_1 ... done
Validação
- [T2] Em um segundo terminal, confirmar que os serviços do Docker Compose foram criados corretamente. E necessário navegar ate pasta que contém o arquivo
docker-compose.yml.1 2 3 4 5 6 7 8
$ cd fiap/bdt/microservices/compose/ $ pwd /home/ubuntu/fiap/bdt/microservices/compose $ docker-compose ps Name Command State Ports ----------------------------------------------------------------------------------------- compose_api_1 ./api.py Up 0.0.0.0:4000->5000/tcp compose_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp - [T2] Confirmar que os containers foram criados corretamente:
1 2 3 4
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6d7277694bc3 compose_api "./api.py" 2 minutes ago Up About a minute (healthy) 0.0.0.0:4000->5000/tcp compose_api_1 349228f10355 compose_mysql "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp compose_mysql_1
- [T2] Testar a API:
1 2
$ curl localhost:4000 Benvido a API FIAP!
- [T2] Testar a conexão da API com o banco de dados:
1 2
$ curl localhost:4000/getDados [{"id": 1234, "name": "Jose Castillo Lema"}] - [T2] Conferir a configuração de DNS, usando o ID do container compose_api obtido no passo 7:
1 2 3 4 5 6 7 8 9
$ docker exec 6d7277694bc3 ping -c 3 mysql PING mysql (172.18.0.2) 56(84) bytes of data. 64 bytes from compose_mysql_1.compose_default (172.18.0.2): icmp_seq=1 ttl=64 time=0.073 ms 64 bytes from compose_mysql_1.compose_default (172.18.0.2): icmp_seq=2 ttl=64 time=0.070 ms 64 bytes from compose_mysql_1.compose_default (172.18.0.2): icmp_seq=3 ttl=64 time=0.072 ms --- mysql ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 35ms rtt min/avg/max/mdev = 0.070/0.071/0.073/0.009 ms
Clean-up
- [T2] Remover os serviços (e os containers):
1 2 3 4 5 6
$ docker-compose down Stopping compose_api_1 ... done Stopping compose_mysql_1 ... done Removing compose_api_1 ... done Removing compose_mysql_1 ... done Removing network compose_default