도커 11

[도커] 14. ECR 무작정 사용하기

지금까지 도커 이미지를 관리하기 위한 원격 저장소로 도커 허브를 사용했다. AWS에서도 동일한 기능을 수행하는 서비스를 제공한다. 바로 ECR이다. ECR을 사용하면 AWS의 다른 기능과 연합하여 더욱 막강한 시너지를 낼 수 있다. ECR을 한번 사용해보자. 이용 요금 https://aws.amazon.com/ko/ecr/pricing/?did=ap_card&trk=ap_card 완전관리형 컨테이너 레지스트리 – Amazon Elastic Container Registry 요금 - Amazon Web Services Amazon Elastic Container Registry(Amazon ECR)는 어디에서나 컨테이너 소프트웨어를 손쉽게 저장, 공유 및 배포할 수 있는 완전관리형 컨테이너 레지스트리입니다..

[도커] 13. 바인드 마운트 사용하기

개발할 때는 보통 도커환경에서 테스트하지 않고 로컬에서 테스트를 한다. 하지만 테스트마저도 도커환경에서 하고 싶을 수 있다. 만약 이러한 상황에서 코드가 수정되면 어떤 일이 벌어질까? 컨테이너환경도 수정된 사항을 반영하기 위해 아래 작업을 수행한다. 도커 이미지를 재 빌드한다. 실행중인 컨테이너를 종료한다. 빌드한 이미지를 다시 실행시킨다. 크게 복잡한 과정은 없지만 수시로 변경되는 코드를 생각해보면 정말 귀찮은 작업이다. 이를 해결하기 위해 바인드 마운트를 사용하면 편리하게 사용할 수 있다. 프로젝트 준비 # main.py from fastapi import FastAPI import uvicorn app = FastAPI() @app.get("/") async def root(): return {"m..

[도커] 12. dockerignore

우리는 git을 사용할 때 불필요한 파일의 add를 방지하기 위해 .gitignore파일로 관리한다. 도커도 같은방식으로 .dockerignore파일을 이용하여 관리할 수 있다. 사용방법을 한번 알아보자. 문제상황 dockerignore가 없을 경우 어떤 문제가 있는지 알아보자. # 폴더구조 ├── Dockerfile ├── log └── main.py # Dockerfile FROM python WORKDIR /app COPY . . CMD ["python3", "main.py"] # main.py import time while 1: pass # Do something main.py 는 어떤 작업을 수행하는 파이썬 파일이다. (ex. 웹서버, 모델 학습 ...) log파일은 컨테이너를 만들 때 불필요..

[도커] 11. 환경변수

도커에 들어있는 앱을 사용할때 데이터베이스 사용자 이름같은 환경변수를 주입해야 할 때가 있다. Dockerfile을 만들 때 편리한 방법으로 환경변수를 넣을 수 있다. 폴더 구성 ├── Dockerfile ├── app.py └── templates └── main.html 폴더 구조는 위와 같다. 간단한 플라스크를 이용해서 테스트해보고자 한다. # app.py from flask import Flask, render_template import os app = Flask(__name__) user = os.environ.get("USER_NAME") port = os.environ.get("PORT") @app.route("/") def main(): return render_template("main..

[도커] 10. 도커 네트워크

컨테이너에서 외부 api를 불러온다든지 다른 컨테이너의 api를사용하는 등 컨테이너에서 통신이 필요할 때가 있다. 실제로 컨테이너를 하나만 사용할 경우는 별로 없고 프론트 컨테이너, 백엔드 컨테이너, 데이터베이스 컨테이너를 한번에 사용하는 것처럼 여러개의 컨테이너가 통신해야 하는 경우가 많다. 이러한 통신을 하는 방법에 대해서 알아보자. 유스케이스 일단 컨테이너에서 통신을 하는 경우가 크게 아래와 같을 것이다. 여기서 호스트 컴퓨터는 도커를 실행하고 있는 컴퓨터이다. 5번과 6번은 실질적으로 컨테이너간의 통신이기 때문에 하나의 경우라고 봐도 된다. 물론 1부터 6까지 모든 연결이 가능하다. 이제 어떻게 통신하는지 알아보자. 위 통신을 위해 간단한 파일 두개를 한 폴더에 만들었다. # app.py from..

[도커] 8. Dockerfile 요소

