FROM node도커 허브에서 node 라는 이미지를 기반으로 하겠다.WORKDIR /app이미지 내에 파일 시스템 중 /app 디렉토리를 생성하고 작업 디렉토리로 설정하겠다.COPY . /app현재 디렉토리(. -> Dockefile이 있는 곳)를 이미지 내의 /ap
이미지는 레이어 기반이다. 이미지를 빌드하거나 다시 빌디할 때 변경된 부분의 명령과 그 이후의 모든 명령이 재평가 된다. 만일 동일한 이미지를 재빌드 할때 도커는 캐쉬를 사용해 빠르게 빌드한다.도커는 도커파일의 모든 명령 결과를 캐쉬하고 다시 명령을 수행할 필요가 없을
\-i : 인터렉티브 모드를 수행한다. attach모드가 아니라도 표준 입력을 열린 상태로 유지한다. \-t : 터미널을 생성한다. (i와 t를 결합하면 무언가 입력가능, 컨테이너는 입력을 수신하고 컨테이너에 의해 노출되는 터미널도 얻게 된다. 컨테이너는 입력을 받는
docker ps -a 모든 컨테이너를 출력한다.docker rm <컨테이너>로 해당 컨테이너를 삭제할 수 있다.docker contaienr prune 로 작동하지 않는 컨테이너를 모두 삭제한다. (prune 가지치기)docker images 모든 이미지를 출력
이미지에는 애플리케이션 코드와 환경이 포함되어 있다. 꽤 큼 컨테이너는 명령 레이어가 이미지 위에 추가된 얇은 부가 레이어이다. 즉 이미지 코드는 실행중인 컨테이너에서 사용된다. 컨테이너는 이미지를 기반으로 빌드되고, 동일한 이미지로 빌드된 컨테이너는 이미지의 코드를
docker cp <전달할 디렉토리> <전달받을 디렉토리>docker cp dump/. <컨테이너Name>:/test위 명령어는 로컬 디렉토리 dump 하위의 모든 파일을 컨테이너의 /test 디렉토리에 붙여넣겠다는 의미이다.docker cp <컨
컨테이너는 이름을 지정할 수 있다.docker run -p 3000:80 -d --rm --name <컨테이너 이름> <이미지ID>\--name 태그로 컨테이너에 이름을 지정할 수 있다.이미지는 name(repository):tag 형식으로 식별할 수 있다.
docker login으로 도커허브 계정 로그인도커허브 저장소를 만들면 <계정ID>/<저장소이름> 으로 저장소가 생성된다.local에서 도커허브로 push를 하기 위해선 해당 이미지의 이름을 <계정ID>/<저장소이름> 으로 만들어야 한다.(tag는
Application우리가 직접 작성한 로직이 들어있는 어플리케이션 파일이다.도커파일로 이미지를 빌드하는 순간 read-only 이미지가 만들어 진다.컨테이너는 이미지를 미러링해 파일의 디렉토리를 파악하고 실행한다.Temporary App Data컨테이너가 실행 중일
볼륨은 도커가 인식하는 호스트 머신에 있는 폴더로서 도커 컨테이너 내부의 폴더와 매핑된다. 그렇기 때문에 변경사항이 생기면 반영된다. 컨테이너가 제거 되어도 파일은 유지되게끔 하기위해선 볼륨을 사용하면 될까?도커파일에 VOLUME \[ "<볼륨을 만들고 싶은 이미
데이터 저장소에는 도커가 관리하는 볼륨 말고도 호스트 머신 유저가 관리하는 바인드 마운트가 존재한다.바인드 마운트는 영구적이고 편집 가능한 데이터에 적합하다. (볼륨과의 차이점)폴더를 컨테이너에 마운트할 때 도커가 액세스 할 수 있는 폴더여야 한다. (도커 환경설정 f
바인드 마운트는 소스코드를 편집할 수 있고 변경사항은 컨테이너 내부에서 자동적으로 사용할 수 있게끔 한다.그 아이디어는 컨테이너가 app폴더에 쓸 수 있어야 한다는 것이 아니라 컨테이너는 여기 로컬에 있는 파일을 변경할 수 없어야 한다는 것이다. 파일을 변경할 수 있는
도커는 빌드 타임 인수와 런타임 환경 변수를 지원해 유연한 이미지와 컨테이너를 만들 수 있다.환경 변수는 런타임 (docker run) 에 유용하게 사용된다.도커파일에 환경 변수를 지정하면 도커 파일내에서도 쓸 수 있고, 코드에도 사용할 수 있다.docker run -
기본적으로 컨테이너는 월드 와이드 웹에 요청을 보낼 수 있다. 도커화된 어플리케이션에서 웹API 과 통신할 수 있다. 그럼 로컬에 설치된 MongoDB와의
docker run --rm -p 3000:3000 --name goal-frontend goal-react컨테이너를 시작하는 명령어로 별 문제가 없어 보인다. 하지만 실행해보면 서버가 시작하자마자 중지된다. 그 이유는 리액트는 입력을 수신하지 않으면 서버가 즉시 중
도커 컴포즈는 다중 컨테이너 설정을 손쉽게 하는 도구이다.docker build , docker run 명령을 대체할 수 있다.도커 컴포즈에선 다중 컨테이너 하나하나를 서비스 라고 부른다. 서비스가 사용할 포트, 환경변수, 볼륨, 네트워크 를 지정할 수 있다. 이는 도
이제까지는 애플리케이션 코드와 실행하는 환경이 포함된 애플리케이션 컨테이너를 사용했다.도커의 핵심 아이디어고 전형적인 컨테이너이다. 유틸리티 컨테이너는 특정 환경만 포함하는 컨테이너를 의미한다.(Nodejs 나 Php환경 등)도커는 특정 환경을 전역적으로 설치하는 것과
php는 node와 달리 서버를 만들 수 없어 nginx를 사용해야 한다. 애플리케이션 컨테이너 Server server 컨테이너는 nginx서버로 들어오는 요청을 받아 PHP 인터프리터를 트리거 한다. 들어오는 요청을 살펴보고 php 컨테이너로 전달하는 것.
개발환경에선 편의를 위해 바인드마운트을 이용해 실행중인 컨테이너 내부 코드를 라이브로 수정했다. 하지만 배포환경에선 컨테이너는 스탠드얼론 상태가 유지되야 하므로 바인드마운트를 사용하면 안된다.
aws 에서 ec2 인스턴스를 생성할 때 ssh 접속을 위한 keypair를 생성한다.
이전에는 ec2 인스턴스를 이용해 리모트 머신에 도커를 설치하고 도커 허브에서 이미지를 가져와 호스팅을 진행했다.
하나의 머신에서 다중 컨테이너를 docker-compose를 이용해 진행했다. 도커 컴포즈를 이용하면 컨테이너들이 하나의 도커네트워크 내에 속해 같은 네트워크 내의 통신이 편하다는 장점이 있었다.
퍼블릭 IP 주소는 업데이트 된 컨테이너를 배포할 때마다 변경된다. 이를 방지하게 위해 로드 밸런서를 이용한다. 로드 밸런서를 이용하면 IP 주소 변경에 신경쓰지 않고 동일한 URL에 요청을 보낼수 있음을 보장한다.
이전까지는 몽고디비를 컨테이너에 담아 ecs로 하나의 태스크에 담아 노드백엔드 컨테이너와 함께 배포환경을 만들었다.
리액트의 npm start 는 개발용 명령어이다. npm start를 입력하면 노드가 자체 개발용 웹서버를 띄워 라이브 리로딩이 가능케 한다