설치를 진행했으니 docker 을 사용해보도록 하겠습니다!
일단 설치하면 가장 먼저 hello-world 를 찍어보는 것이 국룰이겠죠?
docker 은 docker hub의 image를 이용해 작동을 하게 되는데요
docker hub에서 hello-world를 출력해주는 이미지를 찾을 수 있습니다!
위 이미지를 땡겨서 써보도록 할게요!
일단 docker 이미지를 docker hub에서 들고오기만 할거면
아래 명령어를 사용할 수 있어요!
docker pull 이미지이름
참고로 이미지를 가져올 때 latest default(최근 이미지)로 가져오도록 되어있습니다
그것이 아니라 image 파일을 docker hub에서 들고오는 동시에
실행까지 하고자 한다면 아래 명령어를 사용할 수 있어요!
docker run 이미지이름
저는 docker run hello-world 라는 명령어를 써서 hello-world 이미지를 실행했습니다!
왼쪽 사진은 처음 실행한 모습, 오른쪽 사진은 두번째 실행한 모습입니다
run 명령어를 처음 실행할 때는 image를 docker hub에서 들고오지만, 두번째부터는 local에 있는 image를 사용하기 때문에
pull 하는 과정이 없다는 점 알아두시면 될 듯 해요!
이렇게 가져온 이미지는 docker desktop의 Images -> LOCAL 에서 확인할 수도 있고,
docker images
명령어를 통해 확인할 수도 있습니다!
[docker run 이미지이름] 명령어를 실행할 때마다
docker image를 이용해 만들어진 docker container가 생성/실행되게 됩니다!
(사실 docker run은 밑의 명령어가 합쳐진 컨테이너 생성/실행 명령어입니다)
1) docker create 이미지이름 #컨테이너 생성
2) docker start 컨테이너이름/컨테이너id #컨테이너 실행
docker run을 실행 할 때 컨테이너가 생성-실행이 되는지를 보기 위해
예시를 위해 docker run hello-world 명령어를 3번 입력한 후,
컨테이너들의 상태를 확인하도록 하겠습니다!
도커 컨테이너 목록을 확인하는 명령어는 다음과 같습니다!
1) docker ps -a
2) docker container ls -a
docker container 명령어를 보는 기본 명령어는 [docker ps] , [docker container ls]이지만,
현재 실행중이지 않은 컨테이너도 보기 위해 파라미터로 -a 를 붙여줬습니다!
현재 생성된 모든 컨테이너를 봤을 때 hello-world 컨테이너가 연속으로 세개나 생긴 것을 확인할 수 있습니다
docker container를 확인할 때 명령어를 쳐서 보기 싫으신 분은
docker desktop의 Containers/Apps 에서도 로그 기록과 함께 확인할 수 있습니다
다음은 컨테이너 중지!
hello-world 이미지는 실행 후 바로 중지가 되는 이미지였기 때문에 가벼운 linux 이미지인 alpine을 이용해 예시를 들겠습니다!
먼저 alpine 이미지를 받고
-it 명령어를 붙여 alpine 이미지를 두번 백그라운드에서 실행시켰습니다!
참고로 gitbash로 위 명령어를 사용할 때 winpty를 붙이지 않으면
다음과 같이 에러가 나니 참고해주세요!
이후 다른 bash 창을 켜서 컨테이너 실행 중지 명령어를 쳤습니다!
명령어는 다음과 같습니다!
1) docker stop 컨테이너이름(혹은 컨테이너id) #컨테이너가 실행하고 있는 동작을 마친 후 종료
2) docker kill 컨테이너이름(혹은 컨테이너id) #컨테이너 실행 동작과 관계 없이 작업을 kill
두 명령어 모두 컨테이너가 중지되도록 했지만,
kill 명령어가 stop 보다 더 빠르게 종료 되는 것을 확인할 수 있었습니다(프로세스가 하는 동작과 관계 없이 그냥 주김)
마지막으로 이미지와 컨테이너를 삭제!
일단 docker image 삭제 명령어는 다음과 같습니다!
docker rmi image이름(혹은 image id)
참고로 image Id 는 [docker images]로 확인할 수 있습니다
그런데 image로 실행한 container가 있는 상태에서 image를 삭제하면 다음과 같은 에러가 발생하게 됩니다
이럴 땐 참조를 하고 있는 컨테이너를 모두 삭제하고 이미지를 삭제하거나,
이미지 삭제 명령어에 -f를 붙여주면 됩니다(강제 삭제)
docker rmi -f 이미지이름(혹은 이미지id)
그럼 image는 강제로 삭제가 되게 됩니다
다음은 container 삭제!
명령어는 다음과 같습니다
docker rm 컨테이너id(혹은 이름)
하지만 하나하나 지우기 너무 귀찮은데요
이렇게 개많은(!) 컨테이너를 한번에 지우고 싶을 때 명령어는 다음과 같습니다
참고로 status가 exited 인 컨테이너만 삭제하는 명령어입니다!(출처)
docker rm $(docker ps --filter 'status=exited' -a -q)
명령어를 사용한 후 깔꼬롬 해진 것을 확인할 수 있습니다!
마지막은 걍 싹다 삭제! 컨테이너, 이미지, 네트워크를 모두 삭제하고 싶다면
다음 명령어를 사용하면 됩니다
docker system prune
하지만 이 명령어도 실행중인 컨테이너에는 영향을 주지 않으니 참고해주시면 됩니다!
하하 이번 글은 여기까지!
다음에는 docker 컨테이너 이미지를 직접 만들어보는 작업을 해볼게요!
(이번 글에서는 hello-world라는 만들어진 이미지만을 사용했습니다)
짜요~