참고 도서: 그림과 실습으로 배우는 도커&쿠버네티스
저자: 오가사와라 시게타카
옮긴이: 심효섭
출판사: 위키북스
------- 목차 ---------------------
도커란?
설치 및 사용하기
컨테이너 사용하기
컨테이너 활용하기
- 파일복사
- 볼륨마운트
- 컨테이너로 이미지 만들기
- 컨테이너 이미지 등록
----------------------------------
도커란?
핵심 성질: 환경을 격리할 수 있음
<장점>
독립된 환경→ 애플리케이션 여러개 띄우기 가능
이미지 생성→ 개발환경 배포가 쉬워짐, 환경 이동이 쉬움
컨테이너에 커널을 포함시킬 필요가 없음→ 가볍다
<단점>
리눅스용 소프트웨어 밖에 지원하지 않음
<용도>
팀원들에게 동일한 개발환경 제공
설치 및 사용하기
https://docs.docker.com/desktop/install/mac-install/
mac용 도커 데스크탑 설치 ← (가상 리눅스 환경+도커 엔진)
*64비트 운영체제에서만 작동
도커 명령어 구조: docker <커맨드> <대상> ex) docker container run penguin
*이때 <커맨드>에 속하는 container run은 상위 커맨드(container)와 하위 커맨드(run)으로 다시 구분됨.
대표적인 상위 커맨드
container - 컨테이너 조작 + start/stop/create/run/rm/ls...
image - 이미지 조작 + pull/rm(remove)/ls(list)/build
volume - 볼륨 조작 + create/inspect/ls(list)
network - 네트워크 조작 + connect/disconnect/create/inspect...
컨테이너 사용하기
docker run --name apa000ex1 -d -p 8080:80 httpd
docker stop
docker rm
docker ps : 실행 중인 컨테이너 목록 출력(-a 옵션은 정지 컨테이너 포함 출력)
*MySQL 컨테이너 실행: docker run --name mysql000ex7 -dit -e MYSQL_ROOT_PASSWORD=myrootpass mysql
-dit: 백그라운드에서 실행 및 키보드를 통해 컨테이너 내부 파일 시스템 조작
-e MYSQL_ROOT_PASSWORD: 루트 패스워드 지정
컨테이너 활용하기
파일 복사 (docker cp 원본경로 복사할경로)
호스트 → 컨테이너 : docker cp <호스트경로> <컨테이너이름>:<컨테이너경로> ex) docker cp /Users/사용자명/Documents/index.html apa000ex19:/usr/local/apache2/htdocs/
컨테이너 → 호스트 : docker cp <컨테이너이름>:<컨테이너경로> <호스트경로>
볼륨 마운트
볼륨: 스토리지 한 영역을 분할한 것
마운트: '연결하다' → 대상을 운영체제 또는 소프트웨어 관리하에 두는 일
도커의 스토리지 마운트의 2가지 종류: 볼륨 마운트, 바인드 마운트
=> 볼륨 마운트는 도커 엔진의 관리하에 있어 사용자가 파일 위치를 신경쓸 필요없음. 하지만 무조건 도커 컨테이너를 경유하여 볼륨에 접근해야 함
=> 바인드 마운트는 도커가 관리하지 않는 영역 어디라도 파일을 둘 수 있음.
볼륨마운트 커맨드 docker run (생략) -v <볼륨이름>:<컨테이너마운트경로> (생략)
바인드마운트 커맨드 docker run (생략) -v <스토리지실제경로>:<컨테이너마운트경로> (생략)
* 컨테이너마운트경로는 컨테이너의 소프트웨어가 콘텐츠를 저장하는 경로가 되는 경우가 많음
ex)아파치의 경우 'ur/local/apache2/htdocs', MySQL의 경우 '/var/lib/mysql'
- 볼륨 마운트 실습
1. 마운트할 볼륨 생성: docker volume create apa000vol1
2. run 커맨드로 아파치 컨테이너 실행
docker run --name apa000ex21 -d -p 8091:80 -v apa000vol1:/usr/local/apache2/htdocs httpd
3. 볼륨 상세 정보 확인(inspect 커맨드 사용)
docker volume inspect apa000vol1
4. 실행 결과를 통해 볼륨의 상세 정보를 확인할 수 있다.
- 바인드 마운트 실습
1. 마운트 원본이 될 폴더/디렉토리 만들기 : apa_folder라는 이름으로 생성해보자.
2. run 커맨드로 아파치 컨테이너 실행
docker run --name apa000ex20 -d -p 8090:80 -v /Users/사용자명/Documents/apa_folder:/usr/local/apache2/htdocs httpd
현재는 경로에 파일이 없어 localhost:8090에 접속하여 초기화면을 확인해도 'Index of /'라는 메시지가 대신 출력됨
3. 마운트된 폴더 디렉토리에 index.html 파일 배치
4. 다시 localhost:8090에 접근하면 만들어준 index.html 파일의 내용이 출력되는지 확인
컨테이너로 이미지 만들기
컨테이너를 이용하여 이미지를 만들 수 있다.
만든 이미지로 똑같은 컨테이너를 만들 수도 있고, 다른 컴퓨터 또는 서버에 이동시킬 수 있다.
만드는 방법은
1. commit 커맨드를 이용하여 컨테이너를 이미지로 변환하는 방법
ex) docker commit <컨테이너이름> <새로운이미지이름>
docker commit apa000ex22 ex22_original1
2. Dockerfile 스크립트로 이미지를 만드는 방법이다.
ex) docker build -t <생성할이미지이름> <재료폴더경로>
docker build -t ex22_original2 /Users/taki/apa_folder
*재료폴더 경로 안에는 도커파일, 재료(index.html 등)가 준비되어야 한다.
* Dockerfile의 주요 인스트럭션
FROM <이미지이름> : 토대가 되는 이미지를 지정
COPY <원본경로> <대상경로> : 이미지에 파일이나 폴더 추가
RUN <리눅스명령어> : 이미지를 빌드할 때 실행할 명령어를 지정
* Dockerfile 예시
FROM httpd
COPY index.html /usr/local/apache2/htdocs
컨테이너 이미지 등록
이미지를 업로드하기 위해서는 이미지에 태그를 부여해야 한다.
태그형식: 레지스트리주소(도커허브는 ID)/리포지토리이름:버전
ex)비공개레지스트리의 경우: zoozoo.comm/nyapacchi:13
ex)도커 허브의 경우: zoozoousagi/nyappacchi:13
이미지에 태그를 부여하여 복제하는 커맨드
docker tag apa000ex22 zoozoo.coomm/nyapacchi:13
이미지를 업로드하는 커맨드 : docker push 레지스트리주소/리포지토리이름:버전
docker push zoozoo.coomm/nyapacchi:13
댓글