1. 도커 이미지 내부에 파일 시스템 구조를 보는 명령어
$ docker run [이미지 이름] ls
docker: 도커 Client 언급
run: 컨테이너 생성 및 실행
[이미지 이름]: 해당 컨테이너를 생성하기 위한 이미지
ls: 현재 디렉터리의 파일 리스트를 출력
※ 현재 ls가 있는 이 4번째 자리는 원래 이미지가 가지고 있는 시작 명령어를 무시하고 이 4번째 명령어를 실행하게 한다.
※ 위의 명령어를 입력했을 때 excutable file not found. 라는 에러가 발생할 수도 있다. 이는 이미지 파일 스냅샷에 ls를 사용가능하게 하는 파일이 없기 때문이다.
2. 현재 실행중인 컨테이너들을 나열하는 명령어
$ docker ps
docker: 도커 Client 언급
ps: process status
3. (실행 중이 아닌 것도) 모든 컨테이너들을 나열하는 명령어
$ docker ps -a
docker: 도커 Client 언급
ps: process status
-a: all
4. 도커 컨테이너의 생명 주기에 따른 명령어
1) 생성-> 시작
$ docker create [이미지 이름]
2) 시작 -> 실행
$ docker start [컨테이너 이름]
3) 생성 -> 시작 -> 실행
$ docker run [이미지 이름]
4) 실행 -> 중지
$ docker stop [컨테이너 이름]
stop은 그동안 하던 작업들(예를 들어 메시지를 보내고 있었다면 보내고 있던 메시지)를 완료하고 컨테이너를 중지시킴
$ docker kill [컨테이너 이름]
kill은 어떠한 것도 기다리지 않고 바로 중지시킴
5) 중지 -> 삭제
① 중지된 컨테이너 삭제
$ docker rm [컨테이너 이름]
② 모든 컨테이너 삭제
$ docker rm `docker ps -a -p`
docker ps -a -p 는 모든 컨테이너를 말함
③ 이미지 삭제
$ docker rmi [이미지 id]
④ 실행 중이지 않는 컨테이너, 이미지, 네트워크 모두 한번에 삭제
$ docker system prune
도커를 쓰지 않을 때 모두 정리하고자 하면 쓰는게 좋음. 단, 실행 중인 컨테이너에는 영향 없음
5. 실행 중인 컨테이너에 명령어 전달
①
$ docker exec [컨테이너 id]
② 이런 경우를 생각해 보자.
도커 컨테이너에서 redis 서버를 실행하고(docker run redis) -> 다른 터미널 환경에서 redis 클라이언트를 실행했다. (redis-cli) -> 여기서(즉, redis 클라이언트에서) set value 1 hello 라는 명령어를 주어서 redis 서버에서 전달받은 명령어를 실행할 수 있을까?
아니다. 이러면 connection refused라는 에러가 발생한다. 왜냐하면
redis 클라이언트는 도커 컨테이너 밖에 있는데 redis 서버는 도커 컨테이너 안에서 실행되고 있으므로 접근이 막힌 것이다.
그래서
-it 옵션을 통해
이렇게 해주어야 한다
$ docker exec -it [컨테이너 id] [실행하고 싶은 명령어]
-it가 있어야 앞의 도커 명령어를 실행 한 후에 계속 명령어를 적을 수 있고, -it가 없다면 그냥 도커 명령어를 실행하기만 하고 밖으로 나와버린다.
③ 비슷한 경우로 실행 중인 컨테이너에 쉘 환경으로 접속하려면?
$ docker exec -it [컨테이너 id] sh
※ 이 쉘 환경에서 나오려면 ctrl+D
'Dev > DevOps, Infra' 카테고리의 다른 글
[Docker] 도커 환경에서 실행되는 Nodejs 애플리케이션 (0) | 2021.01.28 |
---|---|
[Docker] 도커 이미지 생성 (0) | 2021.01.28 |
[Docker] 도커의 기본 이해 (1) | 2021.01.27 |
[DevOps] CI/CD (0) | 2021.01.15 |
[NGINX] EC2에 nginx 설치 및 세팅 (0) | 2021.01.15 |