# ClinicalTrialsDataProcessing This is used to build tools which process and standardize the data. More data later. # proposed architecture: AACT Dockerfile #when built on its own, allows for the creation of the AACT database. - Should create appropriate users. - ClinicalTrialHistory Dockerfile #inherits from AACT (multistage builds?) and adds initialization steps to the database. - adds schemas, tables, and views for both http requests and parsed history tables. - adds connection roles - adds connection users ClinicalTrialDataProcessing docker-compose.yaml #deploys a ClinicalTrialHistory container, pgadmin4, and eventually the downloading program/environment. # Background on Docker Docker uses the following flow 1. configuration using `docker-compose.yaml` or a `Dockerfile` 2. `docker build .` to generate an image 3. `docker run xxxxxx` to take the image and create a container. - when the container is created, it starts, running commands as configured in the dockerfile. - Consequently, the AACT database image when run must initialize the postgres db, then run the initalization details. - Here is where bind mounts come into play. ## Multistage builds https://stackoverflow.com/questions/53659993/docker-multi-stage-how-to-split-up-into-multiple-dockerfiles https://docs.docker.com/develop/develop-images/multistage-build/ Basically ## Dockerfile vs docker-compose.yaml A `Dockerfile` is used to create images. A `docker-compose.yaml` is used to automate the deployment of containers. ## Types of storage ### COPY/ADD (Dockerfile) In a dockerfile, this adds a file permanently to the image. This adds files one way to or from the container when initialized. ### Volumes (docker-compose.yaml && Dockerfile) Useable in both docker-compose and Dockerfile's, this creates a permanent storage. It can be maintained by docker or stored in a particular location. Good for longer term storage such as databases. ### Bind mounts (docker-compose.yaml) Bind mounts are used to make a host filesystem resource available