컨테이너/도커

Docker 정리(2)

JUNGKEUNG 2022. 5. 15. 01:10

기본적인 도커 명령어 알아보기

도커 이미지를 실행시킬 때 docker run 이미지 이름 ls (ex: docker run hello-world ls)를 작성한다.

  • docker -> 도커 클라이언트 언급
  • run -> 컨테이너 생성 및 실행
  • 이미지 이름 -> 이 컨테이너를 위한 이미지
  • ls -> 이미지의 기본 시작 명령어 대신 실행할 명령어(ls는 파일 목록을 출력)

 

 

작동 순서 

1. 도커 클라이언트에 명령어 입력 후 도커 서버로 보낸다.

2. 도커 서버에서 컨테이너를 위한 이미지가 캐쉬에 저장되어 있는지 확인한다.

3. 없다면 도커 허브에서 다운 받아온다 있다면 그 이미 가지고 있는 이미지로 컨테이너 생성한다.

 

 

 

실행 중인 컨테이너 나열

  • CONTAINER ID : 컨테이너의 고유한 아이디 해쉬값이다. 실제로는 더욱 길지만 일부분만 표출
  • IMAGE : 컨테이너 생성 시 사용한 도커 이미지
  • COMMAND : 컨테이너 시작 시 실행될 명령어. 대부분 이미지에 내장되어 있으므로 별도 설정이 필요 없다.
  • CREATED : 컨테이너가 생성된 시간
  • STATUS : 컨테이너의 상태이다. 실행 중은 UP, 종료는 Exited, 일시정지 Pause
  • PORTS : 컨테이너가 개방한 포트와 호스트에 연결한 포트. 특별한 설정을 하지 않은 경우 출력되지 않는다.
  • NAMES : 컨테이너의 고유한 이름. 컨테이너 생성 시 --name 옵션으로 이름을 설정하지 않으면 도커 엔진이 임의로 형용사와 명사를 조합해 설정. id와 마찬가지로 중복이 안되고 docker rename 명령어로 이름을 변경이 가능하다.
    • ( docker rename origignal-name changed-name )

 

 

도커 컨테이너 실행

docker run alping ping localhost

 

 

원하는 항목만 보기

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

 

모든 컨테이너 나열

docker ps -a

 

 

도커 컨테이너의 생명주기

 

위와 같은 생성 주기를 거친다.

docker run 명령어는 docker create와 docker start 명령어로 나뉠 수 있다.

 

docker create

docker create은 image의 파일 스냅샷을 컨테이너에 할당된 하드디스크로 담아주어 컨테이너를 생성하는 역할을 한다.

 

 

docker start

하드디스크에 이미지 파일 스냅샷이 담기면, 실행해야 할 명령어를 컨테이너를 시작하고, 시작 시 실행될 명령어를 실행해준다.

이전에 사용했던 hello-world image를 가지고 실습을 해보면 다음과 같다.

create시 아래 나오는 값들은 컨테이너의 아이디이므로 해당 아이디를 활용해 start를 시켜보았지만, 제대로 실행이 안됨을 확인할 수 있다. attach라는 option을 덧붙여줘야 잘 실행한다. 그리고 굳이 컨테이너의 아이디를 전부 입력할 필요 없이, 앞의 일부만 입력해도 알아서 잘 실행된다고 한다.

잘 실행됨을 확인할 수 있다.

여기서 attach라는 option은 실행하고 나오는 output들을 화면에 print 해주는 역할을 한다고 한다.

 

 

docker stop vs docker kill

docker stop과 docker kill은 모두 container를 중단하는 맥락을 갖고 있는 명령어들이다. 우선 alpine image와 ping 명령어를 활용해서 해당 명령어들 실습을 진행해보겠다. stop의 경우에는 아래와 같이 이루어지는데, 어느 정도 시간이 지나고 난 후 멈추는 것을 확인할 수 있다. stop 같은 경우는 실행 중인 컨테이너를 정리하느라 시간이 걸리지만 

kill 같은 경우는 정리하지 않고 바로 꺼버린다.

docker stop과 docker kill 사용하고 싶을 때 docker stop 중지할 컨테이너 아이디나 닉네임을 작성하면 된다.

위와 같이 docker ps로 컨테이너 ID를 확인하여 정지하는 모습을 볼 수가 있다. kill도 같은 방법으로 중지할 수가 있다.

 

 

중지된 컨테이너 삭제

docker rm <아이디/이름>

실행 중인 컨테이너를 정지한 후에 삭제가 가능하다

 

 

모든 컨테이너 삭제

docker rm 'docker ps -a -q

 

 

이미지 삭제

docker rmi <이미지 아이디>

 

 

한 번에 사용하지 않는 컨테이너, 이미지, 네트워크 모두 삭제

docker system prune

도커를 쓰지 않을 때 모두 정리하고 싶을 때 사용해주면 좋다

 

 

이미 실행 중인 컨테이너에 명령어 전달

docker exec <컨테이너 아이디>

1. 먼저 터미널 2개를 실행한다.

2. 첫 번째 터미널에서 컨테이너 하나를 실행한다.

3. 두 번째 터미널에서 컨테이너가 잘 작동하고 있는지 확인하고 다른 명령어를 전달한다.

 

 

그럼 docker run과 docker exec의 차이는 무엇일까?

docker run은 새로 컨테이너를 만들어서 실행

docker exec은 이미 실행 중인 컨테이너를 명령어를 전달

 

 

 

참고 자료


https://www.inflearn.com/course/%EB%94%B0%EB%9D%BC%ED%95%98%EB%A9%B0-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EB%8F%84%EC%BB%A4

'컨테이너 > 도커' 카테고리의 다른 글

docker react 설치  (0) 2022.05.17
Docker 이미지 만들기  (0) 2022.05.15
Docker 정리(4)  (0) 2022.05.15
Docker 정리(3)  (0) 2022.05.15
Docker 정리(1)  (0) 2022.05.14