[Docker] docker 컨테이너의 생명주기 (by 따라하며 배우는 Docker와 CI환경)

su_y2on·2022년 2월 8일
0

Docker

목록 보기
3/12
post-thumbnail

docker 컨테이너의 생명주기

도커의 생명주기는 아래와 같습니다

이전에 컨테이너를 만들었던 docker run은 사실 docker create + docer start 입니다. 하나씩 실행해보도록 하겠습니다

1. 생성하기 + 시작하기 : docker create + docker start

> docker create hello-world
32cf035d7431202bb749bc2e9141af4e55b7c19a11da7eec52db73bbae04f30b
> docker start 32cf035d7431
32cf035d7431

create를 하면 생성된 컨테이너의 id를 반환합니다. 그러면 docker start뒤에 이 id의 일부 또는 전부를 넣으면 실행이됩니다.




2. 중지하기 : docker stop vs docker kill

컨테이너를 중지시키는 방법은 두가지가 있습니다. stop정리할 시간을 줍니다. stop을 입력하기 전에 요청한 것들이 있다면 그 일까지는 마치고 중지를 합니다. 하지만 kill은 명령어를 친 즉시 중지시킵니다.

> docker stop 32cf035d7431
> docker kill 32cf035d7431



3. 삭제하기 : docker rm

컨테이너를 완전히 삭제하고 싶다면 docker rm이라는 명령어를 입력하면 됩니다. 이때 해당 컨테이너가 중지되어있어야합니다. 실행중이라면 삭제할 수 없습니다.

> docker rm 32cf035d7431

중지된 모든 컨테이너를 지우고싶다면 아래와 같은 명령어를 입력하면 됩니다.

> docker rm `docker ps -a -q`



4. 실행중인 컨테이너에 명령어 전달 : docker exec

이제까지 명령어를 전달하는 것은 docker run <이미지> 명령어 로만 해봤습니다. 하지만 이는 컨테이너가 생성될 때 전달하는 것입니다. 실행중인 컨테이너에 전달하는 방법은 docker exec를 이용하면 됩니다.


실습 : redis

먼저 redis서버를 docker run을 통해 실행시킨뒤 redis-cli라는 명령어를 통해 redis 클라이언트에 접속해 딕셔너리(키:값)형태로 데이터를 저장하고 조회해보겠습니다.

일단 아래와 같이 입력해 redis서버를 실행합니다

> docker run redis
.
.
.

그런뒤에 다른 터미널로 실행중인 redis 컨테이너에 redis-cli명령어를 넣어줍니다. 그러면 연결이 되는 것을 알 수 있습니다. 그리고 정상적으로 데이터도 저장하고 가져올 수 있습니다.

> docker exec -it f967a8b79eed redis-cli
127.0.0.1:6379> set key1 hello
OK
127.0.0.1:6379> get key1
"hello"

-it(interactive terminal)라는 키워드를 붙였기 때문에 컨테이너에 진입해서 redis-cli를 쳤을 때 상호적으로 데이터를 저장하고 조회하는 것이 가능했습니다. 만약 -it를 뺀다면 컨테이너에 진입후 바로 빠져나오게됩니다...




5. 실행중인 컨테이너의 쉘 환경 진입

실행중인 컨테이너에 명령어를 입력하고 싶을 때마다 위처럼 한줄한줄 exec, -it등을 붙여가며 하면 정말 비효율적이겠죠..? 그래서 컨테이너의 쉘환경으로 아예 진입하는 명령어가 있습니다. 바로 sh를 붙여주는 것입니다. 그러면 해당 컨테이너의 쉘환경으로 진입합니다.

아래처럼 shell에 진입한뒤에는 redis-cli를 쳐서 여러 통신을 서버와 주고받은 뒤 나와도 다시 쉘로 나오기 때문에 많은 명령어들을 한번에 처리할 수 있습니다.

> docker exec -it f967a8b79eed sh
# redis-cli
127.0.0.1:6379> 
127.0.0.1:6379> exit
# 

0개의 댓글