[Cloud] Docker-이미지_2

MeltingOlaf·2022년 5월 11일
0

[Cloud]

목록 보기
10/25

⭐️ 쉘 변수

a.sh

#!/bin/sh

echo "\$MSG = $MSG"
echo "\$@ = $@"
echo "\$0 = $0"
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$3 = $3"
MSG="Hello World" ./a.sh 1 2 3 4 5 6
  • $0: 명령어
  • $1: 첫번째 argument
  • $2: 두번째 argument
  • $@: 모든 argument

⭐️Alpine Linux

Busybox + APK(패키지 관리자)

패키지 인덱스

apk update

패키지 검색

apk search <PKG>

패키지 추가

apk add <PKG>

패키지 제거

apk del <PKG>

Dockerfile 명이 다른 경우

Dockerfile-alpine

docker build -f Dockerfile-alpine -t pyhello:v1 .

⭐️ 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/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']

기본 포트 : 5000

  • freeze
    -현재 설치한 패키지들을 txt파일로 저장
pip3 freeze > requirements.txt
  • 가상 환경 구성 후 txt파일에 저장되어 있는 패키지 설치
pip3 install -r requirements.txt

⭐️ Django

Django : 풀스택 프레임 워크

mkdir ~/python/hello-django
cd ~/python/hello-django
  • 가상환경을 사용하기 위한 설치
python3 -m venv [가상환경이름]
pip3 install Django # $ python -m pip install Django와 동일
pip3 freeze > requirements.txt

mysite/settings.py

...
ALLOWED_HOSTS = ['*']
...
cd mysite
python3 manage.py runserver 0.0.0.0:8000

⭐️ 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)

so : c 라이브러리를 의미

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
profile
How R U Today :)

0개의 댓글