ex) docker run alpine ls
1. Alpine 이미지를 이용해서 컨테이너를 생성한다.
2. 생성할 때는 Alpine 이미지 안에 들어있던 파일 스냅샷들 (bin, dev, etc 등등..)이 컨테이너 안에 있는 하드 디스크로 다운로드 된다.
3. 이미지 이름 뒤에 다른 명령어를 더 붙여서 원래 이미지 안에 들어있는 기본 커맨드는 무시가 되고 ls 명령어가 실행된다.
Alpine 이미지 파일 스냅샷 안에 이미 ls를 사용 가능하게 하는 파일이 있다.
executable file not found -> 실행할 수 있는 파일을 찾지 못함
hello-world는 몇가지 문장만 표출해주기 위한 이미지여서 ls를 실행할 수 있는 파일들이 존재하지 않아서 에러가 발생한다.
1. 2개의 Terminal을 작동시킨다.
2. 첫번재 Terminal에서 container 하나를 실행한다.
(이때 컨테이너를 바로 켰다가 바로 끄면 3번을 할 때 이미 프로세스가 꺼져있기 때문에 리스트에서 볼 수 없다.)
3. 두번재 Terminal에서 docker ps로 확인한다.
4. 꺼져있는 container도 확인하고 싶다면
명령어 : docker ps --format 'table{{.names}}]\table{{.image}}
명령어 : docker ps -a
도커 생성부터 삭제까지가 도커 컨테이너의 생명주기이다.
docker run<이미지 이름>을 docker create와 docker run으로 쪼갬
도커 컨테이너 생성
명령어 : docker create<이미지 이름>
위 명령어를 쳐서 나오는 결과가 도커 컨테이너 아이디이다.
도커 컨테이너 아이디 이용해서 시작하기
명령어 : docker start<컨테이너 아이디/이름>
컨테이너 아이디 앞부분 조금만 넣어도 Id를 찾아 실행이 된다.
-a(attach) : 컨테이너가 실행된 후 나오는 output들을 화면에 표출해준다
실행중인 컨테이너를 중지시킨다.
stop
gracefully하게 중지 시킨다.kill
어떠한 것도 기다리지 않고 바로 컨테이너를 중지 시킨다.중지된 컨테이너 삭제하기
명령어 : docker rm<아이디/이름>
실행중인 컨테이너는 먼저 중지한 후에 삭제 가능모든 컨테이너 삭제하기
명령어 : docker rm `docker ps -a -q`
이미지 삭제하기
명령어 : docker rmi <이미지 id>
한번에 컨테이너, 이미지, 네트워크 모두 삭제하기
명령어 : docker system prune
- 도커를 쓰지 않거나 모두 정리하고 싶을때 사용하면 좋다.이미 실행중인 컨테이너에 명령어 전달하기
명령어 : docker exec <컨테이너 ID>
1. 터미널 2개를 실행한다.docker run vs docker exec
레디스 이용 방법과 작동 흐름
먼저 레디스 서버를 실행 한 후, 레디스 클라이언트를 통해서 서버에 명령어를 전달해 줘야한다.
1. 첫번째 터미널을 실행 후, 레디스 서버를 작동 시킨다. docker run redis
2. 두번째 터미널을 켜서 레디스 클라이언트를 작동 시킨다. redis-cli
3. 에러 발생
에러 발생하는 이유(레디스 클라이언트와 서버 상황)
레디스 클라이언트가 레디스 서버가 있는 컨테이너 밖에서 실행을 하려고 해서 레디스 서버에 접근할 수가 없기 때문에 레디스 클라이언트를 작동하려 할 때 에러가 발생한다.
컨테이너 안에서 실행하는 방법
명령어 하나 입력할 때마다 많은 것들을 쳐야하는데 이것을 해결하기 위한 방법이 sh이다.
컨테이너를 쉘 환경으로 접근하기
1. 첫번째 터미널을 실행 한 후, alpine 이미지를 이용해서 컨테이너를 실행한다.