Docker
References
Docker Documentation: https://docs.docker.com/
Dockerize Angular App
- Dockerizing an Angular application: https://mherman.org/blog/dockerizing-an-angular-app/
- Working with environments.ts: https://codinglatte.com/posts/angular/using-os-environment-variables-in-angular-with-docker/
Dockerize Microservices
Dockerfile
Build Base Container Image
Create a working directory
Write the Dockerfile specification
- Filename: Dockerfile
Build the image
Dockerfile
Text file with the instructions used to build the image
Each instruction is executed sequentially
Instructions
Comments start with #
FROM
- indicates the parent image
LABEL
- Key/value pairs (e.g. LABEL description='A label')
RUN
MAINTAINER
EXPOSE
- Metadata indicating that a specific port is being exposed
- This doesn’t actually expose a port. When you run the docker image, you’ll provide a -d arg where you will map a port on the host to the port exposed in the image (e.g. -d 10080:80)
ENV
ADD
- Put items from remote locations inside the container
- You can add items from remote locations and/or untar files
COPY
- Put items from the host into the container
USER
- The commands following a RUN command will be executed as the user specified.
ENTRYPOINT
CMD
- Provides commands for the ENTRYPOINT
CMD and ENTRYPOINT
- Defining an ENTRYPOINT in the Dockerfile creates containers that are executable
- The ENTRYPOINT can be a script that is added to the container with an ADD instruction
- The default ENTRYPOINT instruction is /bin/sh -c
- Use CMD to pass in arguments to the ENTRYPOINT instruction
- The CMD argument can be overwritten when running a container docker run.
Image layering
- Each instruction in a Dockerfile creates a new layer
- Having too many instructions in a Dockerfile can cause too many layers, which can result in large image sizes
Readability
- Dockerfiles are meant to be read by others
- Maintain readability while consolidating instructions
- Put labels and env variables on new lines
If you are currently in the directory in a terminal, you can use a '.' to reference the current directory
Samples
Basic Python Container
DockerHub: https://hub.docker.com/_/python
For Reference: https://runnable.com/docker/python/dockerize-your-python-application
In this example, I created a project directory with a single PY file and a Dockerfile. The whole directory will be added to the container environment and the index.py file will be executed.
index.py
print ("Hello World!")
Dockerfile
FROM python
ADD index.py /
CMD ["python", "./index.py"]
Build the Dockerfile
docker build -t python-basic .
Run the Docker image
docker run python-basic
Attachments
PDF File Docker Cheatsheet.pdf