Compare commits
6 Commits
516e17a8d8
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| fcffbdb8f5 | |||
| e12386decf | |||
| fef5fbc220 | |||
| 4c20c41426 | |||
| 10966f3c1f | |||
| bec5fc997e |
88
README.md
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
## Uvod
|
||||||
|
|
||||||
|
- Docker je platforma za development, delivery i izvršavanje aplikacija
|
||||||
|
- Docker omogućava da se aplikacija izolira u repetativnoj okolini i odvoji od infrastrukture
|
||||||
|
|
||||||
|
[Features of Docker](https://www.geeksforgeeks.org/features-of-docker/):
|
||||||
|
- Open-source platform
|
||||||
|
- An Easy, lightweight, and consistent way of delivery of applications
|
||||||
|
- Fast and efficient development life cycle
|
||||||
|
- Segregation of duties
|
||||||
|
- Service-oriented architecture
|
||||||
|
- Security
|
||||||
|
- Scalability
|
||||||
|
- Reduction in size
|
||||||
|
- Image management
|
||||||
|
- Networking
|
||||||
|
- Volume management
|
||||||
|
|
||||||
|
|
||||||
|
## Struktura
|
||||||
|
|
||||||
|
- Dockerfile
|
||||||
|
- image
|
||||||
|
- container registry
|
||||||
|
- lokalni
|
||||||
|
- dockerhub
|
||||||
|
- AWS ECR
|
||||||
|
- container
|
||||||
|
|
||||||
|
|
||||||
|
## Dockerfile
|
||||||
|
|
||||||
|
- base image
|
||||||
|
- odabir najmanjeg funkcionalnog
|
||||||
|
- debian prije ubuntua
|
||||||
|
- debian-slim prije debiana
|
||||||
|
- alpine
|
||||||
|
- from scratch
|
||||||
|
- env varijable
|
||||||
|
|
||||||
|
|
||||||
|
## Docker image
|
||||||
|
|
||||||
|
- single stage build
|
||||||
|
- multistage build
|
||||||
|
|
||||||
|
|
||||||
|
## Docker container
|
||||||
|
|
||||||
|
run, publish port 3000:
|
||||||
|
```
|
||||||
|
docker run --name api-server-3000 --publish 3000:3000 --env CONTAINER_NAME="Awesome API server on port 3000" -d api-server
|
||||||
|
```
|
||||||
|
|
||||||
|
run, publish port 3001:
|
||||||
|
```
|
||||||
|
docker run --name api-server-3001 --publish 3001:3000 --env CONTAINER_NAME="Awesome API server on port 3001" -d api-server
|
||||||
|
```
|
||||||
|
run, publish port 3002:
|
||||||
|
```
|
||||||
|
docker run --name api-server-3002 --publish 3002:3000 --env CONTAINER_NAME="Awesome API server on port 3002" -d api-server
|
||||||
|
```
|
||||||
|
|
||||||
|
# Media
|
||||||
|
|
||||||
|
## Docker vs VM
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Docker elements
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Dockerfile layers
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Port publishing
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Horizontal scaling
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Volumes
|
||||||
|
|
||||||
|

|
||||||
@ -1,5 +1,10 @@
|
|||||||
FROM python:3.11-slim-bookworm
|
FROM python:3.11-slim-bookworm
|
||||||
|
|
||||||
|
# uid to run application
|
||||||
|
ARG USER=1000
|
||||||
|
# gid to run application
|
||||||
|
ARG USER_GROUP=1000
|
||||||
|
|
||||||
# set virtual env path
|
# set virtual env path
|
||||||
ENV \
|
ENV \
|
||||||
PATH=/venv/bin:$PATH
|
PATH=/venv/bin:$PATH
|
||||||
@ -13,11 +18,15 @@ WORKDIR /app
|
|||||||
# copy app files to /app directory
|
# copy app files to /app directory
|
||||||
COPY ./app .
|
COPY ./app .
|
||||||
|
|
||||||
# install dependencies
|
# set permissions to log directory and install dependencies
|
||||||
RUN \
|
RUN \
|
||||||
|
chown -R ${USER}:${USER_GROUP} /app/log && \
|
||||||
python -m venv /venv && \
|
python -m venv /venv && \
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
|
|
||||||
|
# set user to run application
|
||||||
|
USER ${USER}:${USER_GROUP}
|
||||||
|
|
||||||
# start shell script when container starts
|
# start shell script when container starts
|
||||||
ENTRYPOINT ["/app/run.sh"]
|
ENTRYPOINT ["/app/run.sh"]
|
||||||
|
|
||||||
|
|||||||
@ -1,13 +1,14 @@
|
|||||||
IMAGE_NAME=api-server
|
IMAGE_NAME=api-server
|
||||||
CONTAINER_NAME=api-server
|
CONTAINER_NAME=api-server
|
||||||
|
|
||||||
|
|
||||||
build: clean
|
build: clean
|
||||||
@docker build \
|
@docker build \
|
||||||
--progress=plain \
|
--progress=plain \
|
||||||
--no-cache \
|
|
||||||
--tag $(IMAGE_NAME) \
|
--tag $(IMAGE_NAME) \
|
||||||
.
|
.
|
||||||
|
|
||||||
|
|
||||||
run:
|
run:
|
||||||
@docker run \
|
@docker run \
|
||||||
--name $(IMAGE_NAME) \
|
--name $(IMAGE_NAME) \
|
||||||
@ -16,6 +17,7 @@ run:
|
|||||||
--detach \
|
--detach \
|
||||||
$(CONTAINER_NAME)
|
$(CONTAINER_NAME)
|
||||||
|
|
||||||
|
|
||||||
run-mount-log:
|
run-mount-log:
|
||||||
@docker run \
|
@docker run \
|
||||||
--name $(IMAGE_NAME) \
|
--name $(IMAGE_NAME) \
|
||||||
|
|||||||
21
media/docker-elements.svg
Normal file
|
After Width: | Height: | Size: 181 KiB |
21
media/docker-vs-vm.svg
Normal file
|
After Width: | Height: | Size: 299 KiB |
21
media/dockerfile-layers.svg
Normal file
|
After Width: | Height: | Size: 103 KiB |
5633
media/dockerizacija.excalidraw
Normal file
21
media/horizontal-scaling.svg
Normal file
|
After Width: | Height: | Size: 44 KiB |
21
media/port-publishing.svg
Normal file
|
After Width: | Height: | Size: 120 KiB |
BIN
media/volumes.png
Normal file
|
After Width: | Height: | Size: 4.1 MiB |
86
media/volumes.svg
Normal file
|
After Width: | Height: | Size: 68 KiB |
@ -1,5 +1,10 @@
|
|||||||
FROM python:3.11-slim-bookworm
|
FROM python:3.11-slim-bookworm
|
||||||
|
|
||||||
|
# uid to run application
|
||||||
|
ARG USER=1000
|
||||||
|
# gid to run application
|
||||||
|
ARG USER_GROUP=1000
|
||||||
|
|
||||||
# set virtual env path
|
# set virtual env path
|
||||||
ENV \
|
ENV \
|
||||||
PATH=/venv/bin:$PATH
|
PATH=/venv/bin:$PATH
|
||||||
@ -19,11 +24,15 @@ RUN \
|
|||||||
# copy app files to /app directory
|
# copy app files to /app directory
|
||||||
COPY ./app .
|
COPY ./app .
|
||||||
|
|
||||||
# install dependencies && cleanup
|
# set permissions to log directory and install dependencies && cleanup
|
||||||
RUN \
|
RUN \
|
||||||
|
chown -R ${USER}:${USER_GROUP} /app/log && \
|
||||||
pip install -r requirements.txt && \
|
pip install -r requirements.txt && \
|
||||||
apt purge --auto-remove -y
|
apt purge --auto-remove -y
|
||||||
|
|
||||||
|
# set user to run application
|
||||||
|
USER ${USER}:${USER_GROUP}
|
||||||
|
|
||||||
# start shell script when container starts
|
# start shell script when container starts
|
||||||
ENTRYPOINT ["/app/run.sh"]
|
ENTRYPOINT ["/app/run.sh"]
|
||||||
|
|
||||||
|
|||||||
@ -23,6 +23,11 @@ RUN \
|
|||||||
|
|
||||||
FROM python:3.11-slim-bookworm
|
FROM python:3.11-slim-bookworm
|
||||||
|
|
||||||
|
# uid to run application
|
||||||
|
ARG USER=1000
|
||||||
|
# gid to run application
|
||||||
|
ARG USER_GROUP=1000
|
||||||
|
|
||||||
# set virtual env path
|
# set virtual env path
|
||||||
ENV \
|
ENV \
|
||||||
PATH=/venv/bin:$PATH
|
PATH=/venv/bin:$PATH
|
||||||
@ -38,11 +43,11 @@ COPY --from=install-dependencies /venv /venv
|
|||||||
# copy app files to /app directory
|
# copy app files to /app directory
|
||||||
COPY ./app .
|
COPY ./app .
|
||||||
|
|
||||||
RUN ls -alF /
|
# set permissions to log directory
|
||||||
RUN ls -alF /venv
|
RUN chown -R ${USER}:${USER_GROUP} /app/log
|
||||||
RUN ls -alF /venv/bin
|
|
||||||
RUN ls -alF /app
|
|
||||||
|
|
||||||
|
# set user to run application
|
||||||
|
USER ${USER}:${USER_GROUP}
|
||||||
|
|
||||||
# start shell script when container starts
|
# start shell script when container starts
|
||||||
ENTRYPOINT ["/app/run.sh"]
|
ENTRYPOINT ["/app/run.sh"]
|
||||||
|
|||||||
@ -1,12 +1,14 @@
|
|||||||
IMAGE_NAME=api-server-ms
|
IMAGE_NAME=api-server-ms
|
||||||
CONTAINER_NAME=api-server-ms
|
CONTAINER_NAME=api-server-ms
|
||||||
|
|
||||||
|
|
||||||
build: clean
|
build: clean
|
||||||
@docker build \
|
@docker build \
|
||||||
--progress=plain \
|
--progress=plain \
|
||||||
--tag $(IMAGE_NAME) \
|
--tag $(IMAGE_NAME) \
|
||||||
.
|
.
|
||||||
|
|
||||||
|
|
||||||
build-multistage: clean
|
build-multistage: clean
|
||||||
@docker build \
|
@docker build \
|
||||||
--progress=plain \
|
--progress=plain \
|
||||||
@ -14,14 +16,17 @@ build-multistage: clean
|
|||||||
--file Dockerfile.multistage \
|
--file Dockerfile.multistage \
|
||||||
.
|
.
|
||||||
|
|
||||||
|
|
||||||
run:
|
run:
|
||||||
@docker run \
|
@docker run \
|
||||||
--name $(IMAGE_NAME) \
|
--name $(IMAGE_NAME) \
|
||||||
--publish 3000:3000 \
|
--publish 3000:3000 \
|
||||||
--env CONTAINER_NAME="Awesome API server" \
|
--env CONTAINER_NAME="Awesome API server" \
|
||||||
|
--volume /var/log/api-server:/app/log \
|
||||||
--detach \
|
--detach \
|
||||||
$(CONTAINER_NAME)
|
$(CONTAINER_NAME)
|
||||||
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
- @docker stop $(CONTAINER_NAME)
|
- @docker stop $(CONTAINER_NAME)
|
||||||
- @docker rm $(CONTAINER_NAME)
|
- @docker rm $(CONTAINER_NAME)
|
||||||
|
|||||||