도커 설정 및 관리
도커 정보 확인
리눅스 상에서 *(wget, apt-get, yum)과 같은 도구들은 리눅스 시스템에서 사용되는 패키지 관리 도구입니다. 이들을 이용해서 설치하게 되면 때때로 해당 설치 파일에 설치되었는지 파악이 안될 때가 있다. 마찬가지로 도커를 설치하고 어디에 설치 되었는지 파악이 안될 때 쓰는 방법이 있다.
*(wget, apt-get, yum)
주요 패키지 관리 도구
apt-get과 yum
- apt-get: Debian 계열 리눅스 배포판(Ubuntu 등)에서 사용
- yum: Red Hat 계열 리눅스 배포판(CentOS, Fedora 등)에서 사용
이 두 도구는 비슷한 기능을 수행하지만 다른 리눅스 배포판에서 사용되기에 정확하게 어디에서 사용되지 알아야 한다.
wget
wget은 패키지 관리 도구가 아니라 파일을 다운로드하는 명령 줄 도구입니다. 주로 인터넷에서 파일을 다운로드할 때 사용된다.기능 비교
기능 apt-get yum wget 주 용도 패키지 관리 패키지 관리 파일 다운로드 사용 배포판 Debian, Ubuntu Red Hat, CentOS 모든 리눅스 패키지 형식 .deb .rpm 해당 없음 사용 예시
- apt-get: sudo apt-get install docker-ce docker-ce-cli containerd.io
- yum:
sudo yum install -y docker-ce docker-ce-cli containerd.io
- wget:
wget https://example.com/file.zip
이러한 도구들은 리눅스 시스템 관리를 더 쉽고 효율적으로 만들어주는 중요한 요소이자 주로 리눅스를 왜 서버 os로 많이 사용하는지 알 수 있게 해주는 것이기도 하다.
(윈도우와 달리 명령어 몇 개로 수십 개의 클릭을 대체할 수 있는 용이함이 있기 때문이다.)
docker info | grep Root
service docker status
위 코드를 리눅스에 치면 아래와 같은 결과를 얻을 수 있는데,
docker info | grep Root 명령어
service docker status
명령어를 실행하면 Loaded 부분에서 docker.service 파일의 위치를 확인할 수 있다.
service docker status 명령어 실행 후 Loaded의 value 값으로 docker.service 위치 파악 가능
도커 서비스 파일 수정
도커 서비스 파일을 위의 명령어를 통해 파악했다면
vi /lib/systemd/system/docker.service
만약
systemctl status docker.service
명령어를 실행했다면, loaded 키의 값이/usr/lib/systemd/system/docker.service
로 표시될 수 있다.
이 파일에서 ExecStart
로 시작하는 줄을 수정하여 이미지와 컨테이너의 저장 위치를 변경할 수 있다.
도커 용량 관리
도커 시스템 리소스 사용량 확인은 다음 코드를 쓰면 된다.
docker system df
위 사진을 보면 현재 도커 이미지는 7개 중 2개가 사용되고 있으며 현재 도커 컨테이너는 2개가 올라 간 것을 알 수 있다.
따라서, 사용하지 않는 시스템 자원 정리할 필요가 있다.
docker images 명령어를 쳤을 때 실제로 사용하지 않은 의미 없는 image <none>이 5개 있는 것을 확인할 수 있다.
docker system prune -f
docker buildx prune -f
위 명령어로 한 번에 사용하지 않는 도커 이미지를 지울 수 있는데 주의할 점은 이 예시 외에 나중에 사용할 이미지같은 지우고 싶지 않는 이미지가 있는 경우도 위 명령어로 한 번에 지워진다는 것이다. 또한 docker network 같은 것도 사용하고 있지 않으면 지워진다. 따라서, 따로 따로 지우는 것은 권장하며 해당 명령어는 다음과 같다.
docker rmi [IMAGE ID] 또는 [REPOSITORY(도커이미지명)]
도커 컨테이너 파일 용량 확인
sudo -i
cd /var/lib/docker/containers/
du -hs *
sudo – i 명령어를 실행하면 root 사용자의 환경 변수가 로드가 된다. 도커 로그 파일 용량을 확인하기 전에 해당 명령어를 실행하는 이유는 해당 로그 파일 위치가 root 권한 요구하는 경우가 있기 때문이다. 물론 SUID가 설정되어 있다면 문제가 없지만 일단, 해당 부분은 root로 손쉽게 가는 걸 가정으로 하기에 sudo -i로 접근했다.
이후 cd로 해당 containers 위치로 가면 각 도커 콘테이너 폴더들이 있는 걸 확인할 수 있다. (그 내부로 들어가면 json파일로 로그가 쌓인 것을 확인할 수 있다.) 그리고 해당 du -hs *를 사용하면 각각의 컨테이너 파일 용량을 확인 할 수 있다.
리눅스 시스템 관리
권한 관리
보통 루트 권한요구할 때 sudo를 많이 붙이는 특정 경로 들어갈 때도 당연힌 sudo cd를 쓰면 되겠지 했는데 응? 안된다.
왜 일까?
sudo cd
명령어가 작동하지 않는 이유는 cd
가 프로그램이 아닌 셸 내장 명령어이기 때문이다. 대신 다음과 같이 사용할 수 있다.
sudo -i
cd [경로]
exit # 일반 사용자로 돌아가기
이렇게 하면 root 사용자 환경 변수로 들어가는 것이기에 볼일 다 봤으면 exit 명령어를 쳐 처음 로그인 했던 사용자로 돌아간다.
시스템 정보 확인
도커 설치 위해 해당 os 버전이나 스펙을 확인 해야할 때가 있다 그 때 쓸 수 있는 명령어로 리눅스 시스템 사양 확인이 가능하다.
cat /proc/cpuinfo
모델명은 물론 cpu 등을 알 수 있다.
로그 관리
도커의 장점은 여러 프로그램을 한 번에 관리할 수 있다는 점이다. 하지만 문제도 있다. 특히 시간이 흐를 수 록 로그가 정말 많이 쌓여 프로그램 라이프사이클 자체를 위협하는 수준까지 갈 수 있다. 그래서 logrotate를 사용하여 도커 로그 관리가 필요한데 그 방법은 아래와 같다.
- logrotate 설정 파일 편집
vi /etc/logrotate.d/docker
- 다음과 같이 설정:
/var/lib/docker/containers/*/*.log {
rotate 3
daily
compress
missingok
copytruncate
}
위 코드의 옵션의 의미는 다음과 같다.
- rotate: 보관할 로그 파일 수
- daily/weekly/monthly/yearly: 로테이션 주기
- compress: 로그 파일 압축
- missingok: 로그 파일이 없어도 에러 무시
- copytruncate: 로그 파일을 복사 후 원본 파일 크기를 0으로 만듦
수정이 완료되고 수동으로 logrotate 실행 시킨다. 방법은 아래 참고 바란다.
logrotate -fv /etc/logrotate.d/docker
도커 권한 설정
도커 그룹에 사용자 추가
sudo usermod -aG docker $USER
sudo su - $USER
groups $USER
이 설정을 하는 이유는 사용자가 sudo
없이 도커 명령어를 실행할 수 있게 하기 위해서 이다. docker 명령어를 칠 때마다 sudo를 붙여하는 데 그 이유는 도커 설치를 root 사용자 환경으로 해서 그렇다. 따라서 이를 위해 sudo를 붙이는 번거로우니 그냥 위 코드를 참고해서 현 사용자에게 도커 접근 권한 설정을 하는 것이 좋다.
리눅스 기반의 도커를 활용하면서 최소한 이것만큼 알아야 된다는 것만 정리해봤다. 이러한 설정과 명령어들을 통해 도커와 리눅스 시스템을 효율적으로 관리할 수 있게 될 것이고 로그 관리, 용량 확인, 권한 설정 등은 시스템의 안정성과 성능 유지에 중요한 역할을 할 것이다. 다만 이걸로 끝이 아닌건… 다들 아실테니 일단 반드시 써먹을 것부터 하나하나 정리하면서 실력을 쌓아 나가시길 바란다.