Docker 1. 환경구성,container,image,registry

skh951225·2023년 3월 13일
0

Docker

목록 보기
1/3

출처 : 따배도 1~5 (Youtube)

Container

container를 쓰는 이유

기존의 가상화 기술인 hypervisor를 사용하게되면 각 virtual machine에 OS를 따로 설치해줘야한다. 하짐나 container기술을 사용하게되면 OS를 따로 설치해주지 않아도 되서 쓸데없는 공간낭비를 줄일수 있다.
또한 container 기술을 사용하면 개발자가 만든 그대로 어디서든 돌아가고(환경설정의 수고를 안해도 됨) 확장/축소가 쉬워 MSA, Devops에 적합하다.

왜 리눅스에서 가능한가

container는 리눅스 커널의 기능을 가지고 만들어졌다. 독립된 공간을 형성하는 chroot, isolate 기능을 지원하는 namesapce, 필요한만큼의 HW를 지원하는 cgroup 을 사용하였다. windows, mac os 에서는 hypervisor 활성화하여 linux커널을 설치해서 그 위에 container기술을 사용해야한다.

VM, Xshell 을 통한 환경 구성

  • Virtualbox 에 NAT network를 10.100.0.1/24 로 구성하고 2개의 virtual machine을 생성하였다. [VM1(Ubuntu,10.100.0.105), VM2(Centos, 10.100.0.106)]
  • port forwarding을 통해 localhost:105 - 10.100.0.105:22(VM1), localhost:106 - 10.100.0.106:22(VM2)를 연결해 줬다.
  • etc/hostname의 hostname을 fully qualified domain name로 변경, etc/hosts 파일에 ubuntu, centos ip 주소를 모두 등록해 준다.
  • sudo passwd root를 통해 root 사용자의 passwd 를 변경해준후 su - 로 root 사용자로 변경한다.
  • systemctl set-default multi-user target = text 로그인으로 변경
  • apt-get update && apt-get install -y openssh-server curl vim tree : remote환경에서 접속할 수 있도록 ssh 설치, VM 의 snapshot기능을 활용
    dns&/ect/hosts, virtualbox에서 nat network로 network를 설정하면, virtual machine

    docker 설치

    https://docs.docker.com/engine/install/ubuntu/ 에서 설치 설치 방법에는 repository를 이용하는 방법, donwload후 직접 설치, Script를 이용한 설치가 있는데 repositry를 이용해 설치함 1. 요구 프로그램 설치, 2. 인증키 다운, 3. URL등록, 4. install의 과정을 가짐

    Container, Image

    docker image를 실행시키면 container가 된다. image는 여러개의 Layer를 가지며 각각 고유한 UUID(겹칠확률이 굉장히 적다)를 가진다. 이 이미지는 /var/lib/docker/overlay2에 저장된다.


    docker image를 생성하는 방법은 여러가지가 있다. 가장 간단한 방법은 미리 만들어진 image를 다운로드 받는것이다. docker hub에는 여러가지 image가 존재하여 그러한 image를 pull해서 쓸 수 있다. 2번째 방법은 dockerfile을 생성하고 docker build 명령어를 통해 생성하는 방법이다. 이 방법으로 원하는 이미지를 입맛대로 만들 수 있다.


    총 3개의 파일을 구성하였다 generator 폴더의 2개의 파일을 통해 random한 글을 생성하여 저장하는 기능을하고, webserver는 webserver이다. container를 생성할때(docker run) -v 옵션을 통해 local filesystem과 docker container 사이에 bind mount가 가능하여 generator를 통해 생성한 html 파일을 werserver가 사용할 수 있다. dockerfile의 VOLUME 명령어를 통해 하려고 해보았지만 dockerfile의 목적은 공유에 있기 때문에 local 환경에 영향을 받는 bind mount는 지원하지 않는다고 한다. dockerfile의 VOLUME은 container 내의 특정 디렉토리를 가지고 단순히 VOLUME을 생성하는 기능을 하고 VOLUME의 이름도 지정할 수 없다.
    ==========================================
    ~/webpage/generator/dockerfile==========
    ==========================================
    FROM debian
    RUN apt-get update \
    && apt-get install -y fortune
    COPY generator.sh /
    RUN chmod +x /generator.sh
    EXPOSE 80
    CMD ["bash", "generator.sh"]
    ==========================================
    ~/webpage/generator/generator.sh==========
    ==========================================
    mkdir /htdocs
    while :
    do
    	/usr/games/fortune > /htdocs/index.html
    	sleep 5
    done
    ==========================================
    ~/webpage/webserver/dockerfile========== 
    ==========================================
    RUN apt-get update \
    && apt-get install -y apache2
    EXPOSE 80
    CMD ["/usr/sbin/apache2ctl", "-DFOREGROUND"]
    dockerfile cmd vs entrypoint
    dockerfile에 VOLME으로 volume의 이름을 지정할 수 없는 이유

    docker registry

    docker registry :image를 저장하는 저장소
  1. docker hub : hub.docker.com
    docker login : docker hub에 로그인
    docker push : docker hub 에 push(계정이름/~ 의 형태만 push 할 수 있다. 그렇지 않은 이미지는 docker tag 이미지이름 계정이름/이미지이름 으로 복사해준 후 하면됨)
    docker search 키워드 로 hub에 저장된 image를 검색할 수 있다.
  2. private registry : 사내 image 저장소
    docker hub에서 registry 컨테이너를 통해 운영가능하다.
    $ docker run -d -p 5000:5000 --restart always --name registry registry:2
    로 container를 생성하면 localhost:5000/ubuntu:18.04,docker.example.com:5000/ubuntu:18.04로 image를 저장해야 push 할 수 있다. 이렇게 저장한 image는 localhost의 /var/lib/docker/volumes/???/_data/docker/registry/v2/repositories 에 저장된다. ??? docker inspect registry 의 volume의 이름을 보면 ???는 알 수 있다.

0개의 댓글