1113 TIL

looggi·2022년 11월 13일
1

스파르타 내배캠 AI-3

목록 보기
64/130

🐋 DOCKER 2주차 8~10

🦀 Dockerfile로 직접 이미지 빌드하기

기본이 되는 이미지를 지정 ➜ 특정 패키지 설치/ 파일 추가해서 이미지 빌드
ex) docker에서 django 서비스를 배포하는 경우
기본이 되는 python 이미지를 불러온 후 ➜ pip install django로 장고 패키지를 설치해서 이미지를 빌드함

✔️ 실습) html 파일을 컨테이너 이미지에 넣어보기

  • vi Dockerfile
FROM httpd:latest

COPY ./index.html /usr/local/apache2/htdocs/index.html

➜ 현재경로의 index.html(호스트)을 다음 경로(컨테이너)의 html파일로 복사하겠다(컨테이너 내부에 기존 html이 없으면 생성, 있으면 호스트로 덮어쓰기됨)

  • vi docker-compose.yml
version: '3.8' # docker-compose.yml에 사용될 문법 버전을 정의합니다.

services:
  example:
    container_name: example
    build: .
    ports:
      - 80:80
    restart: always

➜ image 대신 build로 현재 경로(docker-compose.yml기준)의 Dockerfile로 이미지를 빌드해서 사용

  • vi index.html
  • sudo docker compose up -d

➜ Dockerfile 내용들 실행돼서 컨테이너 생성됨

  • 이후 sudo docker compose down sudo docker compose up -d 하면 빌드없이 컨테이너 생성됨 ➜ 이전에 빌드된 이미지를 사용함 ➜ 도커파일을 수정하고 이미지를 새롭게 빌드하려면 sudo docker compose up --build -d 빌드옵션이 필요함 (up 뒤로 붙는 -명령어는 순서 상관없음)

⭐ index.html 파일을 관리하는 방식 ⭐

  • bind mount
  • docker volume
  • dockerfile : 빌드시 COPY 명령어로 index.html 파일을 컨테이너 내부로 복사하는 '이미지를 빌드하는 방식'을 통해 파일을 관리

🦀 entrypoint 활용해보기

entrypoint: 컨테이너가 생성될 때 기본적으로 실행할 명령어 지정하는 옵션
Dockerfile과 docker-compose.yml애서 모두 작성 가능하지만 둘 다 있으면 docker-compose.yml의 내용으로 실행됨

  • Dockerfile
FROM python:3.9.15

ENV PYTHONDONTWRITEBYTECODE 1

ENV PYTHONUNBUFFERED 1

RUN mkdir /app/

WORKDIR /app/

COPY ./main.py /app/
# 파이썬 파일을 실행시킬 수 있도록 컨테이너에 파일을 넣어줌

➜ 사용된 ENV는 파이썬 이미지 사용시 필수

  • docker-compose.yml
version: '3.8' 

services:
  example:
    container_name: example
    build: .
    entrypoint: sh -c "python3 main.py"
    # 컨테이너 안의 파이썬 파일을 실행시킬 수 있도록 엔트리 포인트를 지정해줌
    restart: always

🦀 컨테이너 2개 띄워보기

포트번호(:기준 앞부분)/ 서비스 이름등이 중복되지 않도록 설정

  • Dockerfile은 그대로
  • docker-compose.yml
version: '3.8'

services:
  example1:
    container_name: exmaple1
    image: "httpd:latest"
    ports:
      -80:80
    restart: always

  example2:
    container_name: example2
    build: .
    entrypoint: sh -c "python3 main.py"
    restart: always
  • depends_on 옵션을 이용해서 먼저 실행될 컨테이너 지정 가능 ➜ 지정하지 않으면 컨테이너 생성이 끝나는 순서대로 컨테이너가 시작됨
    ➜ 이렇게 옵션을 추가하면 2-1순서로 실행(생성도)됨
depends_on:
    - example2

🐰 토끼반 알고리즘

🥕 부족한 금액 계산하기

def solution(price, money, count):
    answer = 0
    for cnt in range(1,count+1):
        answer += price*cnt
    if money-answer>=0:
        return 0
    else:
        return answer-money

으 아직도 range 쓰는 게 헷갈린다니
range index는 시작이 0이고 마지막이 n-1이다.

def solution(price, money, count):
    return max(0,price*(count+1)*count//2-money)
    # 등차수열 공식 n(n+1)//2 오랜만이야...

➜ 와 진짜 천재 아니냐고 max를 쓸 생각을 해...????

return answer-money if answer-money >0 else 0

리턴 뒤에 조건문을 쓸 수도 있나보당 와우

profile
looooggi

0개의 댓글