Docker 애플리케이션 운영(22.05.11)

박민선·2022년 5월 12일
0

C

Language

  • 컴파일: C, C++, Golang, Rust -> 실행파일
    - Java, .NET(C#) -> Bytecode
  • 스크립트: Shell, Perl, Python, Ruby, Javascript
    - 인터프리터/런타임
sudo apt install gcc
mkdir ~/clang
cd ~/clang

hello.c

#include <stdio.h>

int main() {
        printf("Hello C World\n");
        return 0;
}

동적 바이너리

gcc hello.c -o hello
file hello

... dynamically linked ...
ldd hello

    linux-vdso.so.1 (0x00007ffcd014b000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe1a8ed2000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fe1a90d2000)
mkdir -p lib/x86_64-linux-gnu
mkdir lib64
cp /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu/
cp /lib64/ld-linux-x86-64.so.2 lib64/

Dockerfile

FROM scratch
COPY lib /lib
COPY lib64 /lib64
COPY hello /
CMD ["/hello"]
docker build -t hello:dynamic .
docker run hello:dynamic

정적 바이너리

gcc hello.c -static -o helloc

Dockerfile-static

FROM scratch
COPY helloc /
CMD ["/helloc"]
docker build -f Dockerfile-static -t hello:static .
docker run hello:static

멀티 빌드

Dockerfile-multi

FROM gcc AS cbuilder
WORKDIR /root
ADD hello.c .
RUN gcc hello.c -static -o hello

FROM scratch
COPY --from=cbuilder /root/hello /
CMD ["/hello"]
docker build -f Dockerfile-multi -t hello:multi .
docker run hello:multi

Flask

  • python3
  • python3-pip
  • python3-venv
sudo apt install python3-pip python3-venv
mkdir ~/python/hello-flask
cd ~/python/hello-flask

가상환경/프로젝트 생성

python3 -m venv venv

가상환경 활성화

. venv/bin/activate

가상환경 비활성화
deactivate

pip3 install Flask

hello.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"
export FLASK_APP=hello
flask run
flask run --host='0.0.0.0' [--port='8080']
pip3 freeze > requirements.txt

pip3 install -r requirements.txt


Django

https://docs.djangoproject.com/en/4.0/intro/tutorial01/

mkdir ~/python/hello-django
cd ~/python/hello-django
python3 -m venv venv
. venv/bin/activate
pip3 install Django
django-admin startproject mysite
cd mysite

mysite/settings.py

...
ALLOWED_HOSTS = ['*']
...
python3 manage.py runserver 0.0.0.0:8000
curl 192.168.100.100:8000
python3 manage.py startapp polls

polls/views.py

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

polls/urls.py

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

mysite/urls.py

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]
python3 manage.py runserver 0.0.0.0:8000
curl 192.168.100.100:8080/polls
pip3 freeze > requirments.txt

.dockerignore

venv/
Dockerfile
.dockerignore

Dockerfile

# For Normal Buster
FROM python:3.9-buster

# For Slim Buster
#FROM python:3.9-slim-buster
#RUN apt update && apt install -y gcc libc6-dev

# For Alpine Linux
#FROM python:3.9-alpine
#RUN apk add gcc musl-dev

COPY . /app
WORKDIR /app
RUN python3 -m venv venv && . venv/bin/activate
RUN pip3 install -r requirments.txt

WORKDIR /app/mysite
CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"]
EXPOSE 8000

profile
클라우드신생아

0개의 댓글