도커 이미지를 다운받았고나서 자세한 내용을 보기 위해서 사용하는 명령어 이다 실행중인 컨테이너에서 물론 확인을 하고 싶으면 확인이 가능하다
docker inpsect <images_name>
이렇게 httpd(apache)와 관련된 자세한 내용들을 확인할 수 있다
도커허브에서 가져온 이미지를 실행하기 위한 명령어 이다
원래 도커의 lifecycle을 보면 create -> start
이러한 방법과 run
하는 방법이 두가지가 있는데
run
명령어는 create + start
를 같이 한다고 생각하면 된다
docker run <option> --name <name> <images>
<option>
에 들어갈 수 있는 -i -t -d 가 있다
1. -i: 대화형 콘솔로 통신을 한다는 의미이다
2. -t: tty
3. -d: 서비스 데몬을 실행한다는 의미
service(httpd, nginx, mysql...등)를 실행 할때는 -d 옵션을 붙여줘야하고
sh(nginx,centos,ubuntu)를 실행 시켜준다면 -it 옵션을 붙여 run을 해줘야 한다는점 참고하면 좋을거같다
--name
은 꼭 붙여서 run
을 해주기를 권장한다 name옵션을 사용하지 않으면 랜덤으로 NAMES가 들어가지는데 복잡할 뿐더러 매번 확인해줘야하는 불상사가 생긴다
docker run -it --name h1 httpd
위 사진과 같이 run 해줘야하는 image가 service인데 -it
옵션을 사용하면 현재 서비스의 상태가 Exited 즉 정상적으로 실행되지 않고있는 것을 확인할 수 있다
docker run -d --name h2 httpd
docker ps -a
를 하고 보면 정상적으로 Up 으로 되어있는 모습을 볼 수 있다
만약 실행해야하는 images가 service인지 sh인지 모르겠다면 그냥 -itd 모든 옵션을 다주면 실행도 정상적으로 될것이다
이번엔 sh을 실행해볼 것인데 여기서 주의해야 할점도 있으니 잘 봐주세요~
docker run -it --name c1 centos:7
처음 images를 가져올때 centos:7 태그를 붙여서 가져온점 참고 해주세요
이번엔 centos:7 을 실행할 때 -it 옵션을 주어 실행을 하였습니다 run은 정상적으로 되었지만 프롬르트가 바뀐 모습을 보실 수 있습니다.
sh을 실행 시킬때 -it
옵션만 주게 된다면 run과 동시에 sh에 진입을 하게 됩니다 바로 작업을 해야한다면 이렇게 실행을 시키면 되지만 단지 그냥 실행만 시키면 된다면 -itd
옵션을 주면 실행을 정상적으로 되고 진입도 하지 않는 모습을 보실 수 있습니다
주의!!
sh에 진입하고 작업을 끝마치고 다시 나가고 싶어 exit
를 치게 된다면 컨테이너가 중지됨과 동시에 나가게 될것입니다
sh에서 나갈때는 ctrl+q+p
를 쳐서 나가면 정상적으로 sh에서 나갈 수 있으니 참고하시면됩니다!
docker run -d --name c2 centos
분명 처음 제가 가져온 images 파일은 centos:7
이었습니다 태그명을 지정해 주었죠,
하지만 실행할때 -d
옵션을 붙여 centos
를 실행하면 도커는 태그명이 지정되어있지 않아 centos
의 최신버전(latest)가 로컬 이미지 파일에 있는지 확인을 하고 없으면 다운을 받고 실행을 하게 됩니다!!! 하지만 실행도 Exited가 떠있는것을 보아하니 정상실행이 되지 않앗습니다
centos:7을 다운받앗는데 또 centos:latest가 받아진다면 헷갈릴 뿐더러 작업해야할때 필요하지 않은 것이 다운이 되었기때문에 문제가 생길수가 있다는점 이러한 불상사가 생기지 않도록 주의 하셔야 합니다
그래서 -itd
옵션을 사용하고 추후에 실행을 시켜볼 수 있는 exec, attach
가 있습니다
docker ps
현재 실행중인 컨테이너를 확인 할 수 있는 명령어
ps
를 하게 되면 현재 실행중인 컨테이너만 확인이 가능하고 실행중이지 않은 컨테이너는 확인이 불가능한 것을 보실 수 있습니다
ps -a
옵션을 붙여 실행중이지 않은 컨테이너 모두를 확인 할 수 있습니다
또 한가지 응용해서 명령어를 입력한다면
docker ps -aq
-q
옵션을 더 붙여주면 Container ID 만 표출이 되게 하실 수 있습니다
실행중인 컨테이너를 삭제 할때 요긴하게 쓰일것이니 알아두면 좋습니다
이미지를 지우는 명령어는 rmi
였습니다 실행중인 컨테이너를 지우기 위해선 rm
을 사용하시면 됩니다
docker rm -f<NAMES or CONTAINER ID>
CONTAINER ID를 쓰기엔 너무 길고 복잡하고, NAMES를 쓰면 편하지만 만약 100대의 서비스나 sh을 돌리고 있다면?? 하나하나 지우는데 시간이 더 오래걸릴것입니다
-f
옵션을 실행중인 컨테이너를 강제적으로 종료하고 삭제하는 명령어 입니다
여러 컨테이너를 삭제할 때 유용하게 사용할 수 있는 명령어가 있습니다
docker rm -f $(docker ps -aq)
docker ps -qa 에서 나오는 출력값을 인식하여 실행중인 컨테이너를 삭제 해주는 명령어 입니다
이 명령어 하나면 한번에 실행중인 컨테이너를 다 삭제가 가능하게 할 수 있습니다
컨테이너를 실행한 후에 exec,attach
명령어를 입력하면 접속을 다시 하여 작업을 할 수 있다
sh에 접속 할때에는 보통 attach
service에 접속 할때는 exec
를 사용한다
우선 docker attach <NAMES>
를 이용하여 alpine에 접속을 할 것이다
이렇게 attach
를 이용하여 접속을 하면 간단하게 접속을 할 수 있다 하지만 나가야할땐
꼭~!~~ctrl+q+p
를 이용하여 나가야 한다 exit
로 나가면 실행중인 컨테이너가 중지 될 수 있으니 주의 해야한다
물론 exec
명령어를 사용하여 접속 하는 방법도 있다 a1(alpine)에서 예를 들어 설명하겠다
docker exec -it a1 /bin/sh
attach
를 사용했을때와 동일하게 접속이 된 모습을 확인할 수 있다 한가지 차이점이 있다고 하면 접속을 나갈때 exit
를 사용해도 컨테이너가 중지가 안되고 정상적으로 나갈수 있다는 점이다!!
마지막 /bin/sh
는 cmd를 실행 시켜주는 것인데 alpine은 bash셸을 지원하지 않기 때문에 sh로 접속을 한것이고 centos나 ubuntu 같은 경우는 bash셸을 지원하기 때문에 마지막에 /bin/bash
를 적어주면 정상적으로 접속이 가능하다
이는 sh뿐만 아니라 service에서도 마찬가지이다
docker exec -it h1 /bin/bash
hash 셸에서 exec
로 접속을 하여 경로나 파일 들을 확인할 수 있고 curl을 통해서 정상 작동하는지도 확인을 할 수 있다
service에서 접속을 할때는 exec
로는 접속이 가능하지만 attach
로는 접속이 가능해도 아무 작업을 하지 못한다
그 이유는 httpd는 cmd가 httpd-foreground 로 프로세스를 점유하고 있어 접속을 하면 들어가서 아무것도 동작이나 작동을 하지 않기 때문에 접속을 해제하기 위해선 ctrl+c
로 접속을 해제해야하는데 그렇데 되면 데몬 또한 종료되는 불상사가 생기니 왠만하면 exec
로 접속하는 것을 추천한다