Docker: Difference between revisions

From bibbleWiki
Jump to navigation Jump to search
Line 160: Line 160:
     ports:  
     ports:  
       - 33066:3306
       - 33066:3306
    networks:
      django_demo:
networks:
  django_demo:
    external: true
</syntaxhighlight>
==Flask Container==
===Requirements===
Here are the specific requirements for the Flask container.
<syntaxhighlight lang="bash">
Flask==1.1.2
Flask-SQLAlchemy==2.4.4
SQLAlchemy==1.3.20
Flask-Migrate==2.5.3
Flask-Script==2.0.6
Flask-Cors==3.0.9
requests==2.25.0
mysqlclient==2.0.3
pika==1.1.0
</syntaxhighlight>
===DockerFile===
This command runs the flask app at start up
<syntaxhighlight lang="Dockerfile">
FROM python:3.9
ENV  PYTHONNUMBUFFERED 1
WORKDIR /app
COPY requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt
COPY . /app
</syntaxhighlight>
===Yaml===
We can build a container using docker-compose. Create a docker file with
<syntaxhighlight lang="Dockerfile">
version: '3.8'
services:
  flask:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: flaskapp
    command: python main.py
    ports:
      - 8001:5000
    volumes:
      - .:/app
    depends_on:
      - db
    networks:
      django_demo:
  queue:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: flaskqueue
    command: 'python consumer.py'
    depends_on:
      - db
    networks:
      django_demo:
  db:
    image: mysql:5.7.32
    container_name: flaskdb
    restart: always
    environment:
      MYSQL_DATABASE: main
      MYSQL_USER: root
      MYSQL_PASSWORD: root
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - .dbdata:/var/lib/nysql
    ports:
      - 33067:3306
     networks:
     networks:
       django_demo:
       django_demo:

Revision as of 14:13, 10 January 2021

Common commands

Show the current docker image running

sudo docker ps 

Show the images available

sudo docker images

Stop a container id

sudo docker stop <container id>

Start a container id

sudo docker stop <container id>

Show ports exposed

sudo docker port <container id>

List current containers

sudo docker container ls -s

Remove a container

sudo docker container rm <container id>

Pull a container

sudo docker pull <image name>

This will remove all images without at least one container associated to them

docker image prune -a

This will remove all stopped containers

docker container prune

Build Container

RUN command

RUN su-exec volpara git clone https://github.com/bibble235/aports

Copying from on container

Given the container

FROM ubuntu:18.04 AS opencv_build

Copying can be done using

COPY --from=opencv_build /usr/local/opencv/ /usr/local/

Creating a docker postgres image

This exposes the default port 5432 for postgres

docker run --name postgresq-spring -e POSTGRES_USER=iain -e POSTGRES_PASSWORD=password -p 5432:5432 -v /data:/var/lib/postgresql/data -d postgres:alpine

The -d is to run the container in the background
The postgres:alpine is the image name
The -p is the port to expose which is the default for postgress The -v is where the data will be stored

Volumes

List volumes

docker volume ls 

Create a volumes

docker volume create hello

Build MediaWiki Container

Build your own Docker Image

Get the definition from github and build the container.

https://github.com/wikimedia/mediawiki-docker/blob/38d4e7f77f8b5b4efda91f969ccba2475fc2c597/1.35/apache/Dockerfile
docker build .

Use Prebuilt

We can install the prebuilt one with

docker pull mediawiki


We can find the container with the command

docker ps --format "table {{.ID}}\t{{.Status}}\t{{.Names}}"

b0ff6611123e   Up 2 minutes   some-mediawiki
898c8f40818d   Up 6 hours     k8s_operator_openshift-web...
b02230ae7074   Up 6 hours     k8s_kube-dns_kube-dns-qhbvf_....
ea19641bc9a1   Up 6 hours     k8s_webconsole_webconsole-...
0dc6ee563a9b   Up 6 hours     k8s_registry_docker-registry-...
0b6ea1064152   Up 6 hours     k8s_operator_openshift-servic...
...

From there we can get the ip address with

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' b0ff6611123e

172.17.0.9

Delete Container

We can stop the contain and delete it

docker stop b0ff6611123e
docker container rm b0ff6611123e

Docker Compose

Django Container

Requirements

Here are the specific requirements for the Django cotainer.

Django==3.1.5
djangorestframework==3.12.2
mysqlclient==2.0.3
django-mysql==3.10.0
django-cors-headers==3.6.0
pika==1.1.0

DockerFile

This command runs the django app at start up

FROM python:3.9
ENV  PYTHONNUMBUFFERED 1
WORKDIR /app
COPY requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt
COPY . /app

Yaml

We can build a container using docker-compose. Create a docker file with

version: '3.8'
services: 
  django:
    container_name: djangoapp
    build: 
      context: .
      dockerfile: Dockerfile
    command: 'python3 manage.py runserver 0.0.0.0:8000'
    ports: 
      - 8000:8000
    volumes: 
      - .:/app
    depends_on:
      - db
    networks:
      django_demo:

  queue:
    environment:
      - PYTHONUNBUFFERED=1
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: djangoqueue
    command: 'python3 consumer.py'
    depends_on:
      - db
    networks:
      django_demo:

  db: 
    image: mysql:5.7.32
    container_name: djangodb
    restart: always
    environment: 
      MYSQL_DATABASE: admin
      MYSQL_USER: root
      MYSQL_PASSWORD: root
      MYSQL_ROOT_PASSWORD: root
    volumes: 
      - .dbdata:/var/lib/mysql
    ports: 
      - 33066:3306
    networks:
      django_demo:

networks:
  django_demo:
    external: true

Flask Container

Requirements

Here are the specific requirements for the Flask container.

Flask==1.1.2
Flask-SQLAlchemy==2.4.4
SQLAlchemy==1.3.20
Flask-Migrate==2.5.3
Flask-Script==2.0.6
Flask-Cors==3.0.9
requests==2.25.0
mysqlclient==2.0.3
pika==1.1.0

DockerFile

This command runs the flask app at start up

FROM python:3.9
ENV  PYTHONNUMBUFFERED 1
WORKDIR /app
COPY requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt
COPY . /app

Yaml

We can build a container using docker-compose. Create a docker file with

version: '3.8'
services: 
  flask:
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: flaskapp
    command: python main.py
    ports: 
      - 8001:5000
    volumes: 
      - .:/app
    depends_on:
      - db
    networks:
      django_demo:

  queue:
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: flaskqueue
    command: 'python consumer.py'
    depends_on:
      - db
    networks:
      django_demo:

  db: 
    image: mysql:5.7.32
    container_name: flaskdb
    restart: always
    environment: 
      MYSQL_DATABASE: main
      MYSQL_USER: root
      MYSQL_PASSWORD: root
      MYSQL_ROOT_PASSWORD: root
    volumes: 
      - .dbdata:/var/lib/nysql
    ports: 
      - 33067:3306
    networks:
      django_demo:

networks:
  django_demo:
    external: true