도커 컨테이너 내에 데이터를 저장하면, 컨테이너의 소멸과 함께 데이터도 운명을 같이한다. 그래서 데이터를 저장하고, 컨테이너간 데이터를 공유할 수 있는 방법들이 있다.
등이 그것인데, 오늘은 이 셋의 특징을 알아보고 Docker volume을 사용해 볼 것이다.
Docker volume은 host disk의 일정 부분을 Docker에 할당하고 컨테이너가 storage를 관리한다. 할당된 disk를 사용하므로 당연히 컨테이너가 죽어도 데이터는 살아있다.
여기서 Docker processor가 아닌 host가 수정하는건 금지되어있다. 따라서 보안성이 높다. 다른 컨테이너들도 volume에 access가 가능하다.
bind amount방식은 hostPC에 있는 파일 또는 폴더에 컨테이너가 직접 access하는 방식이다. 따라서 당연히 host는 그 내용을 변경, 수정할 수 있다. bind amount같은 경우는 따로 command가 없고 Dockerfile이나 .yml파일에 명시해야 한다.
Linux환경에서만 동작한다. RAM을 fileSystem처럼 쓰는것으로, 휘발성이므로 임시적으로 빠르게 사용할때만 쓰자.
이제 예시로 volume을 만들고 jenkins를 연동시켜 확인해볼 것이다.
환경
$ docker create volume myvol //myvol이란 이름의 volume 생성
docker volume ls로 잘 만들어졌는지 확인해보자.
잘 만들어졌다.
insepct명령어를 통해 세부정보를 확인할 수도 있다.
$ docker volume inspect myvol
이제 jenkins image를 도커허브에서 pull 해오자.
$ docker image pull jenkins/jenkins:lts //lts버전으로 pull
열심히 가져오고있다!
image가 잘 받아진걸 확인할 수 있다.
이제 컨테이너를 실행시켜보자.
$ docker run -p 8080:8080 -p 50000:50000 -v myvol:/var/jenkins_home jenkins/jenkins:lts
8080과 8080, 50000과 50000으로 외부/내부 포트를 매핑 해주고 myvol을 /var/jenkins_home에 연결한다.
그럼 이제 쭉쭉 실행 하다가...
이런 text가 나오는데, admin password로 조금 뒤 필요하니 copy해놓자.
좀 오래걸린다...
이제 8080포트로 접속해보면 위와 같은 창을 만날 수 있는데,
아까 copy해놓은 password를 입력하도록 하자.
왼쪽선택
더 오래 걸린다
입력해주자.
넘어가자
성공적으로 연동되었다.
새로운 item을 클릭하고 test라는 이름으로 freestyle project를 만들었다.
오늘은 volume에 관한 포스팅이므로 shell에 ls -al만 입력해 주었다.
이제 apply 후 저장을 누르고, project를 실행해보자.
잘 나왔다.
이제 container간 volume을 공유해보자.
$ docker run --name jenkins2 --detach -p 8081:8080 -p 50001:50000 -v myvol:/var/jenkins_home jenkins/jenkins:lts
위와 똑같은데,
jenkins2라는 이름을 설정해주고, 포트매핑만 조금 다르게 해주었다.
그리고 같은 볼륨(myvol)을 설정해주었다.
이제 8081 포트로 접속해보면,
두 개의 컨테이너가 하나의 볼륨을 공유하고있는걸 볼 수 있다.