3 분 소요

Docker란?

리눅스에서 돌아가는 프로그램을 PC에서 동작할 수 있도록 제공하는 것

쉽고 (Dockerfile), 빠르게 (Container)


Container(컨테이너)란?

리눅스 컨테이너를 자체적으로 개발한 것

Linux Container란?

  1. 프로세스의 구획화

    특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 엑세스할 수 있다.

    컨테이너 안에서 실행되는 프로세스는 다른 컨테이너의 프로세스에게 영향을 줄 수 없다.

  2. 네트워크의 구획화

    기본으로 컨테이너 하나에 IP 주소가 할당되어 있다.

  3. 파일시스템의 구획화

    컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있다. 그렇기 때문에 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있다.

docker/whalesay

docker/whalesay는 레지스트리 계정, 레포지토리 이름, 태그 세 가지 정보로 구성되어 있다.

Registry_Account/Repository_Name : Tag

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

https://github.com/docker/whalesay ⇒ 해당 개발자 깃헙

Docker Hub

$ docker image pull docker/whalesay:latest : pull, 레지스트리에서 이미지 혹은 레포를 가져온다.

$ docker image ls : 이미지 리스트를 출력한다.

  • $ docker container run --name myName docker/whalesay:latest cowsay boo

    container run : 컨테이너를 실행한다.

    OPTION : —name : 컨테이너의 이름을 할당한다.

    COMMAND : cowsay : 컨테이너에서 cowsay를 호출한다.

    ARG.. : boo : COMMAND인 cowsay에 넘겨질 파라미터

$ docker container ps -a : container ps : 컨테이너의 리스트를 출력한다.

$ docker container rm myName : container rm : 컨테이너를 지칭해서 삭제한다. 컨테이너를 명시할 때는 ps 명령을 통해 확인할 수 있는 NAMES 혹은 CONTAINER ID를 사용한다.

$ docker image ls : docker image의 용량 확인

$ docker image rm docker/whalesay : docker/whalesay 이미지 지우기

  • 주로 사용하게 될 docker 명령어
    • docker image pull
    • docker image ls
    • docker container run
    • docker container ls
    • docker container rm
    • docker image rm
  • $ docker container run --name my_name --rm docker/whalesay cowsay boo

    container run : 컨테이너를 실행한다. 이미지가 없다면 이미지를 받아온 뒤 실행한다.

    —rm : 컨테이너를 일회성으로 실행한다. 컨테이너가 종료될 때 컨테이너와 관련된 리스소를 모두 제거한다.

  • $ docker image rm docker/whalesay

    image rm : 지정된 도커 이미지를 삭제한다.

    docker rmi : image rm과 같은 기능을 한다.

danielkraic/asciiquarium

  • $ docker container run -it --rm danielkraic/asciiquarium:latest

    -it : -i, -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션이다. 사용자와 컨테이너 간에 인터렉션이 필요하다면 해당 옵션을 사용한다. 본 예제에서는 지속적으로 출력되는 화면을 사용자가 보기 위해서 사용했다.

    cntl + c : 종료키


Docker CP, DockerFile

  • 웹 서버는 인터넷으로 사용자에게 정보를 제공하는 서버
    1. 웹 서버는 도커 컨테이너로 실행
    2. 웹 서버를 구성하는 파일은 여러분이 만들거나 가져온 파일 구성
  • 장점
    • 서버에 문제가 생기는 것을 호스트와 별개로 파악할 수 있다.
    • 문제가 생긴 서버를 끄고, 마치 공장초기화를 하듯 도커 이미지로 서버를 재구동하기 용의하다.
  • CP(Copy) : 호스트와 컨테이너 사이에 파일을 복사(Copy)
  • Volume : 호스트와 컨테이너 사이에 공간을 마운트(Mount)

httpd 웹 서버

도커이미지는 httpd(http daemon) 이다.

httpd(http daemon)은 Apache HTTP Server 를 실행할 수 있는 오픈소스 웹 서버 소프트웨어이다.

  1. $ git clone [https://github.com/codestates/pacman-canvas](https://github.com/codestates/pacman-canvas)
  2. $ docker container run --name my_web --rm -p 818:80 httpd

docker container run으로 httpd를 실행

rundocker container run

-p : 로컬(호스트)의 포트와 컨테이너와 포트를 연결한다.

  • httpd는 일정시간 연결 기록이 없으면 서버 가동이 중지된다.

    127.0.0.1:818 혹은 localhost:818 을 통해 웹 서버가 작동하고 있는지 확인

    127.0.0.1 과 localhost 를 이용하면 자신의 컴퓨터의 IP 주소로 Redirencting 할 수 있다.

    DNS 설정으로 인해 localhost 로 접속이 안되고 127.0.0.1 만 접속이 될 수 있다.

  1. docker container cp명령을 통해서 로컬(호스트)에 있는 파일을 컨테이너에 전달
    • docker container cp ./ my_web:/usr/local/apache2/htdocs/
  2. 127.0.0.1:818 혹은 localhost:818 에 접속해서 게임 서버가 구동되는지 확인

Docker 이미지 만들기

  • [docker container commit](https://docs.docker.com/engine/reference/commandline/container_commit/) 명령을 이용
    1. Docker Container 를 이미지로 만드는 방법

$ docker container commit my_web my_pacman:1.0

$ docker run --name my_web2 -p 900:80 my_pacman:1.0 : 생성한 이미지를 이용해서 900 포트에 웹서버를 구동

127.0.0.1:900 혹은 localhost:900 을 통해 웹 서버가 작동하고 있는지 확인

  1. Docker Image 빌드를 위한 파일인 Dockerfile 로 만드는 방법