목차
개요
도커 공식홈페이지에서 지원해주는 get_started Tutorial 파일을 가지고 도커를 다뤄보자!
본 포스팅은 아래의 도커 공홈에서 지원해주는 튜토리얼을 토대로 포스팅하였음
https://docs.docker.com/get-started/
컨테이너의 filesystem 이해하기
1. Ubuntu 컨테이너를 실행하고 data.txt 파일을 그 안에 생성한다.
우분투 컨테이너를 도커에 하나 만들어주는데 이때 쉘 명령어를 통해서 data.txt 파일을 생성하고 그 파일 내에 1부터 10000 사이의 랜덤한 숫자를 텍스트 파일 내에 저장하게 한다.
아래 에 bash -c 뒤에 "" 안에 쓰여있는 명령어가 위의 파일 생성과 내용등을 write하는 명령어이다. (&&는 줄바꿈을 해준다.)
docker run -d ubuntu bash -c "shuf -i 1-10000 -n 1 -o /data.txt && tail -f /dev/null"
2. 만들어진 컨테이너에서 data.txt 파일을 연다
cat 명령어를 통하여 위에 ps 를 통해 확인한 우분투의 CONTAINER ID로 컨테이너를 지정하고 그 안에서 txt 파일을 read 한다.
docker exec 컨테이너 ID cat /data.txt
그러면 나의 경우에는 랜덤 형성된 숫자인 869가 도출이 되는 것을 볼 수 있고 숫자보다 중요한것은
15488dc1fa0d ubuntu 컨테이너에는 data.txt 파일이 있다는 것이다.
3. 또 다른 우분투 컨테이너를 생성하고 안에 data.txt 파일이 있는지 확인한다.
docker run -it ubuntu ls /
data 파일이 존재하지 않는 것을 확인할 수 있다. 이후에 ps 명령어를 통해 현재 실행되고 있는 컨테이너들을 확인해보면
총 2개의 우분투 환경이 열려있고 이중 한군데에만 파일을 만들었을때에 파일이 존재하지 않는 우분투 파일에서 다른 컨테이너에 존재하고 있는 파일에 접근이 불가능 하다는 것을 확인할 수 있었다.
따라서 결론적으로는 둘중 하나에만 만든 Scratch space에 쓰여진 것이기 때문이다.
4. 다음 실습을 위해서 처음에 만든 컨테이너를 없애주자
docker rm -f <container-id>
volume mount 방식으로 getting-start 앱과 db 마운트 하기
getting-start내의 내용들은 도커 컨테이너의 파일시스템 내에 있는 /etc/todos/todo.db 파일 안에 SQLite DB 형식으로 저장이 되고 있다.
만일 이 데이터베이스 파일이 host에 남아있으면 도커를 정지해도 도커의 버전을 업데이팅 해도 도커가 새로 실행이 될때마다 호스트에 있는 데이터베이스 파일을 가져와서 도커에 Load 해주게 된다면 기존에 저장하였던 db들을 서비스에 바로 올릴수 있게 할 수 있다.
따라서 포스팅을 따로해서 설명하겠지만 볼륨 마운트 방식은 도커에서 볼륨을 생성하게 된다면 로컬에 특정한 경로에 Mount-point가 만들어져서 그 곳에서 각 도커 컨테이너에 연결되어있는 DB 등이 관리가 된다.
1. 도커를 통해서 todo-db라고 하는 볼륨을 만든다.
docker volume create todo-db
2. 만들어진 볼륨과 연결될 컨테이너를 정지하고 삭제해준다.
3. 연결될 컨테이너를 --mount 옵션을 이용하여 만들어놨던 volume mount 와 연결시킨다.
docker run -dp 3000:3000 --mount type=volume,src=볼륨 명,target=db가 저장될 위치 컨테이너 명
docker run -dp 3000:3000 --mount type=volume,src=todo-db,target=/etc/todos getting-started
4. 컨테이너가 켜지게 된다면 접속을 해서 항목 추가(db를 변동) 시켜본다.
http://localhost:3000/
5. 이후에 해당 컨테이너를 멈추고 제거한다.
docker rm -f <container-id>
6. volume 이 적용되었는지 확인하기 위해 컨테이너를 다시 시작한다.
docker run -dp 3000:3000 --mount type=volume,src=todo-db,target=/etc/todos getting-started
7. 다시 해당 포트에 접속하여 확인한다.
http://localhost:3000/
번외 : 도커가 volueme을 사용하여 DB를 저장할때 사용하는 로컬의 주소를 알기 위해서는
docker volume inspect <볼륨 명> 명령어를 사용하자
docker volume inspect todo-db
마무리
다음 포스팅에서는 Bind mounts 방식에 대해서 알아보자!
'Docker' 카테고리의 다른 글
튜토리얼(6) 멀티 컨테이너(Multi container apps) (0) | 2023.01.22 |
---|---|
튜토리얼(5) 바인드 마운트(Bind mount)로 소스 코드 업데이트 (0) | 2023.01.21 |
튜토리얼(3) Docker Hub를 통해서 이미지 배포, 다른 환경에서 실행 (0) | 2023.01.19 |
튜토리얼(2) 도커 이미지 업데이트, 도커 배포 삭제 (0) | 2023.01.17 |
튜토리얼(1) Dockerfile 생성, 컨테이너 이미지 만들기 (0) | 2023.01.16 |