Photo by Rubaitul Azad on Unsplash
## 헬프 명령어를 통해서 명령어 리스트를 보고
## 도움을 받을 수 있음
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 커맨드를 실행할 수도 있다.
docker login을 통해 로그인하고
도커아이디/image이름:image태그에 맞춰 이미지를 빌드하거나 이름을 변경하여 docker push 명령어를 통해 docker hub에 이미지를 공유할 수 있다.
docker pull 명령어를 통해 hub에 올라간 이미지를 가져올 수 있다.
docker pull을 통해 받지 않더라고 docker run 도커아이디/image이름:image태그를 한다면 컨테이너 히스토리에 자동으로 접근한 후 (도커헙)
이미지를 확인한 후 알아서 풀해준다. → 로컬에 이미 있다면 최신버전인지 아닌지 상관없이 풀링하지 않고 로컬에 잇는 이미지를 사용한다는 단점이 있다.(버전 태그를 사용하지 않을시에)