본문 바로가기
Development, Architecture/Docker, k8s

[Docker] 도커 기본 개념 정리

by ggyongi 2022. 7. 17.
반응형

참고 도서: 그림과 실습으로 배우는 도커&쿠버네티스

저자: 오가사와라 시게타카

옮긴이: 심효섭

출판사: 위키북스

 

------- 목차 ---------------------

도커란?

설치 및 사용하기

컨테이너 사용하기

컨테이너 활용하기

  • 파일복사
  • 볼륨마운트
  • 컨테이너로 이미지 만들기
  • 컨테이너 이미지 등록

----------------------------------

도커란?

핵심 성질: 환경을 격리할 수 있음

<장점>

독립된 환경→ 애플리케이션 여러개 띄우기 가능

이미지 생성→ 개발환경 배포가 쉬워짐, 환경 이동이 쉬움

컨테이너에 커널을 포함시킬 필요가 없음→ 가볍다

<단점>

리눅스용 소프트웨어 밖에 지원하지 않음

<용도>

팀원들에게 동일한 개발환경 제공

 

설치 및 사용하기

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

 

 

 

 

 

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글