Docker run, exec 명령어

청포도한라봉·2025년 1월 17일

Docker

목록 보기
3/6

Pipeline


도커의 파이프라인을 간략하게 설명하자면

  1. DockerFile를 통한 이미지 생성 또는 DockerHub를 통한 이미지 설치
  2. 이미지 기반 도커 컨테이너 생성 (run)
  3. 생성한 컨테이너 진입 (exec)
  4. 개발환경 구축

순으로 진행된다.

run Command


해당 항목에서는 실제로 사용해본 명령어 중심으로 설명을 하려고 한다.
그래서 사용해보지 못한 명령어는 간단히 코멘트만 남긴다.

docker run 커맨드의 기본 형식은 아래와 같다.

docker run [옵션] [이미지 ID or repository:tag]  

필자의 경우, 아래와 같이 활용하여 컨테이너를 생성했다.

docker run -d -it --user=내가 생성한 계정 이름 --name 내가 설정해주고 싶은 별명 --privileged 이미지 ID
  • privileged의 경우 default가 True이기 때문에 =True 기입해줄 필요없이 한 칸 띄운다음 이미지 ID를 기입하면 된다.

-d 옵션

컨테이너를 백그라운드에서 실행시키는 옵션
즉, 컨테이너가 다른 컨테이너들과 독립적으로 실행되기를 원할 때 사용하는 방식임.

해당 옵션 없이 컨테이너를 실행하고 빠져나온다면 해당 컨테이너는 바로 종료된다고 한다.

-it 옵션

해당 옵션은 -i 옵션과 -t 옵션을 함께 쓰는 케이스

도커 주의점으로, 도커는 내부에서 실행 중인 프로세스가 없을 경우, 자동으로 종료하는 특징이 있다.
이때, -it 옵션을 통해 컨테이너와 상호 작용하는 대화형 모드로 전환시켜줘서 터미널 세션을 유지하게 만들어줌으로써 컨테이너를 빠져나와도 계속해서 컨테이너가 작동되게 만들어준다.

--user 옵션

컨테이너에서 특정 계정을 생성했을 경우, 해당 계정에 연결시키는 옵션

자세한 설명은 [여기]에서 다룬다.

--name 옵션

컨테이너 생성 시, 별명을 지정해주는 옵션

-e 옵션

컨테이너 내부에서 사용할 환경 변수를 설정해주는 옵션
기본적으로 도커 이미지의 시간대는 UTC 기준으로 설정되어 있어 만약 한국 시간대로 변경하고자 한다면 별도의 작업이 필요하다.
자세한 설명은 [여기]에서 다룬다.

--privileged 옵션

도커 컨테이너는 기본적으로 Unprivileged 모드로 실행되어 시스템 주요 리소스에 접근할 수 있는 권한이 부족한 이슈가 있어, 특정 시스템 리소스에 접근할 수 없다.
이를 해결하고자 해당 옵션을 사용하는 것으로 이해했다.

네트워크 연결이였나 특정 문제가 계속 발생하여 구글링을 통해 해당 옵션이 있는 것을 알게되어 활용했었다.

etc

p, v 옵션은 사용해보지 못해 간략하게 작성하겠다.

  1. -p 옵션
    host <-> container 간의 port 번호로 접속할 수 있도록 설정해주는 옵션
  2. -v 옵션
    host <-> container 간의 volume 설정을 위해 사용
    host 로컬 컴퓨터의 특정 경로를 컨테이너의 특정 경로에 마운트 시켜준다.
    그래서 컨테이너에서 폴더를 생성하면 로컬에서도 해당 폴더가 생성되는 것으로 알고 있다.

위와 같이 컨테이너를 생성하였고

컨테이너가 잘 생성된 것으로 확인된다.

exec Command


여기선 어떤 옵션들을 활용하여 진행했는지 간단하게 언급하고 넘어가고자 한다.

docker exec 커맨드의 기본 형식은 아래와 같다.

docker exec [옵션] [컨테이너 ID]

필자의 경우, 아래와 같이 활용하여 컨테이너 내부로 진입했다.

docker exec -it -u 생성한 계정 이름 사용할 컨테이너 ID or 컨테이너 Name /bin/bash

-it 옵션

run 명령어와 동일하게 컨테이너와 상호작용할 수 있게 생성

--user 옵션

run 명령어처럼 이미지 안에 생성된 계정으로 진입

/bin/bash 옵션

해당 옵션은 필수적으로 기입해야하는 것으로 알고 있다.
/bin/bash 옵션을 사용해야 bash shell이 실행되서 컨테이너 내부에서 명령어를 입력하고 작업을 할 수 있게 해준다.


~~@workstation -> ~@(컨테이너id) 으로 바뀐 것을 확인함으로써 exec 명령어를 통해 컨테이너 내부로 들어올 수 있었다.


만약 도커 컨테이너를 중지시키면 저장된 파일이 모두 날아갈까?

exit # 을 통해 컨테이너 내부에서 빠져나간다.
docker ps # 를 통해 컨테이너가 실행되어 있는지 확인 -> Up = 실행 중
docker exec -it ~ # 위에서 사용했던 명령어 대로 그대로 입력해서 다시 실행
# 컨테이너가 아직 실행 중이기 때문에 exec을 통해 바로 컨테이너 내부로 들어 갈 수 있음.

sudo mkdir tempfolder # root 계정이 아니고 내가 따로 만든 계정이라 sudo 명령어 활용하였음
# mkdir을 통해 폴더 생성

exit # 을 통해 다시 빠져나가기
docker stop (컨테이너 ID or 컨테이너 별명) # 을 통해 실행중인 컨테이너 중지시키기

# 실제로 Exited가 되면서 종료된 모습

docker restart (컨테이너 ID or 컨테이너 별명) # 여기서 docker를 재실행 하기 위해서 해당 명령어 사용
# 컨테이너가 종료되어있기 때문에 restart를 안하면 exec 명령어를 써도 내부로 진입이 불가함


결론:
중지했다가 다시 들어와도 tempfolder가 여전히 있는 것을 확인 할 수 있다.
대신에 docker rm ~을 통해 컨테이너 자체를 지워버리면 완전히 다 날라가기때문에 주의해야한다.
(만들었던 컨테이너 작업물 자체가 날라갔으니 처음에 작업 진행을 위해 사용하였던 이미지를 불러와야하기 때문)

0개의 댓글