728x90
반응형
728x90
반응형
728x90
반응형

이전글에서는 docker의 컨테이너 설치부터 삭제까지 간단히 다뤘다.

이번엔 내가 docker를 사용하면서 필요했던 설정에 대해서 적어보고자 한다.

 

이 글의 주요 내용은 아래와 같다.

1. 여러 컨테이너의 서버자원 사용을 관리하고 싶다.

2. 컨테이너는 host에 설치된 DB에 연결하고 싶다.

3. 컨테이너에서 업로드 또는 다운로드 되는 파일은 host 영역에 배치하고 싶다.

번외1. docker를 이용하며 발생한 이슈 : 서버시간, 한글

번외2. log파일을 관리해야 겠다.

번외3. docker file을 만든다.

 

1. 여러 컨테이너의 서버자원 사용을 관리하고 싶다.

내 운영서버는 1대로 dev, prod, 컨테이너 관리를 위한 portainer를 함께 사용한다.

이 말은 각 컨테이너의 자원을 할당해야 한다는 의미다.

아무래도 prod가 더 많은 일을 할 것이고, 문제없이 서비스 되어야 하므로 다른 컨테이너들이 자원을 사용하는 것을 제한해야 한다고 생각했다.

docker stats 명령어를 통해 현재 실행중인 docker 컨테이너의 자원 사용상황을 확인할 수 있다.

자원 할당전

 

나는 그래서 prod외 컨테이너들의 cpu, memory 각 10%로 제한하기로 했다.

(아래 방법은 실시간으로 변경하는 방법이다.)

docker update --memory 용량 --memory-swap 용량 컨테이너명 : 컨테이너의 메모리 사용은 2.4g로 제한했다.

docker update --cpus=갯수(또는 비율) 컨테이너명 : --cpus에 정수인 경우 CPU의 코어 갯수이고, 1 미만의 실수를 입력하면 비율로 정해진다.

 

이후 자원 사용현황을 확인하면 아래와 같다.

자원 할당후 (cpu 할당 변화는 어떻게 보는걸까?)

 

2. 컨테이너는 host에 설치된 DB에 연결하고 싶다.

docker 컨테이너의 개념에서 실제 운영중인 DB를 컨테이너로 관리한다는 것은 무리가 있다고 생각했다.

그래서 host의 설치된 DB를 각 컨테이너가 연결하는 것이 맞다고 생각하고, 연결하기로 했다.

그럼 내부에서의 IP만 알면 되는 것인데 이건 어떻게 확인할 것인가?

ifconfig를 입력하면 확인되는 docker0의 ip로 접근하면 된다.

 

만약 ifconfig를 사용할 수 없다면 아래 명령어로 패키지를 설치하도록.

sudo apt-get update

sudo apt install net-tools 

 

자세한 docker 네트워크에 대해서는 아래 글 참고

 

Docker 네트워크 이해 - Voyager of Linux

Table of Contents1 Docker 네크워크 상태2 Docker0 브릿지 네트워크3 Docker 네트워크 특징4 Docker Network Namespace5 docker0 와 eth0 의 연결: iptables -t nat6 Inter-Container Communication7 docker0 브릿지 네트워크 ip 변경 Docke

linux.systemv.pe.kr

 

3. 컨테이너에서 업로드 또는 다운로드 되는 파일은 host 영역에 배치하고 싶다.

나는 host에 존재하는 폴더를 컨테이너에서 읽기, 쓰기, 삭제의 모든 권한이 필요하다.

그래서 내가 사용한 것은 bind mount다. 

현재 권장되는 것은 아니나(docker에서는 volume mount를 권장),

난 내가 지정한 위치에 폴더를 배치하고 싶어서 사용하기로 했다.

 

아래 순서로 진행하면 컨테이너에서 host의 폴더를 mount되는 것을 확인할 수 있다.

1) host에 mount 할 폴더를 만들고 테스트로 txt파일을 하나 배치한다.

 

2) 컨테이너를 만들면서 bind mount 한다.

bind mount와 함께 컨테이너 생성

docker run -d -it --name 컨테이너명 -v host의폴더명:컨테이너의폴더명 -p 이미지명

 

3) 컨테이너로 접속해서 파일 확인

컨테이너에 접속해 보면 mount된 폴더가 확인된다. 그리고 파일 삭제도 가능하다.

이렇게 하면 컨테이너에서 host의 폴더를 내 폴더인 처럼 바로 사용이 가능하다.

 

docker의 데이터 파일 mount에 관련해서 자세한 내용은 아래 글 참조

 

Docker 컨테이너에 데이터 저장 (볼륨/바인드 마운트)

Engineering Blog by Dale Seo

www.daleseo.com

 

번외1. docker를 이용하며 발생한 이슈 : 서버시간, 한글

이후 운영서버에서 서비스 오픈하고 상황을 모니터링하는 과정에서 몇가지 이슈가 발견 되었다.

 

1) 서버시간이다.

