본문 바로가기

서버

쿠버네티스 컨테이너 실행하기

컨테이너 실행하기

doker run

으로 컨테이너 생성시 결과값으로 16진수 문자열이 출력됨.

이 문자열은 컨테이너를 식별할 수 있는 고유 ID임.

 

컨테이너를 생성하는 명령 형식

docker run [옵션] <사용할 이미지 이름>[:태그 | @다이제스트]

태그와 다이제스트는 생략 가능

 

새 컨테이너를 실행하는 명령어

docker run -d --restart always nginx

-d : —detach와 동일한 옵션. 컨테이너를 백그라운드에서 구동한다는 의미.

옵션 생략 시 컨테이너 내부 실행 애플리케이션의 상태가 화면에 계속 표시 됨.

ctrl + c로 빠져나올 시 애리케이션 뿐만 아니라 컨테이너도 함께 중단 되는데, 계속 작동 되어야 하는 경우에는 -d 옵션을 붙여 백그라운드에서 계속 작동하게 해야 함

—restart always : 컨테이너 재시작과 관련된 정책을 의미하는 옵션. 오류가 생기거나 도커 서비스가 중지되는 경우 컨테이너도 작동을 멈추는데, 중지된 컨테이너를 즉시 재시작하거나 도커 서비스가 작동할때 컨테이너를 자동으로 시작하도록 설정가능 ( —restart always)

  • no : 기본 값. 컨테이너 재시작 안함
  • on-failure : 비정상 종료 시, 도커 서비스 시작 시 컨테이너를 재시작함.
  • always : 비정상 종료 시, 도커 서비스 시작 시 컨테이너를 재시작함.
  • unless-stopped : 컨테이너 비정상 종료 시 컨테이너를 재시작하고 도커 서비스 시작 시 사용자가 직접 정지하지 않은 컨테이너만 시작함.

컨테이너 정보 확인하기

docker ps

위 명령어로 조회 시 컨테이너 정보를 확인 할 수 있음

  • CONTAINER ID : 컨테이너 식별을 위한 고유 ID
  • IMAGE : 컨테이너를 만드는데 사용한 이미지
  • COMMAND : 컨테니어 생성 시 내부에서 작동할 프로그램을 실행하는 명령어
  • CREATED : 컨테이너 생성된 시각
  • STATUS : 컨테이너가 작동을 시작한 시각. 컨테이너 중지 후 재시작할때는 초기화 됨
  • POSTS : 컨테이너가 사용하는포트와 프로토콜 표시
  • NAMES : 컨테이너 표시. 이름은 docker run 에 —name 옵션으로 지정할 수 있고, 지정하지 암ㅎ으면 임의 부여됨.

컨테이너 검색

docker ps -f id=

필터링 대상을 지정할 때는 키=값 형식으로 입력함. 값이 정확히 일치하지 않더라도 해당 값이 표함된 경우도 필터링해줌.

추가 경로 설정

현재 호스트에서 컨테이너까지의 추가 경로 설정이 되어 있지 않음

어떤 요청을 보냈을 때 이에 대한 응답을 컨테이너에서 하길 바란다면 로컬 호스트의 해당 포트로 들어온 것을 컨테이너에서 받아줄 수 있는 포트로 연결해주는 설정이 필요함

컨테이너 실행 시 docker run에 -p 8080:80 옵션을 추가해줌.

-p는 외부에서 호스트로 보낸 요청을 컨테이너 내부로 전달하는 옵션으로

-p 요청받을 호스트포트:연결할 컨테이너 포트 형식으로 사용함.

이렇게 설정하면 8080번 포트로 들어오는 요청을 컨테이너 내부의 80번 포트로 보내도록 설정됨.

사용자가 원하는 페이지를 출력하기 위해서는 웹 페이지와 관련된 화면을 별도로 작성해야 함.

컨테이너 내부에서 웹 페이지 파일을 변경 할 수는 있지만 컨테이너 재 생성시마다 웹 페이지 파일을 전송해야 함.

영속적으로 웹 페이지 파일을 사용하기 위해서는 특정 디렉터리와 컨테이너 내부의 디렉터리를 연결하는 것이 효과적인 사용임

 

