Docker 공부노트 - 이미지와 컨테이너를 다루는 법

코변·2022년 8월 29일
0

도커 공부노트

목록 보기
2/5
post-thumbnail

Photo by Rubaitul Azad on Unsplash

attach와 detach

## 헬프 명령어를 통해서 명령어 리스트를 보고
## 도움을 받을 수 있음
docker --help

## 사용중인 컨테이너 리스트를 불러옴
## -a 를 통해 쓰지않는 컨테이너도 리스팅할 수 있다.
docker ps

## 종료된 컨테이너를 다시 불러올 수 있다.
## 백그라운도 실행된다.
## detached 모드가 디폴트다
## docker run은 attached 모드가 디폴트이므로 터미널이 멈춘다.
## run에 -d 태그를 추가하면 detached모드 실행이 가능하다
docker start

## detached 모드로 실행한 도커의 로그를 보고싶다면 
## 아래의 명령어를 통해 로그를 볼 수 있다.
docker logs container-name
## -f (follow) 를 통해서 계속해서 로그를 받을 수 있다.

도커는 웹서버나 웹 애플리케이션에만 특화된 것이 아니다. 간단한 유틸리티 애플리캐이션을 도커화하는데에도 사용할 수 있다.

예를 들어

first_number = input()
second_number = input()

print(first_number + seconde_number)

위와 같 간단한 로직을 도커로 실행할 수도 있는데 여기서 input값을 받기 위해서는 attach 모드로 접근할 필요가 있다.

만약 docker run으로 컨테이너를 띄운다면

docker -it run image_id

-i -> interactive 모드
-t -> terminal 생성

위와 같은 코드로 input값을 받을 수 있고 상호작용이 가능하며

docker start -a -i container_name
-a -> attach 모드
-i -> interactive 모드 

위와 같은 코드를 통해 start모드에서도 input을 받아 상호작용이 가능하다.

컨테이너, 이미지 정리하기!

컨테이너 지우는 법

docker start -a -i container_name
## 현재 실행중인 컨테이너는 지울 수 없다.
## 띄어쓰기로 구분하여 여러 컨테이너를 한번에 지울 수도 있다.
docker start -a -i container_name1 container_name2 

## 컨테이너가 중지 될 때마다 컨테이너를 제거할 수도 있다.
## --rm 태그가 그 역할을 한다.
docker run -p 3000:80 -d --rm image_id

실행중인 컨테이너로 또는 실행중인 컨테이너 밖으로 파일 또는 폴더를 복사할 수 있다

docker cp folder_name/file_name container_name:/folder_name
## 파일명을 지정할 수도 있고  
or folder_name/. 
## 폴더 내부의 모든 파일을 넣기 위해서 .을 추가할 수 도 있음

# 반대로
docker cp container_name:/folder my_folder
## 위와 같이 선언하면 컨테이너에서 내가 설정한 폴더로 옮길 수도 있다.
## 마찬가지로 :/folder/file_name 으로 파일명을 정확하게 설정해줄 수도 있다

이미지 지우는 법

docker rmi image_id
## 컨테이너에 포함되어 있는 이미지는 지울 수 없다.
## 마찬가지로 띄어쓰기로 구분하여 여러 컨테이너를 한번에 지울 수 있다.
docker image prune -a 
## 사용되지 않는 모든 이미지를 제거한다.

이미지 내부를 검사하는 방법

docker image inspect image_id
## 이미지에 대한 정보를 얻을 수 있음

이미지와 컨테이너에 이름과 태그를 설정하는 방법

docker run -p 3000:80 -d --rm --name container_name image_id
## 위와 같이 --name 태그를 통해서 컨테이너에 이름을 지정해줄 수 있다.

도커는 image의 이름과 버저닝을 위한 태그를 사용한다.

특정 버전의 image를 사용할 수도 있고 내가 특정 버전의 Image를 만들 수 있다.

docker build -t image_name:version .
## 위와 같이 이름과 버전을 명시해 놓는다면 

docker run -p 3000:80 -d --rm --name container_name image_name:version
## 와 같이 run 커맨드를 실행할 수도 있다.

도커 이미지를 공유하는 방법

  1. dockerfile을 공유한다.
    • build 를 거쳐야 한다.
  2. image를 도커 헙에 올리고 공유한다.
    • 따로 빌드할 필요가 없으며
    • 받아온 이미지를 바로 run할 수 있다.

docker login을 통해 로그인하고

도커아이디/image이름:image태그에 맞춰 이미지를 빌드하거나 이름을 변경하여 docker push 명령어를 통해 docker hub에 이미지를 공유할 수 있다.

docker pull 명령어를 통해 hub에 올라간 이미지를 가져올 수 있다.

docker pull을 통해 받지 않더라고 docker run 도커아이디/image이름:image태그를 한다면 컨테이너 히스토리에 자동으로 접근한 후 (도커헙)

이미지를 확인한 후 알아서 풀해준다. → 로컬에 이미 있다면 최신버전인지 아닌지 상관없이 풀링하지 않고 로컬에 잇는 이미지를 사용한다는 단점이 있다.(버전 태그를 사용하지 않을시에)

profile
내 것인 줄 알았으나 받은 모든 것이 선물이었다.

0개의 댓글