내 서버는 특정 시간마다 진행되는 스케줄이 있다.

나의 운영서버는 세팅한지 1년이 넘어가는 서버로 이미 세팅할때 서버시간을 한국시간으로 적용하고 있었다.

그래서 당연히 정해진 시간에 정해진 스케줄이 돌아가리라 생각하고 있었다.

그런데 실행되는 스케줄이 내가 정해 놓은 시간과 다르다.

이러한 이유는 컨테이너의 시간이 운영서버의 시간과 다를 수 있기 때문이다.

(사실 이 결론에 도달하는데 여러 삽질이 있긴 했지만 그건 그냥 넘어가기로 하고....)

 

컨테이너로 접속하고 아래 순서로 진행해 보자.

apt-get update && apt-get -y upgrade : tzdata을 사용할 수 없는 경우
apt-get -y install tzdata : 타임존 설정
6(Asia) -> 69(Seoul) 선택

 

그리고 터미널에 date를 입력하면 컨테이너가 적용되고 있는 시간이 변경된 것을 확인할 수 있다.

 

시간 변경에 대해서는 아래글 참조

 

docker container 컨테이너 시간 변경 방법

docker container 컨테이너 시간 변경 방법 docker에 Tomcat을 올려 사용하던 중 로그 시간이 안맞아 보기 불편하여 정리. docker 컨테이너 시간바꾸기 -컨테이너 접속 후 # dpkg-reconfigure tzdata - 한국 서울..

tptrmfwk.tistory.com

 

[solved] ubuntu 도커 이미지 빌드 시 timezone 설정 방법

최근 Docker를 이용한 작업이 많아지면서 여러 이슈들이 있었는데, 그 중에서 많은 삽질을 했던 도커 컨테이너 시간대 설정 방법을 공유한다.

stynxh.github.io

 

2) 한글이 안 나온다.

가끔 서버에서 log 메시지를 기록할 때가 있다. 근데 문제는 이게 깨져 나온다는 거다.

컨테이너 내부에서 변경하는 방법도 있긴하나 나는 컨테이너 생성시 지정하는 것을 선호한다.

docker run -d -it -e LC_ALL=C.UTF-8 --name 컨테이너명 이미지명

 

언어변경에 대해서는 아래 글 참조

 

도커(Docker) 컨테이너 로케일 설정: 데비안(Debian), 우분투(Ubuntu) 이미지에서 한글 입력 문제

도커 우분투, 데비안 이미지에서는 기본적으로 한글 입력을 지원하지 않습니다. 한글을 입력하기 위해서는 로케일 설정을 UTF-8로 지정할 필요가 있습니다. 이 글에서는 로케일 개념과 함께 도커

www.44bits.io

 

번외2. log파일을 관리해야 겠다.

내 운영서버는 무료 클라우드 서버다. 그래서 디스크 잔여 용량에 대해서 신경 쓰고 있다.

그래서 무한대로 늘어날 가능성이 있지만 매번 관리하기 어려운 log는 관리 대상인 셈이다.

 

이 내용은 단순하지 않아서 자세한 글을 링크해 둔다. 이 글을 참고해서 적용해 보길 바란다.

 

Logrotate와 Crontab을 활용한 Docker Log 관리

💡늘어나는 Docker log는 어떻게 관리할까??🤷‍♀️

velog.io

+ 덧

이걸로 완전히 해결되지는 않는다. 쓰다보면 점점 docker에 대한 파일 용량이 늘어난다.

그리고 뭔가 관리로 해결할 방법을 찾아봤는데 쉽지가 않다.

다행이라면 docker는 쉽게 설치, 삭제를 가능하게 하는 것이니 완전히 삭제하는 방법이 그나마 내가 찾은 차선책 이었다.

 

 

Cloud VM에 docker를 적용 후 sda 용량 100% 문제

Cloud VM에 docker를 적용 후 sda 용량 100% 문제 오늘 테스트를 하면서 해결한 듯 하면서도 찜찜하다. 이유는 시험한 내용을 설명 후 쓰도록 하겠다. 전반적인 내용을 확인하고자 하시는 분은 htt

shyash.tistory.com

 

번외3. docker file을 만든다.

docker file은 나만의 여러 환경설정이 지정되어 있는 docker 이미지를 만드는데 사용된다.

그러므로 동일한 환경을 자주 구성해야 한다면, 그리고 그 환경이 여러가지를 설정을 포함하고 있다면 docker file을 만드는 것을 추천한다.

 

역시 이 내용도 자세한 글을 링크해 두니 참고하시길.

 

emunhi

Programming > Docker [Tomcat] Dockerfile 로 설치하기 1) Dockerfile 만들기 ※  $ vi Dockerfile 설치할려는 tomcat버전은 바뀔수가 있으므로 tomcat 홈페이지에서 검색해서 사용하면 된다. ※ 내역 /usr/local/tomcat/webap

emunhi.com

 

 

 

728x90
반응형

+ Recent posts