Docker¶
- Docker is an open-source tool for creating, deploying, and running applications by using containers.
- Containers allow a developer to package up an application with all of the parts it needs, such as libraries and other dependencies, and ship it all out as one package.
By using containers, the application will run on any machine regardless of any customized settings that machine might have that could differ from the machine used for writing and testing the code.
Containerization is an approach in which an application or service, its dependencies, and its configuration (abstracted as deployment manifest files) are packaged together as a container image.
The containerized application can be tested as a unit and deployed as a container image instance to the host operating system (OS).
Docker is an open-source tool for automating the deployment of applications.
Docker Compose¶
Compose is a tool for running multi-container applications like for example a container with a DataBase and an application. We can start/stop multiple services using compose with a single command.
We can create multiple compose files each for production, staging, development, testing, as well as CI, and each will be isolated with each other.
To use compose
- Create a
Dockerfilewhere all our environment configuration and initial packages are mentioned. - Create a file
docker-compose.yml, and mention all the services which we would be using. - Finally run
docker-compose up.
Dockerfile
FROM python:3.4-alpine # 1
ADD . /code #2
WORKDIR /code #3
ADD requirements.txt /code/ #4
RUN pip install -r requirements.txt #5
In the above file we
- In
#1we are building an image starting with the Python 3.4 image - In
#2and#3we are adding directory :code:` . ` into the path/codein the image and making it the working directory. - In
#4and#5we adding the requirements file to the/code/directory and installing all requirements.
docker-compose.yml
version: '3' # 1
services: # 2
web:
build: . # 3
command: python3 manage.py runserver 0.0.0.0:8000 #4
volumes: # 5
- .:/code
ports: #6
- "8000:8000"
depends_on: #7
- db
db:
image: postgres
In
#1we mention the docker version (which is 3)#2defines two services, web and db.- The
webservice uses an image that’s built from the Dockerfile - The
dbservice uses a public Postgres image pulled from the Docker Hub registry.
- The
#3tells to find the the dockerfile in the current directory#4is a command to run the service .#5tells the host paths for that service.#6forwards the exposed port 8000 on the container to port 8000 on the host machine.#7mentions the dependency between services
To use the docker compose , we use commands
$ docker-compose up # to create and start the containers
$ docker-compose build #to build or rebuild services
$ docker-compose up --build # build the services and start the containers
We write different `docker-compose` files for each Development, Testing, & Production.