docker start -a <컨테이너 아이디> (맨 앞 6글자만 넣어도 실행이 된다.) -a 는 attach 의 줄임말로 -a 옵션 없이 실행하면 start 가 되지 않는다. -a 옵션의 역할은 도커 컨테이너가 실행이 될 때 컨테이너에 붙어있는 다음 출력으로 나오는 아웃풋들을 화면에 표출해주는 역할을 한다.
Docker stop VS Docker kill
stop 은 Gracefully 하게 중지를 시킨다
자비롭게 그동안 하던 작업들을 (메시지를 보내고 있었다면 보내고 있던 메시지) 를 완료하고 컨테이너를 중지 시킨다.
kill 은 stop 과 달리 어떠한 것도 기다리지 않고 바로 컨테이너를 중지 시킨다.
도커 컨테이너 삭제
중지된 컨테이너를 삭제하고 싶다면 docker rm <아이디 / 이름> (실행 중인 컨테이너는 먼저 중지한 후에 삭제 가능)
모든 컨테이너를 삭제하고 싶다면 docker rmdocker ps -a -q
이미지를 삭제하고 싶다면 docker rmi <이미지 id>
한 번에 사용하지 않는 컨테이너, 이미지, 네트워크 모두 삭제하고 싶다면 docker system prune (도커를 쓰지 않을 때 모두 정리하고 싶을 때 사용하면 좋고, 실행중인 컨테이너에는 영향을 주지 않는다.)
실행중인 컨테이너에 명령 전달
Redis 를 이용한 컨테이너 이해
docker run redis
새 터미널을 열고 redis-cli 를 입력 -> 오류가 발생
컨테이너 안에서 redis server 에 접근하는 것이 아닌 컨테이너 바깥에서 실행을 하기 때문에 서버에 접근을 할 수가 없어서 redis-cli 작동 시 오류가 발생한다. 즉, redis-cli 도 컨테이너 안에서 실행해야 한다.
해결법
이전과 똑같이 터미널을 켜고 docker run redis
이미 실행 중인 컨테이너에 명령어를 전달할 때 exec 를 사용한다. 그러니 redis 서버가 실행 중인 컨테이너에 exec 를 사용하여 redis-cli 도 실행시킨다. ex) docker exec -it <컨테이너 아이디> redis-cli -it?? -it 가 없다면 redis-cli 를 켜기만 하고 bash 쉘에서 나와버린다, -it 를 붙여줘야 명령어를 실행한 후에 계속 명령어를 적을 수 있다.
컨테이너 밖에서는 접근을 할 수 없다. 서버에 접근을 하기 위해서는 컨테이너 안에 들어와야 하고, 이미 실행 중인 컨테이너 안으로 들어오기 위해서는 docker exec 로 실행중인 컨테이너에 명령어를 전달해야 한다!
실행 중인 컨테이너에 명령어를 전달할 때는 docker exec -it 컨테이너 아이디 명령어
위와 같은 식으로 명령어 하나 입력해야 할 때 마다 모든 것을 계속 입력해줬어야 했다.
하지만 이러한 문제점을 해결하기 위해 컨테이너 안에 쉘이나 터미널 환경으로 접속을 할 수 있다. 마지막 명령어를 sh 로 주면된다.