docker 기본 사용법

식빵·2022년 3월 28일
0

docker reference

목록 보기
2/12
post-thumbnail

나이가 들어서 그런가... docker 를 조금만 안 쓰면 금새 사용법을 까먹는다.
그래서 간단한 사용법을 아래처럼 정리해둔다.


🍀 사용법 정리


📌 도커 허브 로그인

docker login

# 로그아웃은 반대로 docker logout
  • 종종 어떤 이미지를 pull 할 때 로그인 상태를 요구함
  • 안전빵으로 로그인 추천
  • 계정이 없다면 https://hub.docker.com/ 회원가입



📌 이미지 검색

docker search image_name # 이미지명을 다 적지 않아도 검색됨



📌 이미지 다운로드

docker pull image_name[:tag]
  • 태그 안 붙이면 latest 태그를 다운 받는다.
  • 태그를 붙여서 정확한 버전 선택이 가능하다.



📌 이미지 목록조회

docker images # 방법1
docker image ls # 방법2

## 참고 : 이미지 아이디만 뽑아내기
docker images -q 
docker image ls -q 



📌 이미지 삭제

docker rmi image_name # image_id 도 가능



📌 이미지로 컨테이너 생성

docker create image_name
docker create --name custom_name image_name
  • 이 명령어는 컨테이너를 실제 실행하는 게 아니다. 그저 만들기(CREATE)할 뿐이다.
  • --name 옵션을 통해서 컨테이너 이름을 지정할 수 있고, 만약 안 하면 자동 생성.
  • docker create 옵션은 여기서 확인하자. 필요할 때 참조하자.
  • 주로 docker run 명령어를 쓰다보니 잘 사용하지 않는다.



📌 컨테이너 (재)실행 및 정지

docker start container_name  # (재)실행
docker stop  container_name  # 정지
  • start 는 아래 2가지 기능 제공
    • create로 생성된 컨테이너를 실행한다.
    • stop을 통해서 Exit된 컨테이너를 재실행한다.



📌 컨테이너 목록 조회

docker ps -a 	# `-a` 옵션을 안 주면 실행 상태가 아닌 컨테이너는 조회가 안된다.
docker ps -a -q # 컨테이너 아이디만 출력

출력 정보는 아래와 같다.

구분의미
CONTAINER ID컨테이너 아이디
IMAGE컨테이너를 생성할 때 쓴 이미지의 이름
COMMAND컨테이너 실행 시 초기에 실행되는 명령어
CREATED컨테이너 생성되고 나서 경과된 시간
STATUS컨테이너 상태
PORTS포트 포워딩을 했을 때의 포트 정보
NAMES컨테이너 이름

참고로 COMMAND 는 여러 방법으로 지정할 수도 있다.



📌 컨테이너 삭제

docker rm container_name 
  • 실행 중인 컨테이너는 삭제가 안된다. stop 을 먼저해야 한다.



📌 만능 명령어 run

docker run image_name

# 사용 예시
docker run \
--name myNewContainer \  # 컨테이너 이름
-d 					  \  # 백그라운드에서 실행
-it 				  \  # -i: "컨테이너의 STDIN OPEN" / -t :"tty 생성"
-p 8080:80 			  \  # 포트 포워딩 
-v "호스트 리눅스 경로":"container 내부 경로" # 컨테이너 내부 경로와 호스트 경로 동기화

run 명령어는 이미지가 없으면 먼저 pull을 실행하고
그 이후에 컨테이너를 생성(create)하고 이어서 실행(start)한다.

쉽게 표현하면 pull + create + start 을 한방에 해주는 것이다.


궁금증: -it는 언제 써야될까?

사실 이걸 써야할지 말아야할지는 docker inspect image_name 를 통해서 알 수 있다.
docker inspect 를 하면 json 형태로 정보가 표출된다.
여기서 Config 안쪽의 Cmd 가 있다.
이것은 컨테이너 실행시 초기에 실행되는 명령어다.
여기서 중요한 건 명령어가 실행되어서 작업을 끝내거나,
또는 명령어 실행 자체를 실패했을 때 컨테이너는 종료된다.

ubuntu 이미지의 경우는 Cmd/bin/bash 로 적혀 있다.
bash는 쉘 프로그램이고, 쉘을 실행하기 위해서는 표준입력(STDIN)과
표준 입력에 키보드 타이핑을 가능하게 하는 터미널(tty)가 필요하다.
그러니 ubuntu run 명령어는 -it 옵션이 써야한다.
만약 안 쓰면 컨테이너 실행과 동시에 종료된다.

반대로 httpd 이미지의 경우에는 Cmd가 웹 서버를 실행시키는 명령어가 적혀있다.
그리고 서버는 기본적으로 24시간 항상 돌고 있기 때문에, -it 같은 옵션 없이도
컨테이너 실행시 ubuntu 처럼 바로 종료되지 않고, 실행 상태를 유지한다.



📌 detach 컨테이너에 접근

docker exec -it running_container_name /bin/bash # 이렇게 하면 컨테이너 내에서 bash 쉘 실행
docker attach running_container_name 
  • exec : container 내에 새로운 명령어를 실행한다.
  • attach : container 를 run 했을 때의 상태를 그대로 포어그라운드로 가져온다.

조금 다르게 동작하는 것이니 잘 구분해서 사용하자.



📌 로그 보기

docker logs -f container_name # 생성되는 로그를 계속 출력해준다. ctrl + c 로 빠져나온다.
docker logs -f --tail 0 container_name # 이전 로그 싹다 무시하고 새로운 로그부터 출력.



📌 볼륨 사용하기

# 방법 1 , 단점은 docker volume ls 에 표시되지 않음.
docker run -d -it -v /host/path:/container/path ubuntu:20.04

## 방법 2 , docker volume ls 에 표시됨.
docker create volume volume_name
docker run -d -it -v volume_name:/container/path ubuntu:20.04




🍀 보충

🙄 도커 태그 검색

도커 태그를 통한 검색 명령어는 존재하지 않는다.
불편하더라도 직접 도커 허브 사이트에 접속해서 해당 이미지의 태그를 직접 찾아봐야 한다.


👍 컨테이너/이미지 모두 삭제하기

docker stop $(docker ps -a -q) # 실행 중인 모든 컨테이너 정지
docker rm -v $(docker ps -a -q)   # 컨테이너 다 지우기
docker rmi -f $(docker images -q)  # 이미지 다 지우기
  • docker rm -v 옵션은 관련된 volume 도 모두 삭제하기 위함

👍 특정 컨테이너/이미지 한번에 삭제하기

docker stop $(docker ps --filter name=^/<컨테이너 명칭 작성>$ -q -a) 2>/dev/null # stop container
docker rm -v $(docker ps --filter name=^/<컨테이너 명칭 작성>$ -q -a) 2>/dev/null  # remove container
docker rmi -f $(docker images <이미지 명칭 작성> -q) 2>/dev/null  # remove image

안 쓰는 volume 들 지우기

docker volume prune

WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
profile
백엔드를 계속 배우고 있는 개발자입니다 😊

0개의 댓글