Introduction To Docker
People's Postcode Lottery - January 2018
What Is Docker?
Docker allows you to package an application with all of its dependencies into a standardized unit for software development.
Why Do We Use It?
Environment Parity
Easier Tooling
Experimentation
Container v Image
Image
- Bundled dependencies
- Distributable
- Build time configuration
- Generally environment independent
Container
- Running instance of an Image
- Runtime configuration
2 Main Components
- Docker Engine
- Docker Compose
Dockerfile
Main Dockerfile Commands
- FROM
- RUN
- VOLUME
- CMD
- COPY/ADD
- ENTRYPOINT
- WORKDIR
- HEALTHCHECK
FROM alpine:3.5
RUN apk add --no-cache bash
ENTRYPOINT bash
FROM alpine:3.5
RUN apk add --no-cache bash
COPY ./demo /var/www
WORKDIR /var/www
ENTRYPOINT bash
Volumes
- Host to Container Mapping:
- ./secrets:/var/run/secrets
- Container Volumes
- - /secrets
- Can be named or unnamed (volumes key in compose file)
- Plugins (Not really used here)
Docker Compose
- Orchestration tool for Docker Engine
- Primarily used for Development
- Create full application stacks
- Define the parity you'll later use in prod
version: '2'
volumes:
cache:
driver: local
driver_opts:
type: tmpfs
device: tmpfs
o: uid=33
logs:
driver: local
driver_opts:
type: tmpfs
device: tmpfs
o: uid=33
networks:
salesflowmanagerapi_default:
external: true
services:
application:
build:
dockerfile: ./Dockerfile
context: .
entrypoint: /var/www/opt/docker/dev/entrypoint
environment:
- SYMFONY_ENVIRONMENT=test
- BLACKFIRE_SERVER_ID
- BLACKFIRE_SERVER_TOKEN
volumes:
- ./opt/beats/dev/filebeat.yml:/etc/filebeat/filebeat.yml:ro
- ./opt/elk/dev/logstash/logstash-beats.crt:/etc/pki/tls/certs/logstash-beats.crt:ro
- ./opt/php/dev/php.ini:/usr/local/etc/php/php.ini:ro
- ./opt/php/dev/conf.d/:/usr/local/etc/php/conf.d/:ro
- .:/var/www
- ../../src:/var/php-src:ro
- cache:/var/www/var/cache
- logs:/var/www/var/logs
depends_on:
- elk
- redis
dns_search:
- pluk.eeghlan.net
dns:
- 172.26.10.2
- 10.2.0.10
privileged: true
tmpfs:
- /tmp:rw,nodev,noexec,nosuid
env_file:
- .env
- ./src/App/Salesflow/Domain/SalesflowManager/.env
ports:
- 80
networks:
- salesflowmanagerapi_default
redis:
image: redis:alpine
elk:
image: sebp/elk
ports:
- "5044:5044" # Logstash Beats interface
- "5601:5601" # Kibana web interface
- 9200 # Elasticsearch JSON interface
volumes:
- ./opt/elk/dev/logstash/logstash.conf:/etc/logstash/logstash.conf
- ./opt/elk/dev/logstash/logstash-beats.crt:/etc/pki/tls/certs/logstash-beats.crt
- ./opt/elk/dev/logstash/logstash-beats.key:/etc/pki/tls/private/logstash-beats.key
- ./opt/elk/dev/logstash/patterns:/opt/logstash/patterns
- logs:/var/www/app/logs
Important Commands
- Build:
- docker image build --tag <tag_name> . -f <file_name>
- Start Docker-Compose application
- docker-compose up
- Stop Docker Compose
- docker-compose kill
- System Cleanup
- docker system prune
- Execute into a container (compose)
- docker-compose exec <container_compose_name> sh
- Execute into a container (Non-Compose)
- docker container exec -ti <container_id/name> sh
- Run a container
- docker container run --rm <image_name>:<image_tag>
Deploying Docker
- Build image from repository
- Push image to a Docker Registry
- Create Ansible Playbook
- Pull docker image
- Set up dependant services
- Expose correct environment variables
- Run container
Questions?
Introduction To Docker
By Scott Pringle
Introduction To Docker
- 692