실행 중인 도커 컨테이너에 명령어 전달하기 (feat. Redis)

Bakumando·2022년 5월 11일
0

Docker

목록 보기
4/7
post-thumbnail

0. 블로깅 목적

  • 실행 중인 도커 컨테이너에 새로운 명령어를 전달하는 방법을 이해한다.
  • 레디스를 활용해, 컨테이너에 접속하여 명령어를 입력하는 방법을 이해한다.
  • 실행 중인 컨테이너 안에서 쉘이나 터미널 환경으로 접속하는 방법을 이해한다.

1. 가동 중인 도커 컨테이너에 명령어 전달하기

$ docker exec 5d4da2695441 ls
  • docker exec {컨테이너 아이디} {명령어 키워드}
    • docker run은 새로운 컨테이너를 만들어서 실행한다.
    • 반면 docker exec은 이미 실행중인 컨테이너에 새로운 명령어 키워드를 전달하고 적용한다.

간단히 실습도 진행해보자.

  • 터미널 2개가 필요하다.
  • 첫번째 터미널에서 컨테이너 하나를 실행한다.
    • ex) docker run alpine ping localhost
  • 두번째 터미널에서 컨테이너 리스트를 확인하고, exec으로 생성된 컨테이너에 새로운 키워드를 전달한다.
    • ex) docker ps
    • ex) docker exec 5d4da2695441 ls
  • 출력 결과:
    • ls는 파일리스트를 출력하는 명령어이다.
    • 컨테이너 내부에 있는 파일리스트가 정상적으로 출력되었음을 알 수 있다.

2. 레디스 컨테이너 생성 및 접속, 명령어 전달 실습해보기

$ docker run redis
$ docker exec -it 580637a989f9 redis-cli
  • docker exec -it {컨테이너 아이디} {명령어 키워드}
    • 컨테이너 내부에 명령어를 전달하여 해당 커맨드를 실행하는 방법이다.
    • 여기에서 새롭게 확인할 수 있는 -it은 컨테이너 내부에 들어갈 수 있게 해주는 키워드이다.
    • -it이 없으면 그냥 전달된 명령어를 수행하기만 하고 접속은 하지 않는다. 접속해서 해당 컨테이너의 기능을 사용하고 싶다면 필수이다.

역시나 실습으로 이해해보자

  • docker run redis 로 redis 컨테이너를 생성하고 실행한다.
    • 레디스가 연결되었음을 확인할 수 있다.

  • 그러고 redis-cli를 실행해보자.
    • 명령어를 찾을 수 없다는 메시지만 출력된다.
    • 그 이유는 단순히 컨테이너 외부에서 컨테이너 내부에 명령어를 전달할 수가 없기 때문이다.
    • 내부에 명령어를 전달하려면, 위에서 실습했던대로 exec 키워드를 활용해야한다.

  • docker ps로 컨테이너 ID를 확인한다.
  • 그리고 docker exec -it {컨테이너 아이디} redis-cli 를 입력해보자.
    • redis 클라이언트에 접속되었음을 확인할 수 있다.
    • 언급했듯이 만약 -it을 빼면 접속이 이루어지지 않는다.

  • 접속한 redis 클라이언트에서 key-value 세팅을 진행해보자.
    • set {key} {value} 명령어로 간단하게 세팅할 수 있다.
    • get {key} 명령어로 value를 가져올 수 있다.
  • set hello world 이후, get hello를 수행해보자.
    • 정상적으로 key-value가 set, get 됨을 확인할 수 있다.

3. 실행중인 컨테이너의 쉘 환경으로 접속하여 명령어를 편하게 사용해보기

$ docker exec -it 3d04c4444b19 sh
  • docker exec -it {컨테이너 아이디} {터미널 환경}
    • 매번 docker exec -it {컨테이너 아이디} {명령어 키워드} 와 같이 전체 커맨드를 입력하기란 번거로울 수 있다.
    • 특정 환경을 통하면, 앞부분을 생략하고 마지막 명령어 키워드만 기입할 수 있다.
    • 이를 위해선 {명령어 키워드} 대신, 그 자리에 구축하고자 하는 {터미널 환경} 을 기입해주어야 한다.
    • 그렇게 특정 터미널 환경에 진입하면, 그때부터는 실질적인 실행 명령어만 입력해도 된다.
    • 터미널 환경의 종류로는 sh, zsh, bash, powershell 등이 있다.
      (윈도우에서는 powershell을 지원하고, 맥에서는 bashzsh을 지원한다. sh은 어디에서나 지원되는 터미널 환경이다.)

그럼 sh을 활용해 실습해보자.

  • 기본적인 커맨드 전달 방식
    • 새로운 명령어를 전달하려면 또 다시 docker exec -it...를 전부 기입해줘야 한다.

  • sh 터미널 환경에서의 전달 방식
    • sh 환경으로 진입한 모습이다. 이제 중복되는 커맨드를 생략하고 실행 명령어만 입력해도 된다.

  • 추가 테스트 1: 새로운 파일 만들고 파일리스트 확인
    • 정상적으로 명령어가 적용되고 있음을 확인할 수 있다.

  • 추가 테스트2: 환경변수 적용해보기
    • 환경변수도 마찬가지로 잘 세팅된다.
profile
그렇게 바쿠만도는 개발에 퐁당 빠지고 말았답니다.

0개의 댓글