본문 바로가기

Docker

Docker - Docker 기본적인 명령어

1.ls

ex) docker run alpine ls

설명 

1. Alpine 이미지를 이용해서 컨테이너를 생성.

2. 생성할 때 Alpine 이미지 안에 들어있던 파일 스냅샷들 (bin, dev, etc 등등..)이 컨테이너 안에 있는 하드 디스크로 다운로드됨 

3. 이미지 이름 뒤에 다른 명령어를 더 붙여서 원래 이미지 안에 들어있는 
    기본 커맨드는 무시가 되고  ls 명령어가 실행됨 

 

하지만 어떻게 Alpine 이미지를 이용해 ls 명령어를 실행 가능?
1. Alpine 이미지 파일 스냅샷 안에 이미 ls를 사용 가능하게 하는 파일이 있음.

 

hello-world 이미지로는 ls 명령어 사용 불가능
1. docker run hello-world ls 하면  아래와 같은 오류가 뜸. 
    설명을 보면 excutable file not found. (hello-world에는 ls명령어가 없다!. ) 

 

2.ps

컨테이너들 나열하기

실습
1. 2개의 Terminal을 작동시킵니다.
2. 첫 번째 Terminal에서 container 하나를 실행 (하지만 이때 컨테이너를 바로 켰다가 바로 끄면  
    3번을 할 때 이미 프로세스가 꺼져있기 때문에 리스트에서 볼 수 없다).
3. 그리고 두 번째 Terminal에서  docker ps 로 확인.
4. 그러면 꺼져있는 container도 확인하고 싶다면?  

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

 

3.create,start 

도커 컨테이너의 생명주기

4.docker stop vs docker kill

도커의 생명주기 중에서 중지 부분 docker stop과 docker kill로 중지할 수 있습니다.

Stop과 Kill 은 어떤 차이가 있을까?
공통점은 둘 다 실행중인 컨테이너를 중지시킵니다.

 1. Stop은 Gracefully 하게 중지를 시킵니다.
     자비롭게 그동안 하던 작업들을 ( 메시지를 보내고 있었다면 보내고 있던 메시지 ) 완료하고 컨테이너를 중지시킨다.  
  2.  Kill 같은 경우는 Stop과 달리 어떠한 것도 기다리지 않고  바로 컨테이너를 중지시킨다.

 

5.deleted

중지된 컨테이너를 삭제하고 싶다면?
docker rm <아이디/ 이름> 
-실행 중인 컨테이너는 먼저 중지한 후에 삭제 가능.

 

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

 

이미지를 삭제하고 싶다면 ?
docker rmi <이미지 id>

 

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

- 도커를 쓰지 않을 때 모두 정리하고 싶을 때 사용해주면 좋음
- 하지만 이것도 실행 중인 컨테이너에는 영향을 주지 않음. 

 

6.exec

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

 

이미 실행 중인 컨테이너에 명령어를 전달하고 싶다면 ?
docker exec <컨테이너 아이디> 

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

2. 첫 번째 터미널에서 컨테이너 하나를 실행합니다.
    (docker run alpine ping localhost)

3. 두 번째 터미널에서 컨테이너가 잘 작동하고 있는지 확인하고 다른 명령어를 전달합니다.
     ex) docker exec <컨테이너 아이디>  ls 

 

docker run vs docker exec

1. docker run 은 새로 컨테이너를 만들어서 실행
2. docker exec 은 이미 실행 중인 컨테이너에 명령어를 전달

7.-it

-it 가 없다면 이렇게 그냥 redis-cli를 켜기만 하고 밖으로 다시 나와버린다.

 

7.sh

지금까지 실행 중인 컨테이너에 명령어를 전달할 때는 

 

이런 식으로 명령어 하나 입력해야 할 때마다 이 모든 것을 계속 입력해 줘야하는데 이러한 문제점을 해결해주기 위해 컨테이너 안에 쉘이나 터미널 환경으로 접속을 해줄 수가 있습니다. 그 방법은  마지막 명령어를 sh로 주시면 됩니다.



 

'Docker' 카테고리의 다른 글

Docker - 직접 도커 이미지 만들기  (0) 2022.09.03
Docker - 이미지로 컨테이너 만들기  (0) 2022.09.03
Docker - Docker 의 흐름 및 Vm,Docker 비교  (0) 2022.09.03
Docker - Docker란?  (0) 2022.09.03