<강의 정리>따라하며 배우는 도커와 CI 환경(John Ahn) 2 - 도커 명령어

1. 기본적인 도커 클라이언트 명령어

  • 이미지 생성 
    • docker create <이미지 이름>
    • docker build -> Dockerfile을 이용하여 이미지 생성
    • docker build -t <이미지 이름 지정>

 

  • 이미지 실행
    • docker run <이미지 이름> <명령어>
    • docker run hello-docker ls
    • docker run -p <포트지정>
    • docker run -f <dockerfile 지정>
    • docker run은 아래와 같음 
    • docker create <이미지 이름> + docker start <컨테이너 아이디 또는 이름>

 

  • 컨테이너에 명령어 전달 -> 컨테이너란 이미지를 실행한 상태를 일컬음
    • docker exec <이미지 아이디> <명령어>
    • 레디스를 이용한 예시
      • docker run redis -> 레디스 서버 실행
      • docker exec -it <컨테이너 아이디> redis-cli -> 레디스 클라이언트 실행
      • -it 는 interactive와 terminal 옵션 -> 계속해서 명령어 적용 유지시켜줌
      • docker exec -it <컨테이너 아이디> sh 해서 터미널 환경에 들어가서 명령어 사용하면 간단
      • 나올 때는 ctrl + D

 

  •  이미지 중지
    • docker stop <이미지 이름> -> 실행중이던 것 완료하고 중지
    • docker kill <이미지 이름> -> 바로 중지

 

  • 컨테이너 확인
    • docker ps -> 실행 중인 컨테이너
    • docker ps -a

 

  • (중지된) 컨테이너 삭제
    • docker rm <이미지 이름> -> 중지된 컨테이너 삭제
    • docker rm 'docker ps -a -q' -> 모든 중지된 컨테이너 삭제 
    • docker rmi <이미지 아이디>
    • docker system prune -> 중지된 컨테이너, 이미지, 네트워크 모두 삭제

 

  •  도커 컴포즈 명령어 - docker compose yml 설정 파일 필요?
    • docker-compose up
    • docker-compose down

 

2. Dockerfile 생성하기

  • dockerfile 설정파일을 통해 도커 서버가 이미지를 생성함
  • 도커 이미지가 필요한 것; 이미지는 여러 레이어로 구성
    • 베이스 이미지 -> 이미지의 기반(OS)
    • 파일 스냅샷 -> 필요한 파일을 다운로드할 명령어
    • 시작 시 실행될 명령어

 

  • Dockerfile 예시

# 베이스 이미지
FROM <이미지 이름>:<태그> -> 태그 안 붙이면 자동으로 최신 버전
예시 FROM node:10

# 파일 다운로드
RUN <명령어>
예시 RUN npm install

# 컨테이너 시작 시 실행될 명령어(1회 한정)
CMD ["node", "server.js"]

 

  • Dockerfile로 이미지 생성하기
    • docker build ./ 또는 docker build .
    • docker build -t <자신의 도커 아이디> <저장소;프로젝트 이름> : <버전> ./
    • docker build -t example1234/hello:latest ./
    • -> docker run -it example1234/hello 로 실행 가능

 

  • 파일 못 찾는 현상 -> 파일 스냅샷 안에 넣어줘야 참고하는 파일이 컨테이너 안에 생성됨
    • FROM 다음에 COPY ./ ./ 로 복사 

 

  • 이미지 실행 시 포트 매핑
    • docker run -p <브라우저에서 사용할 포트>:<컨테이너 포트> <이미지 이름>

 

  • working directory 명시해주기
    • FROM 다음에 WORKDIR /usr/src/app 
      -> 이미지 안에서 어플리케이션 소스를 갖고 있을 디렉터리를 생성
    • root에 접근하려면 쉘에 들어가서 cd로 이동하면 됨

 

  • 어플리케이션 소스 변경 시 효율적으로 재빌드하기
    • COPY package.json ./ 
    • RUN npm install
    • COPY ./ ./
    • -> 디팬던시가 변경되지 않는 한 디팬던시를 항상 받지 않고 캐시된 것을 이용하기 때문에 소스 변경 반영이 효율적이게 된다.

 

 

3. Docker Volumn 

COPY 대신 Docker Volumn을 이용해 로컬 파일을 참조

docker run -p ... -v 호스트경로:참조할 도커 디렉터리 지정
예시) docker run -v /usr/src/app/node_modules -v $(pwd):/usr/src/app

참조하지 않을 디렉터리는 호스트 경로($pwd)없이 경로 지정하면 참조 안 하고 컨테이너 내에서 찾아서 사용함
$(pwd)는 현재 디렉터리; print working directory

-> 빌드 없이 stop과 run으로 소스코드 반영이 가능하다.


댓글을 작성해보세요.

  • highlrang
    highlrang

    args는 dockerfile 내 변수
    env는 환경변수

  • highlrang
    highlrang

    docker image
    docker container
    docker network
    docker prune

채널톡 아이콘