DockerImage Compose-Cours
DockerImage Compose-Cours
images
What am I
containerizing?
How to create my own image?
Dockerfile
FROM Ubuntu 1. OS -
RUN apt-get update Ubuntu
RUN apt-get install python 2. Update apt repo
Registr
Dockerfile
Dockerfile
INSTRUCTION ARGUMEN
T
Dockerfile
Start from a base OS
FROM Ubuntu or
another image
RUN apt-get update
RUN apt-get install python
Install all dependencies
RUN pip install flask
RUN pip install flask-mysql
Containerize
Everything!!!
docker
CMD
vs
ENT RY POI N
T
docker run ubuntu
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
45aacca36850 ubuntu "/bin/bash" 43 seconds ago Exited (0) 41 seconds ago
docker run ubuntu [COMMAND]
4
3
2
1
5
FROM Ubuntu
CMD sleep 5
CMD sleep 5
Command at Startup: sleep 10
FROM Ubuntu
docker run ubuntu-sleeper 1 0
sleep 10
ENTRYPOINT [“sleep”]
Command at Startup:
docker run ubuntu-sleeper
sleep: missing operand
Try 'sleep --help' for more information.
Command at Startup:
d o c k e r
networking
Default networks
docker run ubuntu docker run Ubuntu –-network=none docker run Ubuntu --network=host
5000 5000
Web Web
Web Web Container Container
Containe Container
r
172.17.0.
172.17.0.2 3
172.17.0.
1
Web
docker0 Container
172.17.0.4 172.17.0.
5
Web
Containe Web
r Container
Docker
Host
Inspect Network
Host IP
mysql.connect( mysql
172.17.0.3 ) web mysql web 172.17.0.2
Container Container
172.17.0.2 172.17.0.3
mysql 172.17.0.3
docker0
DNS
Server
127.0.0.11
Docker Host
d o c k e r
storage
File system
/var/lib/
docker aufs
containers
image
volumes
Layered architecture
Dockerfile Dockerfile2
FROM Ubuntu FROM Ubuntu
RUN apt-get update && apt-get –y install python RUN apt-get update && apt-get –y install python
RUN pip install flask flask-mysql RUN pip install flask flask-mysql
Read Write
Container Layer
Layer 6. Container Layer
Read Only
Layer 5. Update Entrypoint with “flask” command
Layer 4. Source code
Read Write
Container Layer
temp.txt
Read Only
/var/lib/mysql /var/lib/mysql
data_volum
e mysql
/var/lib/docker/volumes /data
Read Only
mysql – image layer
Docker Host
Storage drivers
• AUFS
• ZFS
• BTRFS
• Device Mapper
• Overlay
• Overlay2
d o c k e r
compos
e
Docker compose
Public Docker registry - dockerhub
docker run mmumshad/simple-webapp
docker-compose.yml
services:
web:
i
m
a
g
e
:
“
m
m
u
m
s
h
a
docker-compose up
d
Sample application voting
– application
C
voting-app result-app
python NodeJS
C
CATS DOGS
in-memory DB db 1 0
PostgreSQL
0 0
worker
.NET
docker run
docker run -d --name=redis redis
voting-app result-app
docker run -d --name=db postgres
worker
docker run --links
docker run -d --name=redis redis
voting-app result-app
docker run -d --name=db postgres
docker run
docker run -d
-d --name=vote
--name=vote –p
–p 5000:80
5000:80 --link redis:redis voting-app
voting-app
docker run
docker run -d
-d --name=worker
--name=worker --link
workerdb:db --link redis:redis worker
worker
docker compose docker-compose
redis:
docker run -d --name=redis redis image: redis
db:
docker run -d --name=db postgres image: postgres:9.4
vote:
docker run
docker run -d
-d --name=vote
--name=vote –p
–p 5000:80
5000:80 --link redis:redis voting-app
voting-app image: voting-app
ports:
docker run -d --name=result –p 5001:80 --link db:db result-app
result-app - 5000:80
links:
- redis
docker run
docker run -d --name=worker --link
-d --name=worker workerredis:redis --link db:db worker
result:
image: result-up
ports:
- 5001:80
links:
worker: - db
image: worker
links:
- db
- redis
Docker compose - build
docker-compose.yml docker-compose.yml
redis: redis:
image: redis image: redis
db: db:
image: postgres:9.4 image: postgres:9.4
vote: vote:
image: voting-app build: ./vote
ports: ports:
- 5000:80 - 5000:80
links: links:
- redis - redis
result: result:
image: result build: ./result
ports: ports:
- 5001:80 - 5001:80
links: links:
- db - db
worker: worker:
image: worker build: ./worker
links: links:
- db - db
- redis - redis
Docker compose - versions
docker-compose.yml docker-compose.yml docker-compose.yml