docker run [Image_name] # 이미지 pull 후 컨테이너 생성 but 사용자 호스트와는 격리되어 있는 상태
docker -it run [Image_name] # 사용자 호스트에게 대화형 shell로 노출되는 형태로 컨테이너 생성
docker ps -a # 모든 docker process를 보여줌
docker run [Image_name]
docker -it run [Image_name]
FROM node # baseImage
WORKDIR /app # 도커 내 작업폴더를 지정
COPY . ./ # 첫번째 경로: 이미지로 복사되어야 하는 파일들경로 두번째 경로: 파일들이 저장 될 도커 내 경로
RUN npm install # 이미지 실행 시 실행할 명령어 (설정한 작업폴더에서 실행됨)
EXPOSE 80 # 호스트에 노출시킬 포트번호(documentation용이고 실제로는 run할때 포트인자를 80으로 주어야 함)
CMD ["node", "server.js"] # 컨테이너 실행 시 실행할 명령어
docker build .
를 실행.docker run -p 3000:80 [Container_name]
으로 컨테이너 생성실행.docker rm [container_names]
docker rmi [image_ID]
rmi
인자로 이미지 삭제 가능docker image prune
: 사용되지 않는 모든 이미지들을 제거FROM node
WORKDIR /app
COPY . ./
RUN npm install
EXPOSE 80
CMD ["node", "server.js"]
이미지에는 레이어가 존재한다. dockerfile에서 코드라인이 진행될수록 후속 레이어로 내려간다.
server.js의 코드일부를 변경하고 이를 이미지에 적용하기 위해서는 도커 이미지를 새로 빌드해야 한다.
새로 빌드 시 변경된 코드를 복사하는 부분 이전 레이어들은 이전 캐시를 이용하지만 이 후 레이어들은 새로 진행하므로 불필요한 반복이 존재한다.
코드 순서를 아래와 같이 바꿔 불필요한 반복을 없앨 수 있다.
FROM node:12
WORKDIR /app
COPY package.json /app # npm install을 수행하기 위한 선복사(반복시 캐시사용)
RUN npm install # 수정한 파일을 복사하는 작업 이전 레이어로 이동시킴(반복시 캐시사용)
COPY . /app # 수정한 파일 복사(반복 시 새로 진행)
EXPOSE 80 # (반복 시 새로 진행)
CMD ["node", "server.js"] # (반복 시 새로 진행)
dockerfile 수정 후 rebuilding 결과
npm install
이 이제 캐시를 사용하는 것을 볼 수 있다.
docker run -it [container_name]
으로 생성 및 실행docker start -a -i [container_name]
으로 실행docker run -it [image_name]
: 컨테이너 생성 및 실행(interactive shell)docker run -d [image_name]
인자를 통해 detached 모드로 생성 가능.docker start [container_name]
: 이미 존재하는 컨테이너 실행(백그라운드로)docker start -a [container_name]
: attach모드로 시작가능.docker stop [container_name]
: 컨테이너 중지docker attach [container_name]
: 실행중인 컨테이너에 연결docker logs [container_name]
: 컨테이너 실행 시 로그들을 출력docker images
: 이미지들 리스트를 볼 수 있다.docker image prune
: 사용되지 않는 모든 이미지들을 제거docker rm [container_name]
: 컨테이너 삭제docker rmi [Image_ID]
: 이미지 삭제docker run --rm [image_name]
: 컨테이너 생성하되 중지 시 삭제하도록 설정docker image inspect [image_ID]
: 이미지 내부구조를 확인가능docker cp [path of file to copy] [container_name]:[path in container]
: 실행중인 컨테이너 내부로 파일복사docker run --name [my own name] [image_name]
: 고유 이름으로 컨테이너 생성 및 실행docker run --name [my own name] [container_name]
: 고유 이름으로 컨테이너 생성 및 실행FROM imagename:tag
형식으로 태그를 지정할 수 있다.docker build -t [own_image_name]:[own_tag]
를 통해 고유 이미지 이름과 고유 태그명을 붙일 수 있다.docker tag [old_name]:[tag] [new_name]:[new_tag]
new name과 new tag는 dockerhub에 생성한 레포지토리에서 확인
docker login
으로 docker 로그인
작업 터미널에 docker push [docker_userID]/[image_name]:[tag]
으로 dockerhub로 이미지 푸시 가능
push한 이미지를 가져다 쓰고싶다면 docker pull [docker_userID]/[image_name]:[tag]
명령어로 pull 가능