# 도커 컨테이너 단순히 실행하기
1. 새로운 컨테이너 실행
$ docker run -d --restart always nginx
docker run 으로 컨테이너를 생성하면 결과값으로 14d58aacc.. 같은 16진수 문자열이 나온다. 이런 문자열은 컨테이너를 식별할 수 있는 고유한 ID이다.
- -d(—detach)
- 컨테이너를 백그라운드에서 구동한다는 의미이다. 옵션을 생략하면 컨테이너 내부에서 실행되는 애플리케이션의 상태가 화면에 계속 표시된다. 이 상태에서 빠져 나오려고 ctrl+c 를 누르면 애플리케이션뿐만 아니라 컨테이너도 함께 중단된다. 따라서 계속 작동해야하는 서버나 데이터베이스 같은 프로그램은 -d 옵션을 붙여 백그라운드에서 작동하게 된다.
- —restart always
- 컨테이너의 재시작과 관련된 정책을 의미하는 옵션이다. 프로그램에 예상하지 못한 오류가 발생하거나 리눅스 시스템에서 도커 서비스가 중지되는 경우에 컨테이너 작동이 중지된다. 이때 중지된 컨테이너를 즉시 재시작하거나 리눅스 시스템에서 도커 서비스가 작동할 때 컨테이너를 자동으로 시닥하도록 설정할 수 있다.
2. 컨테이너 상태 확인
$ docker ps
3. 컨테이너 지정해서 검색하기
$ docker ps -f id=14d
4. 웹페이지 정보 가져오기
생성된 nginx 컨테이너는 마스터 노드 내부에 존재하므로 curl 127.0.0.1 명령으로 컨테이너가 제공하는 nginx 웹페이지 정보를 가져온다.
생성한 컨테이너는 80번 포트를 사용하므로 HTTP의 기본 포트인 80번 포트로 요청을 보냈다. 그런데 정상적인 응답이 돌아오지 않고 ‘Connection refused’ 오류가 발생했다.
앞에서 컨테이너의 PORTS 열에 표시되는 80/tcp는 컨테이너 내부에서 TCP 프로토콜의 80번 포트를 사용한다는 의미이다. 하지만 curl 127.0.0.1 으로 전달한 요청은 로컬호스트(127.0.0.1)의 80번 포트로 전달만 될 뿐 컨테이너까지는 도달하지 못한다. 즉 호스트에 도달 한 후 컨테이너로 도달하기 위한 추가 경로 설정이 돼 있지 않은 것이다.
따라서 응답을 컨테이너에서 처리해주기를 원한다면 80번으로 들어온 것을 컨테이너에서 받아줄 수 있는 포트로 연결해주는 설정이 추가로 필요하다.
# 추가로 경로를 설정해 정상적으로 컨테이너 실행하기
컨테이너 외부에서도 컨테이너 내부에 접속할 수 있게 새로운 컨테이너를 구동해보자
1. docker run에 -p 8080:80 옵션을 추가해 새로운 컨테이너(nginx-exposed)를 실행한다.
$ docker run -d -p 8080:80 --name nginx-exposed --restart always nginx
여기서 -p(—publish)는 외부에서 호스트로 보낸 요청을 컨테이너 내부로 전달하는 옵션으로
-p <요청 받을 호스트 포트>:<연결할 컨테이너 포트> 형식으로 사용한다.
2. 컨테이너가 제대로 작동하는지 확인
$ docker ps -f name=nginx-exposed
- 0.0.0.0:8080→80/tcp
- 0.0.0.0의 8080번 포트로 들어오는 요청을 컨테이너 내부의 80번 포트로 전달한다는 의미이다. 0.0.0.0은 존재하는 모든 네트워크 어댑터를 의미한다. k-control 호스트는 자기 자신을 나타내는 127.0.0.1과 외부에 노출된 192.168.26.10 등의 ip를 가지고 있는데 , 요청이 호스트에 할당된 어떤 ip의 8080번 포트로 들어오더라도 컨테이너 내부의 80번 포트로 전달된다
3. 컨테이너로 접근할 수 있는지 확인
모든 주소(0.0.0.0)의 8080번 포트로 들어오는 요청을 컨테이너 내부의 80번 포트로 보내도록 설정했기 떄문에 컨테이너의 nginx 접속 초기 화면이 문제없이 출력된다.
현재 nginx 내부에는 따로 작성한 파일이 없기 때문에 기본 페이지를 보여준다. 따라서 사용자가 원하는 페이지를 출력하기 위해서는 루웹 페이지와 관련된 화면을 별도로 작성해야한다. 컨테이너 내부에서 웹 페이지 파일을 변경할 수 있지만 이런 경우, 컨테이너를 다시 생성하게 되면 매번 웹페이지 파일을 전송해야한다. 그러므로 영속적으로 웹페이지 파일을 사용하기 위해서는 특정 디렉터리와 컨테이너 내부의 디렉터리를 연결하는것이 효과적인 사용법이다.
출처:
"컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 - 조훈,심근우,문성주 지음/길벗출판사" 책을 기반으로 실습한 내용입니다.
'DevOps > 도커(Docker)' 카테고리의 다른 글
도커 컨테이너 이미지 만들기 1 - 기본 방법으로 빌드하기 (1) | 2022.06.03 |
---|---|
도커 컨테이너/이미지 정지하고 삭제하기 (0) | 2022.06.03 |
도커 바인드 마운트(Bind mount)와 볼륨(Volume) (0) | 2022.06.03 |
도커 컨테이너 이미지 (0) | 2022.06.03 |
파드, 컨테이너, 도커, 쿠버네티스의 관계 (0) | 2022.06.03 |