내가 이해한대로 사용해보기
5/14 내용이 수정되었습니다
쉽게 말해 내가 개발한 프로젝트(=어플리케이션 = 코드 등)를 패키징할 수 있는 툴이다.
컨테이너를 기반으로 어느 환경에서나 동일하게 동작하도록한다.
그리고 도커는 기본적으로 우분투에서 사용이 가능하다고 한다.
어플리케이션을 실행할 때 필요한 코드, 시스템 라이브러리 그리고 설정 등을 포함한 템플릿같은 것이다.
쉽게 말해 이렇게 프로그램을 실행하겠다라는 설계도로 비유할 수 있을 것 같다.
해상에서 사용하는 컨테이너는 이런 규격화된 형태를 가지고 있다. 그래서 안에 어떤 내용물이 있는지 신경안써도 그냥 옮기고, 내리면 된다.
도커의 컨테이너도 비슷하게 어플리케이션을 분리하는 단위라고 생각하면 될 것 같다. 그리고 우리가 만들었던 이미지를 이용하여 컨테이너를 만든다.
* 하나의 Image로 여러개의 Container를 만들 수 있다.
* Frontend에서는 그럴 필요가 있는지는 모르겠지만, Backend같은 경우는 트래픽처리를 위해 Container를 병렬적으로 사용한다고 함
순서는 이 이미지와 같다.
도커허브에서 내가 사용하려는 라이브러리를 다운받을 수 있다.
나는 파이썬 프로젝트를 배포할 예정이라
도커허브 사이트에서 python을 가져온다라는 의미의 FROM python:버전 을 적어주었다.
만약 React 프로젝트라면 FROM node로 적으면 된다.
fastapi
uvicorn
pydantic
sqlalchemy
aiomysql
loguru
python-jose
passlib
ujson
requirements.txt를 도커에 복사하고, 기타 필요한 파일도 복사해준다.
** 도커파일의 경우 하나라도 수정이 되면 이미지를 다시 빌드해야한다.
$ sudo docker build -t {이미지 이름} .
sudo docker run -p {호스팅포트}:{도커포트} -v /home/User/back/{로그 디렉토리}:/code/log {이미지 이름}
* -v 뒤에 있는 경로는 Container가 실행하고 있는 중에 쌓이는 로그파일을 나의 로컬 프로젝트에 동기화 시키기 위한 옵션이다. 필요하지 않다면 지워도 무방하다.
+@
이미지 삭제할 때 명령어
sudo docker image rm diary_api
컨테이너 삭제할 때 명령어
sudo docker rm -f {컨테이너 ID}