Docker
Flowchart
Step 1. Development
Download the sample code
- git clone https://github.com/lin-chen-Langley/count
-
Fetch Redis image to local docker daemon
- # docker login
- docker image pull redis
-
Run Redis image as a container
- docker run -d -p 6379:6379 redis
-
Run Count in local
- # install needed dependencies
-
- # run app
- python app.py
-
- # access app
- http://localhost:5000/
-
Step 2. Image Creation
Create an Docker Hub account if you do not have one
- https://hub.docker.com/
-
Create a Dockerfile in your code folder
- # Dockerfile
- FROM python:3.7-alpine # build image from python:3.7
- WORKDIR /code # set up default directory
- ENV FLASK_APP=app.py
- ENV FLASK_RUN_HOST=0.0.0.0
- RUN apk add --no-cache gcc musl-dev linux-headers # install needed Linux tools
- COPY requirements.txt requirements.txt # copy a file from local to image
- RUN pip install -r requirements.txt # install dependencies of the app
- EXPOSE 5000
- COPY . . # copy all files in the current folder to image
- CMD ["python", "app.py"] # run the command when run the image as container
-
Create an image for Count
- docker build -t lchenlangley/count .
-
Push the image to a registry
- # docker login
- docker push lchenlangley/count
-
Step 3. Orchestration
Create a compose file
- # compose.yaml
- version: "3.9" # version of Docker Compose
- services:
- webapp: # create a container for Count
- image: lchenlangley/count # load image from DockerHub
- ports:
- - 8000:5000 # port mapping
- environment:
- - MYREDIS_HOST=redisserver # pass ip of redisserver to webapp
- - FLASK_ENV=development
- redisserver: # create a container for redis
- image: "redis:alpine" # load image from DockerHub
-
Run the app
- # compose containers
- docker-compose up
-
- # access app
- http://localhost:8000/
-
Exercise
1. Run the app with docker-compose up
2. Update the app, change Hello World from Docker to Hello [Your Name]
3. Create an image for the updated code, the image name should be [your_dockerhub_username]/count
4. Push the built image to Docker Hub
5. Rerun the app