Docker

»

Docker

도커는 리눅스 컨테이너 기술을 기반으로하는 오픈 소스서비스 입니다

도커를 통해 애플리케이션 실행 환경을 코드로 작성할 수 있으며 OS를 격리화하여 관리합니다

리눅스 컨테이너란?

Linux 기반의 기술중 하나로 필요한 라이브러리와 애플리케이션을 모아서 마치 별도의 서버처럼 구성한 것을 말합니다

컨테이너를 이루는 네트워크 설정과 환경 변수 등의 시스템 자원은 각 컨테이너가 독립적으로 소유합니다

  1. 프로세스의 구획화
  • 특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스 할 수 있습니다.
  • 컨테이너 안에서 실행되는 프로세스는 다른 컨테이너의 프로세스에게 영향을 줄 수 없습니다.
  1. 네트워크의 구획화
  • 기본으로 컨테이너 하나에 IP 주소가 할당되어 있습니다.
  1. 파일 시스템의 구획화
  • 컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있습니다. 그래서 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있습니다.

도커 이용하기

도커 이미지는 다음과같이 이루어져있습니다

Registry_Account/Repository_Name:Tag
  • 레지스트리(Registry)
    • Docker Hub : https://hub.docker.com/
    • 도커 이미지를 관리하는 공간입니다.
    • 특별히 다른 것을 지정하지 않는다면, 도커 허브(Docker Hub)를 기본 레지스트리로 설정합니다.
    • 레지스트리는 Docker Hub, Private Docker Hub, 회사 내부용 레지스트리 등으로 나뉠 수 있습니다.
  • 레포지토리(Repository)
    • 레지스트리 내에 도커 이미지가 저장되는 공간입니다.
    • 이미지 이름이 사용되기도 합니다.
    • GitHub의 레포지토리와 유사하게 생각하시면 됩니다.
  • 태그(Tag)
    • 같은 이미지라고 할지라도 버전 별로 안의 내용이 조금은 다를 수 있습니다.
    • 해당 이미지를 설명하는 버전 정보를 주로 입력합니다.
    • 특별히 다른 것을 지정하지 않는다면 latest 태그를 붙인 이미지를 가져옵니다.

예제로 보는 도커이미지

docker/whalesay의 이미지 불러오기

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

// 예제
docker image pull docker/whalesay:latest

이미지 리스트 출력

docker image ls

컨테이너_이름 을 가진 컨테이너를 실행

docker container run --name 컨테이너_이름 docker/whalesay:latest cowsay boo
  • {container} run
    • 컨테이너를 실행합니다.
  • [OPTIONS]
    • -name : 컨테이너의 이름을 할당합니다.
  • [COMMAND]
    • command는 초기 컨테이너 실행 시 수행되는 명령어입니다.
    • cowsay : 컨테이너 실행 시 cowsay 명령어를 호출합니다. node를 호출하듯 이용합니다.
  • [ARG..]
    • boo : COMMAND인 cowsay에 넘겨질 파라미터입니다.

모든 컨테이너의 리스트를 출력

docker container ps -a
  • {container} ps : 컨테이너의 리스트를 출력합니다.
  • a : Default 로는 실행되는 컨테이너지만 종료된 컨테이너를 포함하여 모든 컨테이너를 출력합니다.

컨테이너_이름이라는 이름을 가진 컨테이너를 삭제

docker container rm 컨테이너_이름
  • {container} rm : 컨테이너를 지칭해서 삭제합니다. 컨테이너를 명시할 때는 ps 명령을 통해 확인할 수 있는 NAMES 혹은 CONTAINER ID 를 사용합니다.
  • 컨테이너 리소스를 지워보고 다시 실행하면서 cowsay 명령어에 매개변수를 변경해보세요.
    • ex) codestates
    • ex) 자신의 이름

images의 용량 확인 후 도커 이미지 삭제

# docker image  용량 확인
docker image ls

# docker/whalesay 이미지 지우기
docker image rm docker/whalesay

세가지 방법을 한번에 하기

docker container run --name 컨테이너_이름 --rm docker/whalesay cowsay boo
  • {container} run : 컨테이너를 실행합니다. 이미지가 없다면 이미지를 받아온 뒤(pull) 실행합니다.
  • -rm : 컨테이너를 일회성으로 실행합니다. 컨테이너가 중지되거나 종료될 때, 컨테이너와 관련된 리소스를 모두 제거합니다.

컨테이너에 파일 복사

CP(Copy) : 호스트와 컨테이너 사이에 파일을 복사(Copy)

  1. 깃헙 레포지토리 복사
  2. docker container run으로 실행

    docker container run --name 컨테이너_이름 -p 818:80 httpd
    

Docker 이미지 만들기

Volume : 호스트와 컨테이너 사이에 공간을 마운트(Mount)

배포 및 관리가 유용하며 이전에 작업했떤 내용을 다시 수행하지 않아도 됩니다

  1. docker container commit 명령을 이용

    // 구동한 Docker Container를 커밋
    docker container commit 컨테이너_이름 my_pacman:1.0
    
    // docker images로 확인할 수 있습니다
    
    // 생성된 이미지를 웹서버로 구동
    docker run --name my_web2 -p 900:80 my_pacman:1.0
    
    // localhost:900으로 웹서버 동작하는지 확인합니다
    
  2. Docker Image 빌드를 위한 파일인 Dockerfile로 만드는 방법

    • Dockerfile 공식 문서
      • Dockerfile 을 만들고, Dockerfile 대로 이미지를 build 하는 방법입니다.
    • Dockerfile 은 이미지 파일의 설명서라고 생각하면 좋습니다.
    • Dockerfile로 pacman 이미지를 생성해 보세요.

      • COPY 구문을 잘 살펴보세요. Dockerfile은 어디에 생성되어야 할까요?
      FROM httpd:2.4 # 베이스 이미지를 httpd:2.4 로 사용합니다.
      COPY ./ /usr/local/apache2/htdocs/ # 호스트의 현재 경로에 있는 파일을 생성할 이미지 /usr/local/apache2/htdocs/ 에 복사합니다.
      

      [코드] 현재 경로에 있는 파일을 생성할 이미지 경로에 복사하는 명령의 Dockerfile 소스 코드입니다.

    • docker build 명령은, Dockerfile로 도커 이미지 파일을 생성합니다.

       # --tag 는 name:tag 형식으로 이미지를 생성할 수 있습니다.
       # 지정한 경로에 있는 Dockerfile을 찾아서 빌드합니다.
       docker build --tag my_pacman:2.0 . # "."을 명령어에 꼭 포함해야 합니다!
      

      [커맨드] docker build는 Dockerfile로 도커 이미지 파일을 생성합니다.

    • 생성된 이미지를 이용해 901 포트에 웹 서버 구동

      docker run --name my_web3 -p 901:80 my_pacman:2.0
      

      [커맨드] 901 포트에서 웹 서버로 이미지를 구동합니다.

    • 127.0.0.1:901 혹은 localhost:901 을 통해 웹 서버가 작동하고 있는지 확인합니다.

    참조

    도커 컨테이너 데이터 볼륨 관리

    볼륨 관련 글

    [Docker] 개념 정리 및 사용방법까지.

    도커 개념 및 명령어

    [Docker] Container 생성

    도커 컨테이너 생성