본문 바로가기
728x90

[DevOps]/Docker12

Docker Compose 정리 Docker Compose Docker Compose는 여러 개의 Docker container를 정의하고 공유하는 도구이다. 각 container는 서비스로 구성되어 하나 이상의 네트워크와 볼륨으로 연결된다. Docker Compose를 이용하여 개발 환경을 손쉽게 구성하고 빠른 테스트를 경험할 수 있다. 위 사진처럼 한 번에 여러 이미지를 빌드하고 여러 컨테이너를 동작시킬 수 있다. 컨테이너 구성을 파일 하나로 쉽게 만들 수 있으므로 단일 컨테이너일 때에도 자주 사용된다. 다중 컨테이너의 유지보수 및 관리가 수월해진다. Dockerfile을 대체하지는 않는다. 개별 컨테이너의 -d, --rm은 디폴트임으로 따로 설정하지 않아도 된다. 컴포즈 파일에 특정된 모든 서비스에 대해 새 환경을 자동으로 생성.. 2023. 7. 8.
Docker로 다중 컨테이너 애플리케이션 구축하기 - 2 (네트워크로 묶기, 데이터 지속성 추가) 지난 글에서 이어진다. 네트워크 만들기 하나의 네트워크로 연결하기 위해 네트워크를 새로 생성했다. 네트워크에 데이터베이스 컨테이너 추가 docker run --name mongodb --rm -d --network goals-network mongo --network 플래그를 사용해서 다시 컨테이너를 실행했다. 네트워크에 백엔드 서버 컨테이너 추가 백엔드 서버의 경우 데이터베이스 서버와의 연결을 설정하는 app.js를 수정해야 한다. mongoDB의 컨테이너는 더 이상 외부에 27017 포트를 열지 않는다. 네트워크 통신을 위해 --network 플래그를 사용했기 때문에 'host.docker.internal' 대신 'mongodb'라는 mongoDB의 컨테이너 이름으로 설정하면 된다. 같은 네트워크 안.. 2023. 7. 7.
Docker로 다중 컨테이너 애플리케이션 구축하기 - 1 (여러 개의 컨테이너 만들기) 이번 실습에서는 웹 애플리케이션 실행에 필요한 3가지 기본 요소인 서버, 클라이언트, 데이터베이스를 도커로 컨테이너 화하여 컨테이너로 실행시키는 것이 목표이다. 실습에 사용할 폴더에는 Node.js 기반의 백엔드 API 서버와 리액트 기반의 프론트 클라이언트 파일이 들어있다. 데이터베이스로는 mongoDB를 사용할 것이다. 노드와 리액트, mongoDB를 몰라도 어떤 흐름으로 컨테이너 간 통신이 이뤄지는지 이해할 수 있도록 간략하게 설명하겠다. 기본적인 도커 명령어 정도는 숙지하고 있어야 이해가 빠를 것이다. 로컬 호스트 머신(백엔드 서버)과 도커 컨테이너(데이터베이스 서버) 연결해보기 백엔드 서버의 app.js app.js 파일 안에는 mongoDB와 연결하기 위한 로컬호스트의 포트번호가 적혀있다. 포.. 2023. 7. 7.
Docker - 컨테이너 통신 💡 도커에서는 컨테이너 간의 통신을 크게 세 가지로 나눌 수 있다. 이 세 가지 방법에 대해 간단히 알아보자. 기본적인 웹 통신 컨테이너는 기본적으로 외부에 포트를 노출시키는 것만으로 웹에 요청을 보낼 수 있다. 도커화된 애플리케이션 내부에서 웹 API 및 웹 페이지와 통신하는 데에 특별한 설정이나 코드변경이 필요하지 않다. 로컬 호스트 머신과의 통신 로컬 호스트 머신과의 통신에는 두 가지 방법이 있다. 위 코드는 로컬 호스트 머신의 mongoDB와 연결하기 위한 Node.js(도커 컨테이너) 코드의 일부이다. 'mongodb://localhost:27017/swfavorites'라고 적혀있는 것을 보니 로컬 호스트 머신의 mongoDB와 연결하게 되는데 이때 컨테이너의 3000번 포트를 통한다. 이때 .. 2023. 7. 5.
Docker - Volumn & Bind Mount 이해하기 빌드를 통해 만들어진 도커 이미지는 읽기 전용의 데이터이다. Dockerfile에 들어있는 명령 실행이 끝나면 이미지가 잠겨 닫히므로 이후에 무언가 변경을 하기 위해서는 새 이미지를 빌드해야 한다. 도커 이미지에서 다루는 데이터의 핵심은 읽기 전용이며, 새 이미지를 빌드하는 것 말고는 기존 이미지 속 데이터를 변경하는 것은 불가능하다는 점이다. 그런데, 이렇게만 보면 도커를 실무에서 사용하기 힘들어 보인다. 프로젝트를 수행하면 영구적으로 저장할 데이터가 필연적으로 발생하기 때문이다. 만약 위의 내용처럼 단순히 한 번 빌드한 데이터만 다루고 이후에 변경이 불가능하다면 도커를 실무에서 사용하기에는 한계가 있어 보인다. 다행히 도커에서 다루는 데이터는 이외에도 두 가지가 더 있다. 하나는 애플리케이션에서 사용.. 2023. 6. 30.
도커 이미지에 대해 자세히 살펴보기(dangling image, image inspect) 태그 이미지 도커 이미지를 빌드했더니 레파지토리와 태그명이 으로 되어있었다. -t 플래그를 사용하지 않고 docker build . 로 빌드했기 때문에 발생한 문제이다. docker build -t . Repository와 Tag가 인 이미지를 Dangling Image(댕글링 이미지)라고 한다. 댕글링 이미지는 이미지에 연결된 태그가 없는 이미지이다. 실행중인 컨테이너 또는 태그가 지정된 버전과 연결되어 있지 않기 때문에 기본적으로 사용되지 않는 잉여 자원이므로 삭제하여 디스크 공간을 확보하는 것이 좋다. 발생 시나리오 정리(직접 확인해 봄) 이미지 빌드를 할 때 -t 플래그로 이미지 이름(Repositorydocd)을 넣어주지 않은 경우 이미지가 댕글링 이미지로 생성된다. 실행 중인 컨테이너가 있음에.. 2023. 6. 21.
도커 이미지 & 컨테이너 삭제 명령어 정리 컨테이너 삭제 명령어 docker rm docker rm rm은 remove를 나타내며 컨테이너를 제거하는 역할을 한다. 실행중인 컨테이너는 제거할 수 없기 때문에 컨테이너를 중지해야 한다. docker rm ... 공백을 이용한 나열을 통해 여러 컨테이너를 한 번에 지울 수 있다. docker rm -f -f / —force를 플래그를 사용하여 컨테이너가 실행중일 때에도 강제로 제거할 수 있다. docker run --rm 컨테이너를 실행하는 명령어 run에 —rm 플래그를 붙이면 컨테이너가 종료될 때 컨테이너를 자동으로 제거한다. —rm 플래그를 통해 매번 중지된 컨테이너를 직접 정리하지 않아도 된다. 서버가 포함된 컨테이너는 코드가 변경될 때 컨테이너를 중지하고 다시 이미지를 빌드하는 경우가 많은데.. 2023. 6. 21.
도커 컨테이너와 상호작용할 수 있는 Interactive Mode에 대해 알아보기 파이썬 커스텀 이미지를 만들기 위한 도커 파일 생성 FROM python 파이썬 공식 이미지를 베이스 이미지로 사용한다. WORKDIR /app 컨테이너가 실행되면 작업 디렉터리를 /app으로 설정한다. COPY . /app 도커 파일과 함께 있는 파일을 모두 app 폴더에 복사한다. CMD ["python", "run.py"] 컨테이너가 시작될 때 실행되어야 하는 명령이다. 도커 이미지 빌드하기 docker build . 명령어를 실행하고 image ID를 복사한다. 여기서 image ID는 sha256으로 암호화된 부분이다. 도커 컨테이너 실행하기 docker run 명령어를 통해 컨테이너를 실행하려고 했지만 실패했다. 이유는 컨테이너로 실행중인 애플리케이션과 상호작용을 할 수 없기 때문이다. 파이썬.. 2023. 6. 16.
728x90