Always Be Wise

나만의 무기를 갖기 : 도커(Docker) 개념 정리(2) 본문

카이스트 정글 - 프로젝트/나만의 무기를 갖기

나만의 무기를 갖기 : 도커(Docker) 개념 정리(2)

bewisesh91 2022. 2. 24. 03:56
728x90

도커 컨테이너의 생명주기

컨테이너 생성

docker create <이미지 이름>

컨테이너 시작

docker start -a <시작할 컨테이너 아이디/이미지 이름>

컨테이너 실행(컨테이너 생성 + 컨테이너 시작)

도커 컨테이너를 실행하기 위해서는 아래와 같은 구조의 명령어를 도커 클라이언트에 입력하면된다.

docker run <이미지 이름>

컨테이너 중지

stop의 경우, 그동안 하던 작업들을 완료하고 컨테이너를 중지시키는 반면, kill은 즉시 중지시킨다.

docker stop <중지할 컨테이너 아이디/이미지 이름>
docker kill <중지할 컨테이너 아이디/이미지 이름>

컨테이너 삭제

실행 중인 컨테이너는 먼저 중지한 후에 삭제가 가능하다.

# 중지된 컨테이너를 삭제하고 싶다면?
docker rm <삭제할 컨테이너 아이디/이미지 이름>

# 모든 컨테이너를 삭제하고 싶다면?
docker rm `docker ps -a-q`

# 특정 이미지를 삭제하고 싶다면?
docker rmi <이미지 아이디>

# 한번에 사용하지 않는 컨테이너, 이미지, 네트워크 모두 삭제하고 싶다면?
docker system prune

컨테이너 나열

docker ps
docker ps --format 'table{{.Names}}\\ttable{{.Image}}'
docker ps -a

기타 : 실행 중인 컨테이너에 명령어 전달하기

docker exec <컨테이너 아이디> <명령어>

# **이미지 내부 파일 시스템 확인**
docker exec alpine ls

기타 : 컨테이너를 실행하여 명령어 전달하기

docker run <이미지 이름> 

# **이미지 내부 파일 시스템 확인**
docker run alpine ls

명령어를 이용한 컨테이너 이해

예) 도커를 이용한 레디스 실행

레디스 서버 실행

docker run redis

레디스 클라이언트 실행

redis-cli

하지만, redis-cli 입력 시 오류가 발생한다. 이유는 레디스 클라이언트가 레디스 서버가 있는 컨테이너 밖에서

명령어를 실행하여 서버에 접근할 수 없기 때문이다. 아래와 같이 레디스 클라이언트를 컨테이너 안에서 실행

시켜야 한다. -it 명령어는 -i : interactive, -t : terminal을 의미하며, 명령어를 실행 후 계속해서 명령어를

입력하기 위함이다.

docker exec -it <컨테이너 아이디> redis cli

그런데 이런 식으로 명령어 하나 입력할 때마다 모든 것을 계속 입력하는 것은 불편하다. 따라서 아래와 같이

컨테이너 안에 쉘이나 터미널 환경으로 접속할 수 있다. exec 대신 run을 사용할 수도 있으며, 해당 쉘을

종료하기 위해서는 Ctrl + D를 입력하면 된다.

docker exec -it <컨테이너 아이디> sh
docker create <이미지 이름>

컨테이너 시작

docker start -a <시작할 컨테이너 아이디/이미지 이름>

컨테이너 실행(컨테이너 생성 + 컨테이너 시작)

도커 컨테이너를 실행하기 위해서는 아래와 같은 구조의 명령어를 도커 클라이언트에 입력하면된다.

docker run <이미지 이름>

컨테이너 중지

stop의 경우, 그동안 하던 작업들을 완료하고 컨테이너를 중지시키는 반면, kill은 즉시 중지시킨다.

docker stop <중지할 컨테이너 아이디/이미지 이름>
docker kill <중지할 컨테이너 아이디/이미지 이름>

컨테이너 삭제

실행 중인 컨테이너는 먼저 중지한 후에 삭제가 가능하다.

# 중지된 컨테이너를 삭제하고 싶다면?
docker rm <삭제할 컨테이너 아이디/이미지 이름>

# 모든 컨테이너를 삭제하고 싶다면?
docker rm `docker ps -a-q`

# 특정 이미지를 삭제하고 싶다면?
docker rmi <이미지 아이디>

# 한번에 사용하지 않는 컨테이너, 이미지, 네트워크 모두 삭제하고 싶다면?
docker system prune

컨테이너 나열

docker ps
docker ps --format 'table{{.Names}}\\ttable{{.Image}}'
docker ps -a

기타 : 실행 중인 컨테이너에 명령어 전달하기

docker exec <컨테이너 아이디> <명령어>

# **이미지 내부 파일 시스템 확인**
docker exec alpine ls

기타 : 컨테이너를 실행하여 명령어 전달하기

docker run <이미지 이름> 

# **이미지 내부 파일 시스템 확인**
docker run alpine ls

명령어를 이용한 컨테이너 이해

예) 도커를 이용한 레디스 실행

레디스 서버 실행

docker run redis

레디스 클라이언트 실행

redis-cli

하지만, redis-cli 입력 시 오류가 발생한다. 이유는 레디스 클라이언트가 레디스 서버가 있는 컨테이너 밖에서

명령어를 실행하여 서버에 접근할 수 없기 때문이다. 아래와 같이 레디스 클라이언트를 컨테이너 안에서 실행

시켜야 한다. -it 명령어는 -i : interactive, -t : terminal을 의미하며, 명령어를 실행 후 계속해서 명령어를

입력하기 위함이다.

docker exec -it <컨테이너 아이디> redis cli

그런데 이런 식으로 명령어 하나 입력할 때마다 모든 것을 계속 입력하는 것은 불편하다. 따라서 아래와 같이

컨테이너 안에 쉘이나 터미널 환경으로 접속할 수 있다. exec 대신 run을 사용할 수도 있으며, 해당 쉘을

종료하기 위해서는 Ctrl + D를 입력하면 된다.

docker exec -it <컨테이너 아이디> sh
Comments