도커 컴포즈는 오케스트레이션 명령 set으로, docker build와 docker run을 대체할 수 있다. docker compose 명령을 사용하여 모든 것을 시작하고 중단할 수 있다. 도커 컴포즈를 사용하면 공유 가능한 config 파일을 가지게 되는 것이다. 도커 컴포즈는 Dockerfile을 대체하지 않는다. 도커 컴포즈는 다수의 호스트에서 다중 컨테이너를 관리하기에는 부적합하다. 도커 컴포즈는 하나의 호스트에서 다중 컨테이너를 관리할 때 편하다. 터미널에서 Docker 명령을 써야하는 거의 모든 것을 컴포즈에서 할 수 있다.
전체 글
짱이 될 거야www 통신 기본적으로 컨테이너는 www에 요청을 보낼 수 있다. 도커화된 애플리케이션 내부에서 웹 API 및 웹 페이지와 통신 가능하다. 도커화된 애플리케이션 내부에서 http에 요청을 보낼 수 있다. 컨테이너와 로컬 호스트와의 통신 특수 도메인 host.docker.internal 을 사용해야 하며, 이 도메인은 도커에 의해 인식된다. // mongodb type 'mongodb://host.docker.internal:27017' // http type 로컬호스트에 웹서버가 있고 그것과 통신할 때 'http://host.docker.internal:27017' 도커 컨테이너 내부에서 알 수 있는 호스트 머신의 IP로 변환된다. 도메인이 필요한 곳, IP가 필요한 곳 모두 사용 가능하다. 특수 도메인..
Environment(Runtime) Dockerfile 내에서 혹은 어플리케이션 코드에서 접근 가능 Dockerfile에 ENV로 환경 변수를 설정하면 $를 이용해 변수임을 알려 사용할 수 있다. Dockerfile에서 PORT를 환경 변수로 등록해주었으므로 PORT 번호를 받아와 위와 같이 js 파일에서 사용할 수 있다. --env PORT=8000을 이용해 Dockerfile에서 직접 포트를 변경하지 않고 컨테이너를 실행하면서 포트를 변경할 수 있다. 내부 포트를 8000으로 변경시킨다는 의미이다. 환경변수 파일을 만들 수도 있다. .env 파일에 사용할 환경변수 값을 집어넣은 후 RUN 명령시 --env-file의 옵션값으로 .env 파일을 준다. Argument(build-time) Docker..
dockerfile에서 COPY 할 때 .dockerignore 파일을 이용해 COPY하지 않을 파일 및 폴더를 지정할 수 있다. gitignore와 비슷하게 사용하면 된다. 파일명은 반드시 .dockerignore로 지정해야 한다. 현재 node_modules를 COPY하지 않도록 지정한 것이다. Dockerfile .git 보통 Dockerfile과 .git 폴더가 올라가지 않도록 설정해준다. 올라갈 필요가 없으므로.
docker volume inspect [volume_name] 명령을 이용하여 볼륨에 대한 자세한 정보를 확인할 수 있다. createdAt: 만들어진 시간 Mountpoint: 실제로 데이터가 저장되는 호스트 상의 경로 이것은 도커가 설정한 가상머신 내부에 있기 때문에 실제 경로가 아니며 경로가 다시 매핑된다. 따라서 사용자가 이 경로를 직접 찾아낼 수 없다.
현재 사용 중인 Web 구조 title과 text를 적어서 save 하면 내부에 /feedback 디렉토리가 생기고 그 안에 내용이 저장된다. title에 맞춰 /feedback/awesome.txt로 접속했을 때 해당 내용이 나타난다. 1. Code 작성 2. dockerfile 작성 FROM node:14 WORKDIR /app COPY package.json . RUN npm install COPY . . EXPOSE 80 VOLUME [ "/app/feedback" ] CMD [ "node", "server.js" ] 3. docker build -t feedback-node:volume feedback-node 이름으로 이미지 작성 4. docker run -d --rm -p 3000:80 --..
# 사용할 이미지 FROM node # 컨테이너에서 돌아갈 작업 디렉터리 WORKDIR /app # 로컬 .의 모든 파일을 컨테이너의 /app에 복사 # 작업 디렉터리를 /app으로 지정했으므로 ./라고 써도 같은 의미 COPY . /app # 이미지 설치 후 실행할 명령(/app 아래에서 실행) RUN npm install # 컨테이너의 80포트를 로컬에 노출 EXPOSE 80 # 컨테이너 시작 시 실행될 명령 CMD ["node", "server.js"] 작업 디렉터리로 /app을 지정했음에도 COPY 에서 ./가 아닌 /app으로 작업할 디렉터리를 명시하는 이유 파일을 복사할 위치를 정확히 알 수 있고 현재 작업 디렉토리가 무엇인지 보기 위해 노력할 필요가 없다. CMD와 RUN의 차이점 CMD는 ..
history history # 커맨드 입력에 대한 기록 출력 !! # 바로 직전에 실행한 명령 재실행 !번호 # 해당 번호의 명령 재실행 !문자열 # 히스토리에서 해당 문자열로 시작하는 마지막 명령 재실행 !!으로 이전 명령인 ls 실행 !4로 history 4번인 ls 실행 !l로 l로 시작하는 명령 중 가장 최근 명령인 ls 실행
alias alias 별명='사용할 명령' alias # 현재 설정된 별칭 목록 출력 alias 이름='명령' # 명령을 수정해서 사용하는 경우 alias 이름='명령;명령2;..' # 여러 명령을 하나의 이름으로 사용하는 경우 주의할 점은 =앞뒤로 공백이 있으면 안 되고, 명령에 공백이 있을 때는 작은따옴표로 묶어주어야 한다.
표준 입출력 장치 표준 입력 장치: 셸이 작업을 수행하는 데 필요한 정보를 받아들이는 장치 표준 출력 장치: 실행 결과(오류 메세지 제외 정상출력만)를 내보내는 장치 표준 오류 장치: 표준 출력과 별도로 오류 메세지를 내보내는 장치 파일 디스크립터 파일 디스크립터 대신 사용하는 이름 정의 0 stdin 명령의 표준 입력 1 stdout 명령의 표준 출력 2 stderr 명령의 표준 오류 파일 디스크립터 리눅스는 장치도 파일로 관리하며 파일마다 일련번호를 붙여서 관리하고 이 번호가 파일 디스크립터이다. 출력 리다이렉션 >, >> 파일 덮어쓰기 > 명령 1> 파일명 명령 > 파일명 여기서 1은 파일 디스크립터 1번을 의미한다. 즉, 지정한 파일을 1번 파일로 간주하겠다는 것이다. 1번이 표준 출력(콘솔)이므..