-------------------------------------------------- 목차 ----------------------------------------------------
- 컨테이너 명령어(run, stop, start, rm, --name)
- Attached 컨테이너 vs Detached 컨테이너
- interactive 모드
- 이미지 명령어(생성, 삭제, 구성)
- 로그
- 이미지 레이어
- RUN vs CMD vs ENTRYPOINT
[실습 1] 로컬로 실행되는 NodeJS 애플리케이션
[실습 2] Dockerfile을 사용하여 자체 이미지 빌드
[실습 3] 이미지 내의 파일 변경 후, 재빌드
[실습 4] 컨테이너 <-> 로컬 시스템 파일 복사
-----------------------------------------------------------------------------------------------------------
● Docker Images

● 컨테이너 명령어
ㄱ. 이미지를 사용하여 컨테이너 실행
> docker run -p <--> <-이미지 ID->
> docker run -p <--> -d --rm <-이미지 ID->
// --rm: 컨테이너 중지되면 자동 삭제, -d: detached 모드, 뒤에서 실행 <-> attached 모드, 앞에서(화면에서 실행)
ㄴ. 컨테이너 정지
> docker stop <-컨테이너 이름/ID->
ㄷ. 컨테이너 재시작
> docker start <-컨테이너 이름/ID->
ㄹ. 컨테이너 삭제
> docker rm <-컨테이너 이름/ID-> ...
=> 실행중 컨테이너 삭제 불가
ㅁ. 이름 지정
> docker run --name <-이름-> -p <--> <-이미지 ID->
● Attached 컨테이너 vs Detached 컨테이너
ㄱ. run
=> 기본 포어그라운드 실행
=> 로그가 터미널에 실시간으로 보여진다.
> docker run -p <--> -d <-이미지 ID-> // 백그라운드 실행
> docker attach <-컨테이너 이름/ID-> // 포어그라운드로 전환
ㄴ. start
=> 기본 백그라운드 실행
> docker start -a <-컨테이너 이름/ID-> // 포어그라운드 실행
● interactive 모드
=> 쌍방향, 대화형
> docker run -it <-이미지 ID->
> docker start -a -i <-컨테이너 이름/ID->
● 이미지 명령어
ㄱ. 생성
> docker build .
ㄴ. 삭제
> docker rmi <-이미지 ID-> ...
=> 해당 이미지 사용하는 컨테이너 없어야 삭제 가능
> docker image prune // 사용되지 않는 모든 이미지 삭제
ㄷ. 구성
> docker image inspect <-이미지 ID->
ㄹ. 이름&태그 지정
> docker build -t test:[1/latest] .
● 로그
> docker logs <-컨테이너 이름/ID->
> docker logs -f <-컨테이너 이름/ID-> // 포어그라운드로 생성된 로그 표시
● 이미지 레이어
=> 재빌드 시, 각 줄별로 실행
(+) 내용 변경 시, 이미지 재빌드 해야한다.
● RUN vs CMD vs ENTRYPOINT
ㄱ. RUN
실행 시점: 이미지 빌드
=> 이미지 빌드 과정에서 필요한 명령문을 수행
주로 이미지 안에 특정 소프트웨어를 설치할 경우 사용
ㄴ. ENTRYPOINT
실행 시점: 컨테이너 실행
=> 컨테이너를 띄울 때 최초에 실행 되어야하는 명령문일 경우 사용
ㄷ. CMD
실행 시점: 컨테이너 실행
=> 컨테이너를 띄울 때 변경할 수도 있는 명령문일 경우 사용, 하나의 Dockerfile에 하나의 CMD 명령어 사용 가능
[실습 1] 로컬로 실행되는 NodeJS 애플리케이션
1) 터미널
> npm install
> node server.js
2) localhost:80 접속
[실습 2] Dockerfile을 사용하여 자체 이미지 빌드
1) Dcokerfile 생성 및 빌드
----------------------------------------------------------------------------------------------------------------
FROM node
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app // Dockerfile이 위치한 디렉토리 내의 모든 파일과 디렉토리(.)을 /app 디렉토리로 복사, COPY [로컬] [컨테이너]
EXPOSE 80
CMD ["node", "server.js"]
----------------------------------------------------------------------------------------------------------------
> docker build .
2) Image 생성 확인

3) 컨테이너 실행
> docker run -p 3000:80 <-이미지 ID-> // 3000: 호스트 머신의 포트 번호, 80: 컨테이너 내부 포트 번호
4) 컨테이너 생성 및 실행 확인

5) localhost:3000 접속

[실습 3] 이미지 내의 파일 변경 후, 재빌드
1) 기존 컨테이너 [정지/종료/삭제]
> docker stop <-컨테이너 이름->
2) 이미지 재빌드
> docker build .
3) 컨테이너 실행
> docker run -p 3000:80 <-이미지 ID->
4) localhost:3000 접속

[실습 4] 컨테이너 <-> 로컬 시스템 파일 복사
1) 파일 생성
2) 로컬 시스템 -> 컨테이너
> docker cp -L dummy/test.txt heuristic_bhabha:/test // heuristic_bhabha: 컨테이너 이름, :/test: 경로
3) 컨테이너 -> 로컬 시스템
> docker cp heuristic_bhabha:/test -L dummy

'여러가지 > Docker & AWS' 카테고리의 다른 글
[섹션 4] 네트워킹: (교차) 컨테이너 통신 (0) | 2023.11.25 |
---|---|
[섹션 3] 데이터 관리 및 볼륨으로 작업하기 (0) | 2023.11.25 |
[유데미] Docker & Kubernetes: 실전 가이드 (0) | 2023.11.25 |
[섹션 4] Auto Scaling을 통한 확장성 및 탄력성 구현 (0) | 2023.11.24 |
[섹션 3] 관계형 데이터베이스 서비스 구성 (1) | 2023.11.24 |