[docker]1. 도커커맨드 - CIL/ mount

호빵·2024년 8월 16일

docker

목록 보기
1/4
post-thumbnail
💡 도커(Docker)이야기는 많이 들었는데 정확히 뭘하는지 몰라서 한번 정리하면서 실습까지 해보려고 한다.

1. 도커(Docker)란?

가상머신이 편하긴 하지만 OS가 포함된 독립적인 컨테이너 이기때문에 용량이 커지면서 무겁고 느리다.

그래서 게스트 OS를 설치하지않고 서버 운영에만 필요한 프로그램과 라이브러리와 실행파일만 따로 설치하고 게스트 OS자원은 호스트와 공유하여 용량을 줄여 가볍고 빠르게 할수있도록 하는 컨테이너 기반 오픈소스 가상화 플랫폼이다.

도커를 사용하면 OS환경설정,언어,라이브러리,시스템 도구 등 설치된 환경을 그대로 이미지로 빌드할 수있다.

(ex. java, node.js , python 등 다양한 언어와 프레임워크를 사용한 서비스들은 각기 다른 배포 방법을 가지고있는데 도커를 사용하여 패키징시 동일한 배포 프로세스를 갖게된다.)

<차이점>

1-1. Docker

  • 이미지 : 프로그램, 라이브러리 소스 설치하여 파일로 만든것
  • 컨테이너 : 이미지를 실행한 상태

2. Docker 실습

  1. 설치하기 (macOS)

    맥에서는 https://docs.docker.com/desktop/install/mac-install/ 에서 Docker.dmg 다운받아서 설치하면된다.

  1. 이미지 생성하기(pull)Docker desktop으로 편하게 대시보드 형식으로 볼수 있지만 명령어로 실습을 해봤다.
    1. 이미지 다운 (sudo : 현재 계정에서 root권한을 빌리는것)
      • ubuntu image를 생성하는것이다. (이미지는 굉장히 많다.)
  2. 이미지 목록 출력

3.이미지를 컨테이너로 생성한뒤 실행(run)

run <옵션> <이미지 이름> <실행할 파일> —name8081컨테이너 이름>

  1. 호스트의 포트와 컨테이너의 포트를 연결하기(port forwarding)

  • docker 사용시 Host와 Container가 독립적으로 있기때문에 호스트 포트와 컨테이너 포트를 연결하고 외부에 노출해줘야하는데 이를 port forward라고 한다.
  • docker run --name [name] -p [호스트포트]:[컨테이너포트] 작성하여 컨테이너를 생성하고 포트를 연결해주면 아래와 같이 docker desk에서 연결된점을 볼수있고, 웹서버에 8081 호스트 입력시 포트가 연결된걸 볼수있다.

❗ 이제 내가 forward한 포트로 접속하면 연결된 container포트의 index.html 파일을 열어보여주는데 우리는 container를 수정하여 사용할수 있어야한다.
  1. Container 수정하기

docker exec [OPTIONS] container command [arg..]

  • docker exec : 실행
  • OPTIONS : 실행할 컨테이너 이름
  • ARG : 명령어 입력어
  • -it : 터미널과 컨테이너와 지속적으로 연결할때씀

  • /usr/local/apache2/htdocs(공식 doc메뉴얼을 확인해보면 해당 도커파일이 어디있는지 나와있다) 목록을 보면 index.html이 있는지 확인할수있다.
  • apt install nano 로 텍스트 편집기를 설치 (안해도됨)

  • nano index.html 로 들어가면 해당 컨테이너안의 파일을 수정할수 있게 되었다!

<수정 후>

❗ 만약에 container가 사라지면? 내가 열심히 작성한 소스코드가 없어지는데 컨테이너가 안없어지도록 만드는것또한 도커의 장점이 사라지는것 그래서 호스트 파일시스템에 작성하면 컨테이너 소스코드에 반영하여 컨테이너가 삭제되더라도 호스트 파일이 남아있기때문에 문제가 없도록 하면 개발하는것에 좀 더 안정적으로 할수있을것이다.
  1. 컨테이너 폴더와 호스트 폴더 연결하기

Docker volume은 컨테이너와 호스트 운영체제 간에 데이터를 공유하거나 저장하기 위한 기능

파일시스템이나 디렉토리를 호스트 시스템의 특정 경로와 연결하여 데이터를 저장하고 관리할 수 있도록 해준다

Docker 생명주기와 관계없이 데이터를 영속적으로 저장할수있다.

![**volume mount 와 bind mount**]

volume mount 와 bind mount

6-1. 바인드 마운트(bind mount)

  • 개발및 테스트 환경에서 사용되며, 개발자가 로컬 파일 시스템에 직접 접근해야할때 유용하다.
  • docker run -v 호스트경로:컨테이너경로 -v옵션을 사용해서 호스트경로는 시스템에서 경로이고 컨테이너 경로는 내부에서의 경로를 의미하여 컨테이너가 해당 경로에 접근해서 데이터를 읽고 쓸수있다.
    • -p 8888:80 : 호스트 8080포트와 컨테이너 80포트를 매핑
    • -v(volume) : 호스트경로와 컨테이너 경로를 연결

6-2. 볼륨 마운트(volume mount)

  • Docker엔진이 관리하는 볼륨을 사용하여 컨테이너와 호스트간의 데이터를 공유한다.
  • Docker엔진에서 관리되기때문에 컨테이너 간에도 공유할수 있다.
  • 데이터 관리 및 보존이 필요한경우 유용하다
  1. 볼륨 생성 , 조회

    <생성>

    docker volume create 볼륨이름

    <기본 조회>

  • Mountpoint : 해당 볼륨이 어디 경로에 생성 되었는지 확인가능
  1. 볼륨(Volume) 마운트 하기

docker run -v 볼륨이름:컨테이너 마운트 경로

볼륨이 컨테이너 내에서 마운트되는 경로를 나타낸다

0개의 댓글