Images are the templates used to create Docker Containers. Container is a running instance of an image. Eg. ubuntu Image. Or Apache image.
Show all images available
Run the given image(
ubuntu) in the interactive mode(
docker run -it ubuntu
Get an image from repository
docker pull <image-name>[:<tag/version>]
Container is a running instance of an image.
Host: The system where docker is run
Client: CLI interface to the docker daemon
Registry: Docker Hub or other places where images are stored.
Dockerfile is a text file with insturctions to build an image. Generally, it has the filename
# The base image. This search locally - if not present, it gets pulled from repository FROM ubuntu # Run this command RUN apt-get update
- FROM: Sets the Base Image for subsequent instructions.
- RUN: execute any commands in a new layer on top of the current image and commit the results.
- CMD: provide defaults for an executing container.
- EXPOSE: informs Docker that the container listens on the specified network ports at runtime. NOTE: does not actually make ports accessible.
- ENV: sets environment variable.
- COPY: copies new files or directories to container. By default this copies as root regardless of the USER/WORKDIR settings. Use –chown=USER:GROUP to give ownership to another user/group. (Same for ADD.)
- VOLUME: creates a mount point for externally mounted volumes or other containers.
- USER: sets the user name for following RUN / CMD / ENTRYPOINT commands.
- WORKDIR: sets the working directory.
- LABEL: apply key/value metadata to your images, containers, or daemons.
docker build . in the same folder to build an image from this Dockerfile.
Its a tool for creating and running systems which has multiple containers within it. Eg. A web app will require an API Server, Frontend Server and Database Server. You can run all this together using docker compose.
You’ll have to install
docker-compose before you use it – its NOT part of the default docker install in linux.
docker-compose.yml to design the system.
docker-compose config # Checks validity of the docker-compose.yml file docker-compose up # Start all Services. Add -d flag to run in the background. docker-compose down # Stop all Services
Think of Volumes as the ‘HardDisks’ for the containers – the persintent data storage location. Containers can read and write to it – and the data will stay even after the containers are shut down.
- Decouple data storage from containers
- Share data accross multiple containers
- Persistant storage – when stoping the container, the data doesn’t get deleted.
docker volume create NAME docker volume ls docker volume install NAME # Show details about the volume. docker volume rm NAME # Remove volume docker run -v NAME:/var/lib/www IMAGE_NAME # Attaching a volume to an IMAGE - and mount it at location /var/lib/www
An alternative to using volumes is bind mount. Bind mount is a location in the host system that is running the container. This can be changed by the host system/user(unlike volumes).
Comnand to run an interactive shell with in a container…
docker exec -it NAME sh