1. stdin
도커 컨테이너는 기본적으로 standard input을 입력받을 수가 없다.
값을 받아서 쓰고 싶으면 호스트와 도커 컨테이너를 연결해줘야한다. 그러기 위해서 사용되는게 아래 두가지 옵션이다
- -i : interactive mode, 입력을 받을 수 있게한다
- -t : Pseudo Terminal, 컨테이너 터미널과 호스트를 연결해준다
docker run -it [Image]
2. Port
docker run을 하게 되면 사설 IP주소 주로 172.17.0.2 를 할당받게 된다. 그 결과 컨테이너 외부에서 내부로의 접근이 불가능해진다.
이러한 문제를 해결하기 위해 포트포워딩 기법을 사용한다.
docker run -p 1234:5000 [Image]
호스트의 1234 포트를 컨테이너 내부의 5000번으로 매핑해준다. 같은 이미지로 새로 컨테이너를 계속 띄워도 새로운 인스턴스로 취급을 하기 때문에 컨테이너간 포트는 중복이여도 상관없다. 단 그 컨테이너를 실행하는 호스트의 포트는 중복이여서는 안된다.
3. Volume
각각의 도커 컨테이너들은 독립된 파일 시스템을 가지게 된다. 물론 그 컨테이너드를 지우게 되면 해당 컨테이너가 가지던 모든 데이터 역시 삭제가 된다.
그러면 어떻게 유지하는가...그걸 극복해주는게 볼륨이라는 기술이다
docker run -v /opt/datadir:/var/lib/mysql mysql
예제에서는 Mysql를 예로 들었는데, Mysql이미지는 /var/lib/mysql 이라는 디렉토리에 모든 정보를 저장한다.
위 명령어를 토대로 -v 옵션을 통해서 호스트의 /opt/datadir 의 디렉토리를 컨테이너의 /var/lib/mysql 를 매핑시켜준다.
그러나 이제 -v 옵션보다는 --mount 옵션을 많이 사용한다.
docker run \
--mount type=bind, source=/data/mysql,target=/var/lib/mysql mysql
bind 종류를 기준으로 두 옵션의 차이는 전자는 우리가 마운트하려는 경로가 없음에도 run 명령어 실행시 해당 디렉토리를 생성해주는 반면 후자는 디렉토리가 없다고 오류를 뱉어준다.
References
'[Docker]' 카테고리의 다른 글
[Docker] CMD vs ENTRYPOINT (2) | 2022.09.12 |
---|---|
[Docker] ADD vs COPY (0) | 2022.09.11 |
[Docker] 도커 이미지 (2) | 2022.09.11 |
[Docker] 잊을것 같으니 메모하자 - 도커 명령어 (0) | 2022.09.09 |