아파치 서버에 접속했을 때 원하는 화면이 나타나게 하려면, index.html 파일을 만들면 된다. 먼저 메모장을 열어 아래의 내용을 입력하자.
<html>
<meta charset="utf-8"/>
<body>
<div>안녕하세요. 크롬입니다.</div>
</body>
</html>
여기서는 index.html 파일을 바탕화면에 저장해두기로 한다. 이제 호스트의 index.html 파일을 복사해 컨테이너에 붙여 넣는 방법에 대해 실습해보자. 파일을 복사 붙여넣기 하기 위해 사용하는 명령은 아래와 같다.
docker cp {원본 경로} {컨테이너 이름}:{컨테이너 경로}
① 아파치 컨테이너 생성
docker run --name apa000ex19 -d -p 8080:80 httpd
② 웹 브라우저를 통해 아파치 서버에 접근
③ index.html 파일 복사 붙여넣기
cd Desktop // 바탕화면으로 이동
docker cp ./index.html apa000ex19:/usr/local/apache2/htdocs/
④ 웹 브라우저를 통해 아파치 서버에 접근
이번에는 반대 방향으로 복사를 진행해 볼 것이다. 원활한 실습을 위해 기존에 작성했던 호스트의 index.html 파일을 삭제한다.
① 컨테이너 파일을 호스트에 복사하기
Desktop>docker cp apa000ex19:/usr/local/apache2/htdocs/index.html .
② 바탕화면에서 index.html 파일 확인하기
③ 컨테이너 종료 및 삭제
docker ps -a
docker stop apa000ex19
docker rm apa000ex19
리눅스 환경에 이미 익숙한 사람들은 볼륨과 마운트의 개념을 이미 잘 알고 있을 것이므로, 간단하게만 설명하고 넘어가겠다.
① 볼륨
② 마운트
도커에서 스토리지 마운트의 종류네는 크게 두 가지가 있다. 바로 볼륨 마운트와 바인드 마운트이다.
① 볼륨 마운트
② 바인드 마운트
비록 스토리지는 컨테이너 외부에 위치하지만, 컨테이너를 실행할 때에는 마치 컨테이너 안에 스토리지가 있는 것처럼 동작해야 한다. 그러므로 스토리지의 경로가 컨테이너의 경로와 연결되도록 설정하는 것이 필요하다. 이는 바탕화면의 바로가기 아이콘을 통해 다른 곳에 위치한 프로그램을 마치 바탕화면에 프로그램이 있는 것처럼 사용하는 원리와 비슷하다.
스토리지를 마운트할 때에는 마운트할 볼륨(또는 스토리지)을 먼저 생성해야 하며, docker run 커맨드에 -v 옵션을 사용하여 스토리지를 마운트할 수 있다.
바인드 마운트에 사용되는 커맨드는 아래와 같다.
docker run -v {스토리지 경로}:{컨테이너 마운트 경로}
바인드 마운트를 하려면, 바인드 마운트에 사용할 폴더를 먼저 생성해주어야 한다.
① 폴더 생성
② 아파치 컨테이너 실행
cd /new_folder
docker run --name apa000ex20 -d -p 8080:80 -v .:/usr/local/apache2/htdocs/ httpd
③ 웹 브라우저를 통해 아파치 서버에 접근
④ new_folder 안에 index.html 파일 배치
⑤ 웹 브라우저를 통해 아파치 서버에 접근
⑥ 컨테이너 종료 및 삭제
docker ps -a
docker stop apa000ex20
docker rm apa000ex20
볼륨 마운트에 사용되는 커맨드는 아래와 같다.
docker volume create 볼륨 이름 // 볼륨 생성
docker volume inspect 볼륨 이름 // 볼륨 상세 정보 확인
docker volume rm 볼륨 이름 // 볼륨 삭제
docker run -v {볼륨 이름}:{컨테이너 마운트 경로} // 볼륨 마운트
볼륨 마운트를 하려면, 볼륨 마운트에 사용할 볼륨을 먼저 생성해주어야 한다. apa000vol1이라는 이름의 볼륨을 생성하기로 하자.
① 볼륨 생성
docker volume create apa000vol1
② 아파치 컨테이너 실행
docker run --name apa000ex21 -d -p 8080:80 -v apa000vol1:/usr/local/apache2/htdocs/ httpd
③ 볼륨 상세 정보 확인
docker volume inspect apa000vol1
docker container inspect apa000ex21
④ 컨테이너 종료 및 삭제
docker ps -a
docker stop apa000ex21
docker rm apa000ex21
⑤ 이미지 삭제
docker image ls
docker rmi httpd
⑥ 볼륨 삭제
docker volume ls // 볼륨 이름 확인
docker volume rm apa000vol1