2022. 7. 12. 14:37ㆍIT Information
docker 개념 및 설치 그리고 저장소 위치 변경 및 고정 IP 부여하기
이번 포스팅에서는 docker에 대해 알아보고자 한다.
docker를 설치하는 방법, 저장위치를 변경하는 방법과
고정IP를 부여하는 방법에 대해 알아보자.
먼저 docker란 무엇인가?
docker는 container 기반의 오픈소스 가상화 플랫폼이다.
그렇다면 container 무엇인가?
container는 격리된 공간에서 process가 동작하는 기술이다.
좀 더 쉽게 말하자면 docker는 우리가 사용할 프로그램의 이미지 또는 스냅샷이라고 할 수 있고
container는 그 이미지나 스냅샷을 담아주는 그릇 역활을 한다고 이해하면 될 듯 하다.
docker와 container의 개념에 대해 좀 더 자세히 알고 싶다면 아래 링크를 참조하자.
https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
초보를 위한 도커 안내서 - 도커란 무엇인가?
도커를 처음 접하는 시스템 관리자나 서버 개발자를 대상으로 도커 전반에 대해 얕고 넓은 지식을 담고 있습니다. 도커가 등장한 배경과 도커의 역사, 그리고 도커의 핵심 개념인 컨테이너와 이
subicura.com
#docker 설치 전 기존 패키지들 업데이트
yum -y update
yum -y install yum-utils
#docker image를 다운받을 repository 추가
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-nightly
#docker 설치
yum -y install docker-ce docker-cd-cli containerd.io
#docker 시작 및 서비스 등록
systemctl start docker
systemctl enable docker
#docker 상태 확인
systemctl status docker
#docker 서비스 중지
systemctl stop docker
필자는 centos7 환경에서 docker를 설치했으며
root 계정으로 위의 명령어들을 수행하면 된다.
docker를 설치하기 전 기존에 설치되어 있던 패키지를 update하고 yum util을 추가로 설치했다.
설치되어 있는 패키지가 많다면 다소 시간이 소요된다
필자의 경우 304 패키지에 대해 수행되었으며 약 10여분 가량 소요됐다.
docker 설치자체는 그리 오래 걸리지 않는다.
docker 설치 후에는 enable 명령어를 통해 service 등록을 해야 OS 재기동시 자동으로 시작되며
처음 enable을 수행하였다면 심볼릭링크가 만들어졌다는 메시지를 확인할 수 있다.
status 명령어를 통해서는 docker가 정상적으로 active (running) 상태인지를 확인한다.
설치된 docker의 기본 명령어는 위와 같다.
pull은 docker 이미지를 다운로드하고
create는 다운받은 docker 이미지를 가지고 container를 만들고
run은 docker 이미지를 다운로드함과 동시에 container를 만들고 기동해주는 명령이다.
commit은 container를 다시 docker 이미지로 전환해주는 명령어이다.
docker의 life cycle을 보면 위의 명령어가 좀 더 쉽게 다가온다.
pull로 다운받은 docker 이미지를 create 명령어로 container화 하고
다시 container를 commit 명령어로 docker 이미지화 할 수 있다.
Docker Hub Container Image Library | App Containerization
We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy
hub.docker.com
docker 이미지는 위 사이트를 방문하여 다운받을 수 있다.
db2, mysql등 글로벌 프로그램의 이미지는 각벤더사에서 공식적으로 제공하고 있다.
docker의 장점은 바로 이런 이미지를 통해 별도의 설치과정 없이 원하는 프로그램을 쉽게 구동할 수 있다는 점이다.
Centos7의 docker 이미지를 검색해봤다.
각 이미지별로 신뢰도는 어떤지, 몇 번의 다운로드가 발생했는지등 세부적인 정보와 필터가 가능하다.
이렇게 검색된 docker image는 어떻게 다운받을 수 있을까?
docker 설치시 docker 이미지 repository를 추가했던게 기억나는가?
빨간부분 명령어를 수행하면 docker 이미지 repository에서 검색하고 그 이미지를 다운로드 할 수 있다.
검색했던 docker 이미지를 다운받고 해당 docker 이미지를 확인해봤다.
다운받은 docker 이미지는 docker images 명령어로 확인 가능하다.
Tag 항목에는 해당 docker 이미지의 버젼이 나타나며 해당 docker 이미지가 만들어진 날짜와 크기도 확인 가능하다.
다운받은 docker 이미지는 create 명령어를 통해 container화 할 수 있다.
필자가 다운받은 docker 이미지의 이름은 couchbase/centos7-systemd 이고 container 이름은 centos7으로 설정했다.
docker create -it --name centos7 couchbase/centos7-systemd
--name 옵션 뒤에는 container의 이름을 지정할 수 있고 container의 바탕이 되는 docker 이미지의 이름을 인자로 주어야한다.
만약 다운받은 docker 이미지의 tag 부분이 latest, 즉 최신이 아니라면 docker 이미지 이름뒤에 :(세미콜론)과 함께 버젼을 명시해야 한다.
예를 들어 docker 이미지의 이름이 test이고 tag부분의 값이 latest가 아닌 0712라고 한다면 해당 이미지를 가지고 container를 만들기 위해서는 아래처럼 해야한다.
docker create -it --name testContainer test:0712
container의 기본 사용 명령어는 위와 같다.
추가적인 명령어는 docker --help로 확인하거나 아래의 사이트를 방문하자.
https://docs.docker.com/go/guides/
Redirecting…
docs.docker.com
생성했던 centos7이라는 docker container를 기동해보자.
docker start centos7
centos7이라는 container를 기동하기 전엔 docker ps 명령어로 상태확인이 불가능하나
centos7 container를 기동하고 나면 docker ps 명령어로 상태확인이 가능하다.
기동된 container에 bash 명령어를 통해 접속해 봤다.
docker exec -it centos7 bash
hostname이 host 머신의 client에서 container의 19e942a23595로 변경된 것을 확인 할 수 있다.
(container의 hostname은 임의로 생성된다.)
별도의 OS나 프로그램 설치 없이 docker 이미지를 다운받고
그 이미지를 container화 해서 하나의 가상화 환경구축이라니.
얼마나 획기적이고 간편한가?
VM 환경이라면 먼저 OS를 설치하고 사용하려는 프로그램을 다운받아 설치해야하는 그 과정을 모두 생략한셈이다.
예를 들어 필자가 설치한 docker 이미지가 centos7이 아니라 스타크래프트 이미지였다면
해당 스타크래프트 docker 이미지만 다운받고 container를 만들어 구동하면
바로 스타크래프트를 할 수 있다는 의미이다.
dokcer 이미지별로 차이가 있겠지만
docker 이미지 크기를 줄이는게 보다 효율적이기 때문에 기본적인 패키지들이 설치되어 있지 않는 경우가 많다.
따라서 일반적인 수준으로 사용을 하기 위해서는 아래 명령어들로 기본적인 패키지들을 설치해야한다.
다시 말하지만 docker 이미지마다 기본 설치되어 있는 패키지들이 상이하기 때문에
이부분은 docker 이미지를 다운받기 전에 미리 확인을 해야한다.
yum install -y libaio net-tools wget openssh-clients openssh-server lsof vim sysstat gdb procps
그럼 docker 환경은 장점만 존재할까?
아니다. docker 환경 역시 단점이 존재한다.
간단하게 docker의 장단점을 정리하면 아래와 같다.
- 장점
- docker 이미지가 있다면 별도의 설치과정없이 빠르게 실행가능하다.
- 동일 docker 이미지를 가지고 container를 다르게 생성할 수 있어 다양한 테스트가 가능하다.
- 비용절감 및 작업 준비 시간이 획기적으로 줄어든다.
- 최소의 리소스로 최고의 이식성을 보여준다.
- 스케일링이 용이하다.
- 단점
- host 머신에 종속적이다.
- host 머신(베어 메탈) 정도의 퍼포먼스가 나오지 않는다.
- GUI 환경을 구성하기가 어렵다.
docker의 단점 중 하나가 바로 host에 종속적이라는 사실이다.
이 사실은 위의 사진 하나로도 충분히 확인이 가능하다.
host 머신의 디스크 정보와 container 실행 후 접속하여 확인한 디스크 정보가 동일하다.
뿐만 아니라 이렇게 container 안에 존재하는 모든 파일과 디렉토리는
host 머신의 /var/lib/docker/overlay2/XXXXXXXXXXXXXXX 경로에 마운트되어 관리된다.
기본적으로 host의 /var/lib/docker 경로가 docker의 기본 설치 위치이다 보니
host의 /(루트 경로)의 용량이 부족하면 diskfull이 발생할 수 있다.
diskfull 방지를 위해 VirtualBox에 추가 디스크를 생성하고 host 머신에 연결해주자.
필자는 virtualbox 환경이지만 vmware 환경도 매우 유사하며 간단한 구글링으로 디스크를 추가하는 방법을 찾을 수 있다.
디스크를 추가 한후 host 머신을 재기동 해 디스크가 추가되었는지 확인해보자.
fdisk -l 명령어로 확인 할 수 있다.
필자의 경우 host에 물린 디스크가 두 장이라 sdb라는 이름으로 디스크가 확인되었다.
만약 디스크가 여러장이라면 sdb가 아니라 sde, sdf 등등 알파벳 순서로 확인된다.
추가된 디스크가 확인되었다면 새로운 파티션으로 구성해줘야 한다.
fdisk /dev/sdb 명령어로 새로운 파티션을 구성할 수 있다.
/dev/sdb는 필자의 환경이고 위에서 언급한것처럼 디스크가 여러장일 경우 /dev/sde, /dev/sdf 일 수 있다.
추가된 디스크를 새로운 파티션으로 구성하는 순서는
n -> p -> 1 -> 2048 -> 엔터 -> w 순이다.
각 단계에서 default 값이 확인되면 그냥 엔터만 쳐도 무방하다.
파티션까지 구성이 끝이 났다면 이번에 해당 파티션을 host 머신에 마운트 시켜줘야 한다.
필자는 /docker_data 라는 경로에 새로운 디스크를 마운트시켰다.
마운트 명령어는 다음과 같다.
-t 다음에 오는 옵션은 파일형태이다.
mkfs -t ext4 /dev/sdb1
mount -t ext4 /dev/sdb1 /docker_data
이제 디스크 추가의 마지막 단계인 fstab에 등록하는 과정이다.
OS를 재기동해서 시작시 자동으로 마운트를 하기 위해서는 fstab에 등록해야하며
UUID를 이용해 등록해준다.
UUID는 blkid 명령어로 확인이 가능하고 fastab에는 아래 패턴으로 기입해주면 된다.
UUID=[blkid로 확인된 새로 추가된 디스크의 UUID] 마운트포인트 파일형태 defaults 1 2
ex) 필자의 환경
UUID=bb811489-ecfa-4edd-88e7-ac00c361582e /docker_data ext4 defaults 1 2
새롭게 추가된 공간을 docker의 기본 설치공간으로 사용하기 위해서는 파일을 생성해줘야한다.
centos7 기준 /etc/docker 위치로 이동하여 daemon.json 파일을 생성한다.
{
"graph": "/docker_data"
}
daemon.json 파일에는 graph 항목 다음에 큰 따옴표로 기본 저장위치를 기입해주면 된다.
필자는 위에서 만든 /docker_data 경로를 기본 저장위치로 지정했다.
host 머신을 재기동하거나 docker 서비스를 재시작하면 위처럼 Docker Root Dir이 변경되었음을 확인 할 수 있다.
docker를 재시작하는 방법은 host OS를 재기동하거나 아래 명령어로 가능하다.
systemctl stop docker
systemctl start docker
docker 기본 저장소를 변경한 후 docker를 실행해 docker images 명령어를 수행하면 아무것도 보이지 않는다.
저장소 변경전에 다운받았던 이미지들은 변경전 저장위치에 남아있기 때문인데
cp 명령어를 통해 변경한 경로로 복사해 주면 된다.
cp명령어로 복사할 경우에도 docker 서비스를 중지하고 복사해야 한다.
복사 후에 docker를 재기동해 docker images, docker ps -a 명령어로 확인하면
저장소 변경전에 다운로드했던 이미지와 생성했던 container가 확인된다.
docker container의 경우 재시작될 때마다 DHCP 방식으로 IP를 할당받기 때문에 자주 변경된다.
이 부분도 간단하게 docker network를 추가해 고정 IP 방식으로 설정할 수 있다.
#기존 network 목록 확인
docker network ls
#docker network 추가 (static_IP는 network 이름으로 변경 가능)
docker network create --gateway 172.30.0.1 --subnet 172.30.0.0/24 -d bridge static_IP
#추가된 network 목록 확인
docker network ls
#현재 다운받은 docker 이미지 목록 확인
docker images
#다운받은 docker 이미지를 바탕으로 container 생성하며 IP를 172.30.0.11로 지정
#IP와 container name은 변경 가능하며 --net 옵션뒤의 network 이름은 윗단계에서 생성한 network 이름과 동일해야 함
docker create -it --net static_IP --ip 172.30.0.11 --name centos7_StaticIP couchbase/centos7-systemd
#고정IP를 부여 받은 새로운 container 확인 (필자 환경에서는 centos7_StaticIP)
docker ps -a
#새로 생성된 container의 IP 정보 확인
docker inspect centos7_StaticIP |grep IP
--name 옵션 뒤의 값은 필자가 임의로 지정한 값으로 변경이 가능하며
static_IP라는 network 이름과 부여된 고정 IP 172.30.0.11도 변경 가능하다.
오늘은 요즘 IT업계의 핫트렌중 하나인 docker에 대해서 알아봤다.
필자도 처음 접하고 공부하느라 많이 부족하지만
docker를 처음 접하는 이들에게 많은 도움이 되었으면 좋겠다.
그럼 끝.
'IT Information' 카테고리의 다른 글
[리원아빠] Synology NAS에 ipkg 설치하기 및 설치 오류 해결 (4) | 2022.07.27 |
---|---|
[리원아빠] NAS를 하드 드라이브처럼 iSCSI로 연결하기 (2) | 2022.07.25 |
[리원아빠] VPN 정의와 종류, 순위 알아보기 (14) | 2022.06.02 |
[리원아빠] 간단한 1password 아이디, 패스워드 동기화 방법 (20) | 2022.03.27 |
[리원아빠] 패스워드 관리 끝판왕 1password 구독제 무료 사용 방법 (16) | 2022.03.23 |