지난시간에 가장 간단한 Dockerfile를 빌드해 이미지를 만들었다. 이제 Dockerfile에 어떤 내용을 써야하는지 알아보려고 한다. - FROM 기반 이미지 로드 FROM ubuntu:20.04 - MAINTAINER 개발자정보 입력(잘 사용하지 않는다. 대신 LABEL사용 추천) MAINTAINER riroan - LABEL 이미지 정보 입력 LABEL version="1.0" description="this is my image" - RUN FROM에서 로드한 이미지에서 실행할 명령이나 스크립트 RUN 명령어 사용 시 사용자와의 인터렉션이 있으면 안된다.(ex : 설치시 y/n누르는 부분) # shell 에서 RUN echo hello world # shell 없을 때 RUN ["echo", ..

[도커] 7. 가장 간단한 이미지 만들기

이번시간에 도커를 사용해서 가장 간단한 이미지를 만들어 빌드해볼것이다. 만들 내용은 우분투 이미지에 hello world 를 출력하는 이미지를 만들것이다. 우선 빈 폴더를 하나 만들어서 안에 Dockerfile라는 이름의 파일을 생성한다. (스펠링이 맞아야 한다!) 이후 Dockerfile를 편집기로 열어서 아래 내용을 작성한다. FROM ubuntu ENTRYPOINT ["echo", "hello, docker"] 스크립트 내용은 차차 알아갈 것이다. Dockerfile이 있는 폴더에서 다음 명령어를 이용해 빌드를 시작한다. docker build . 현재 위치를 빌드할 것이기 때문에 .를 입력했다. 만약 빌드하려는 도커파일이 다른 위치에 있다면 해당 위치를 .대신에 써주면 된다. 이미지가 두개 생겼는..

[도커] 6. 도커 명령어 2

이번시간엔 도커를 실행시킬때 사용되는 여러가지 옵션들에 대해 살펴볼것이다. docker run을 사용해서 우분투 이미지를 다운받아 컨테이너화해서 실행시켰다. 우선 ubuntu:latest 라는 문구가 눈에 띈다. 그냥 이미지 이름만 입력하여 다운받으면 자동적으로 최신버전의 이미지를 다운받는다.(latest version) 특정 버전의 이미지를 다운 받기 위해서는 "{이미지이름}:{버전}"형식으로 입력하면 된다. 지난시간과 마찬가지로 우분투가 시작하자마자 끝났기때문에 docker ps 에는 나오지 않고 docker ps -a에 나오는 모습을 볼 수 있다. 이를 방지하기 위해 아래의 명령어를 입력한다. docker run -it ubuntu 이는 우분투 컨테이너와 직접 상호작용을 한다는 의미이다. 이제 우분..

[도커] 5. 도커 명령어 1

지난시간에 docker run 명령을 통해 hello-world컨테이너를 실행시켰다. run 명령어는 로컬에 이미지가 있는지 확인하고 없으면 원격 저장소에서 다운받고 컨테이너를 만들고 실행까지 시켜준다. 사실 run은 pull, create, start명령어로 분해할 수 있다. docker pull ubuntu pull명령어로 우분투 이미지를 다운만 받게 되었다. 다운받은 이미지를 확인하려면 다음 명령어를 입력한다. docker images 방금 다운받은 우분투 이미지가 들어왔다. 이제 이미지를 컨테이너화 해야한다. docker create ubuntu docker ps -a ps -a는 컨테이너 목록을 보는 명령어이다. 컨테이너를 보면 여러가지 요소가 있다. CONTAINER ID : 컨테이너 고유 I..

[도커] 4. Hello Docker

프로그래밍 세계에서는 언어든 라이브러리든 Hello world를 출력하는 것부터 시작한다. 이번 시간에 도커를 사용해서 Hello world를 실행해보도록 한다. 실행방법은 간단하다. docker run hello-world 이 화면이 나오면 성공한 것이다. 실행 과정을 크게 3부분으로 나눠보았다. 빨간 부분은 hello-world 이미지를 로컬에서 찾을 수 없어서 다운받겠다는 내용이다. 파란 부분은 실제 다운받는 과정이며 pull complete앞에 있는 2db... 로 이루어진 문자가 레이어를 나타낸다. 다운 후 유효성 검증을 거친다. 노란 부분은 다운이 완료된 이미지를 실행하여 보여주는 부분이다. 다운받은 이미지를 확인하기 위해 다음 명령어를 입력한다. docker images 방금 다운받은 hel..