컨테이너 내부 파일 변경하기

  1. docker cp : docker cp <호스트경로> <컨테이너 이름>:<컨테이너 내부 경로> 형식으로 호스트에 위치한 파일을 구동중인 컨테이너 내부에 복사함. 즉 컨테이너에 임시로 필요한 파일이 있는 경우 단편적인 전송을 위해 사용하거나 컨테이너 저장 설정이나 로그를 추출해 확인하기 위해 사용됨.
  2. Dockerfile ADD : 이미지는 Dockerfile을 기반으로 만들어짐. ADD라는 구문으로 컨테이너 내부로 복사할 파일을 지정하면 이미지 빌드 시 지정 파일이 이미지 내부로 복사됨. 이후에는 복사한 파일 사용이 가능해짐. 그러나 사용자가 원하는 파일을 선택해서 사용할 수는 없음.
  3. 바인드 마운트 : 호스트의 파일 시스템과 컨테이너 내부를 연결해 한쪽에서 작업한 내용이 양쪽에 동시에 반영되는 방법. 새 컨테이너 구동 시에도 연결 파일이나 디렉토리 경로만 지정하면 다른 컨테이너 파일과 연결 가능함. 컨테이너가 바뀌어도 없어지면 안되는 자료는 이 방법으로 보존 가능
  4. 볼륨 : 호스트의 파일 시스템과 컨테이너 내부를 연결하는데, 특정 디렉토리가 아닌 도커가 관리하는 볼륨을 연결함. 도커가 관리하는 볼륨 공간을 NFS와 같은 공유 디렉터리에 생성한다면 다른 호스트에서도 도커가 관리하는 볼륨을 함께 사용 가능.

 

바인드 마운트로 호스트와 컨테이너 연결하기

 

디렉터리 생성

mkdir -p /root/html

연결

docker run -d -p 연결포트 \\ -v <호스트디렉터리경로>:[컨테이너 디렉터리 경로] --restart alway --name nginx-bind-mounts nginx

-v옵션은 호스트 디렉터리와 컨테이너 디렉터리를 연결해줌.

바인드 마운트는 호스트 디렉터리의 내용을 그대로 컨테이너 디렉터리에 덮어씀. 컨테이너 디렉터리에 어떤 내용이 있어도 해당 내용은 삭제가 됨.

 

cp 명령어로 root/html/ 에 사용할 html을 넣어줌

cp ~/html /root/html/index.html

볼륨으로 호스트와 컨테이너 연결하기.

볼륨을 생성함

docker volum create

 생성할 볼륨 이름

볼륨의 디렉토리를 확인함

docker volum inspect

 볼륨이름

결과로 출력된 mouontpoint 행 디렉터리가 볼륨 디렉토리임.

컨테이너 내부와 연결 시에는 볼륨 이름으로 간편하게 연결 가능.

 

컨테이너와 볼륨을 연결함

docker run -d -v 볼륨이름:컨테이너디렉터리 \\ -p 8082:80 --restart always --name 볼륨이름 nginx

바인드 마운트와 다르게 빈 디렉터리를 덮어쓰지 않고 내부 값을 보존함.

그러나 볼륨에 컨테이너 드렉토리와 동일한 파일이 존재한 상태로 연결 될 경우 덮어쓰기가 됨.

 

cp로 연결한 파일 변경해보기

cp 바꿀파일이있는경로 볼륨경로

변경하면 바뀐 파일로 화면이 출력 됨.

볼륨을 사용하면 컨테이너안의 파일을 보존할 수 있고 필요할때 변경해서 사용할 수 있음. 사용중인 볼륨을

docker volume ls 명령으로 조회할 수 있고

docker volum rm 명령으로 삭제할 수 있어서 바인드마운트보다 관리하기 쉬움.

볼륨 저장 경로는 —data-root 옵션으로 변경 가능

호스트 경로와 컨테이너 경로를 명확히 연결하는 —mount 옵션으로도 설정 가능.

 

컨테이너 삭제하는 법.

컨테이너나 이미지를 삭제하기 전에 컨테이너를 정지해야 함. 배포하거나 컨테이너의 사용 자체를 중지할때도 컨테이너를 정지해야 함.

실행되는 컨테이너 확인

docker ps -f ancestor=nginx

컨테이너 정지

docker stop 컨테이너 이름이나 아이디(일부도 가능)

컨테이너가 정지되면 정지된 컨테이너 이름이나 입력한 아이디가 결과로 표시됨.

 

컨테이너 일괄 정지

우선 -q옵션으로 컨테이너 id를 모두 출력함.

docker ps -q -f ancestor=nginx

출력받은 값을 docker stop에서 인자로 사용하게 $()에 넣고 실행

docker stop $(docker ps -q -f ancestor=nginx)

정지 완료!

 

삭제하기

docker rm <컨테이너 이름|ID>

docker rm $(docker ps -aq -f ancestor=nginx) 이렇게 하면 현재 정리된 모든 컨테이너를 삭제함

 

내려받은 이미지도 삭제해 용량 확보하기

docker rmi $(docker images -q nginx)

rmi는 이미지를 지운다 라는 의미임.

이미지는 컨테이너가 정지 상태가 아닌 삭제 상태일때만 삭제 가능.

'서버' 카테고리의 다른 글

파드 메트릭 데이터 시각화  (0) 2022.06.29
젠킨스  (0) 2022.06.10
쿠버네티스 기본 사용법  (0) 2022.06.10
쿠키와 세션  (0) 2022.03.23
아파치와 톰캣  (0) 2022.03.23