0% found this document useful (0 votes)
21 views41 pages

DockerImage Compose-Cours

The document discusses Docker images and how to create custom Docker images using a Dockerfile. It provides instructions on how to write a Dockerfile including base image, installing dependencies, copying source code, and specifying the entrypoint. It then shows how to build and push the custom image to a Docker registry.

Uploaded by

Djani Ngoy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
21 views41 pages

DockerImage Compose-Cours

The document discusses Docker images and how to create custom Docker images using a Dockerfile. It provides instructions on how to write a Dockerfile including base image, installing dependencies, copying source code, and specifying the entrypoint. It then shows how to build and push the custom image to a Docker registry.

Uploaded by

Djani Ngoy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 41

d o c k e r

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

RUN pip install flask 3. Install dependencies using


RUN pip install flask-mysql apt
COPY . /opt/source-code
4. Install Python dependencies using pip

ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask run 5. Copy source code to /opt folder

6. Run the web server using “flask” command

docker build Dockerfile –t mmumshad/my-custom-app

docker push mmumshad/my-custom-app Docker

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

COPY . /opt/source-code Copy source


code
ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask run Specify Entrypoint
Layered architecture
Dockerfile docker build Dockerfile –t mmumshad/my-custom-app

FROM Ubuntu Layer 1. Base Ubuntu Layer 120


MB
RUN apt-get update && apt-get –y install python
Layer 2. Changes in apt packages 306 MB
RUN pip install flask flask-mysql
Layer 3. Changes in pip packages 6.3 MB
COPY . /opt/source-code
Layer 4. Source code 229 B
ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask run
Layer 5. Update Entrypoint with “flask” command 0B
Docker build
output
failur
e docker build Dockerfile –t mmumshad/my-custom-app

Layer 1. Base Ubuntu Layer

Layer 2. Changes in apt packages


Layer 3. Changes in pip packages

Layer 4. Source code


Layer 5. Update Entrypoint with “flask” command
What can you containerize?

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]

docker run ubuntu sleep 5

4
3
2
1
5
FROM Ubuntu

CMD sleep 5

CMD command param1 CMD sleep 5


CMD [“command”, CMD [“sleep”, CMD [“sleep
“param1”] “5”] 5”]

docker build –t ubuntu-sleeper .


2
3
4
5
1
docker run ubuntu-sleeper
FROM Ubuntu
docker run ubuntu-sleeper sleep 10

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

Bridg non hos


e e t

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 Docker Host


Docker Host
Host
User-defined networks

docker network create \


Web Web –-driver bridge \
Containe Container
r -–subnet 182.18.0.0/16
172.17.0.2
1782.178.0. custom-isolated-network
3
172.17.0. 182.18.0.
1 1
docker0 docker0

172.17.0.4 1782..178..0 docker network ls


..52
Web
Containe Web
r Container

Docker
Host
Inspect Network

docker inspect blissful_hopper


[
{
"Id": "35505f7810d17291261a43391d4b6c0846594d415ce4f4d0a6ffbf9cc5109048",
"Name": "/blissful_hopper",
"NetworkSettings": {
"Bridge": "",
"Gateway":
"172.17.0.1",
"IPAddress":
"172.17.0.6",
"MacAddress": "02:42:ac:11:00:06",
"bridge": {
"Networks": {
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.6",
"MacAddress": "02:42:ac:11:00:06",
}
}
}
]
Embedded DNS

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

COPY . /opt/source-code COPY app2.py /opt/source-code

ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask ENTRYPOINT FLASK_APP=/opt/source-code/app2.py flask


run run

docker build Dockerfile –t mmumshad/my-custom-app docker build Dockerfile2 –t mmumshad/my-custom-app-2

Layer 1. Base Ubuntu Layer 120 MB Layer 1. Base Ubuntu Layer 0 MB

Layer 2. Changes in apt packages 306 MB Layer 2. Changes in apt packages 0 MB

Layer 3. Changes in pip packages 6.3 MB Layer 3. Changes in pip packages 0 MB

Layer 4. Source code 229 B Layer 4. Source code 229 B

Layer 5. Update Entrypoint 0B Layer 5. Update Entrypoint 0B


Layered architecture

Read Write
Container Layer
Layer 6. Container Layer

docker run mmumshad/my-custom-app

Read Only
Layer 5. Update Entrypoint with “flask” command
Layer 4. Source code

Image Layers Layer 3. Changes in pip packages


Layer 2. Changes in apt packages
Layer 1. Base Ubuntu Layer

docker build Dockerfile –t mmumshad/my-custom-app


COPY-ON-WRITE

Read Write
Container Layer

temp.txt

Read Only

Image Layers app.p


app.py
y
volumes docker run –v data_volume:/var/lib/mysql mysql

docker volume create data_volume docker run –v data_volume2:/var/lib/mysql mysql

/var/lib/ docker run –v /data/mysql:/var/lib/mysql mysql

docker docker run \


–-mount type=bind,source=/data/mysql,target=/var/lib/mysql mysql
data_volume
volumes

Read Write Read Write

/var/lib/mysql /var/lib/mysql

mysql-container layer mysql-container layer

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 run mongodb

docker run redis:alpine

docker run ansible

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

docker run -d --name=vote –p 5000:80 voting-app

docker run -d --name=result –p 5001:80 result-app in-memory DB db

docker run -d --name=worker worker

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 -d --name=result –p 5001:80 --link db:db result-app


result-app in-memory DB db

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

redis: version: 2 version: 3


services: services:
image: redis
redis:
db:
image: redis
image: postgres:9.4
db:
vote:
image: postgres:9.4
image: voting-
app vote:
ports: image: voting-
app
- 5000:80
ports:
links:
- 5000:80
--
rreeddiiss depends_on:
- redis

version: 1 version: 2 version: 3


Docker compose
docker-compose.yml
version: 2
services:
redi front-end
s:
i voting-app result-app
m
a - back-end
db: g
image:
e postgres:9.4
networks:
:
- back-end
vote:r
e
image: voting-app redis db
d
networks:
i back-end
s - front-end
- back-end
n
result:
e
image: result
t
networks:
w
o - front-end worker
r - back-end
k
networks: s
:
front-end:
back-end:

You might also like