Docker란?
컨테이너 기반의 오픈소스 가상화 플랫폼
다양한 환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램 배포 및 관리를 단순하게 한다.
컨테이너란?
컨테이너는 개별 소프트웨어의 실행에 필요한 실행환경을 독립적으로 운용할 수 있도록 기반 환경 또는 다른 실행환경과의 간섭을 막고, 실행의 독립성을 확보해주는 운영체계 수준의 격리 기술입니다.
애플리케이션을 실제 구동 환경으로부터 추상화할 수 있는 논리 패키징 메커니즘을 제공한다.
💡 두 개의 소프트웨어가 동일한 라이브러리를 사용하지만 버전 또는 운영체제가 다를 경우 도커를 이용하여 간단하게 해결할 수 있다.
컨테이너는 이미지를 실행한 상태이고, 추가되거나 변하는 값은 컨테이너에 저장됩니다.
이미지란?
컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있다.
상태 값을 가지지 않고 변하지 않는다.
같은 이미지에서 여러 개의 컨테이너 생성 가능
컨테이너의 상태가 바뀌거나 삭제되어도 변하지 않는다.
💡 이미지는 컨테이너 정보를 가지고 있기 때문에 용량이 크다. 만약 파일 하나가 추가돼서 이미지가 변경되어야 한다면 굉장히 비효율적이다. → 이런 문제로 layer라는 개념을 사용한다.
docker layer
이미지는 여러개의 읽기 전용 layer로 구성되고, 파일이 추가되거나 수정되면 새로운 layer가 추가된다.
web app 이미지에서 web app source 파일을 수정했다면 web app source 만 다운로드하면 된다.
컨테이너 실행 옵션들
docker 명령어
컨테이너 목록 확인 docker ps [option] [컨테이너 id]
컨테이너 중지 docker stop [option] CONTAINER [컨테이너 id]
이미지 목록 확인 docker images [option]
이미지 다운로드 docker pull [option] 이미지명:[tag|@digest]
이미지 삭제 docker rmi [option]
Dockerfile
💡 Dockerfile의 한줄한줄은 레이어 형태로 저장되기 때문어 RUN을 줄이면 레이어가 줄어들고, 캐시도 효율적으로 관리할 수 있다.
FROM : 어떤 이미지로부터 이미지를 생성할지 지정해줌
RUN : 명령어 실행 지시자
&& : 여러 명령어를 이어서 실행하기 위한 연산자
\ : 명령어를 여러줄에 작성하기 위한 문자
WORKDIR : 디렉토리 변경
ENV : 컨테이너 실행 환경에 적용되는 환경변수의 기본값을 지정하는 지시자
EXPOSE : 가상머신에 오픈할 포트 지정
CMD : 컨테이너에서 실행될 명령어 지정
# moniwiki 모니위키 도커파일
FROM ubuntu:14.04
RUN apt-get update &&\\
apt-get -qq -y install git curl build-essential apache2 php5 libapache2-mod-php5 rcs
WORKDIR /tmp
RUN \\
curl -L -O <https://github.com/wkpark/moniwiki/archive/v1.2.5p1.tar.gz> &&\\
tar xf /tmp/v1.2.5p1.tar.gz &&\\
mv moniwiki-1.2.5p1 /var/www/html/moniwiki &&\\
chown -R www-data:www-data /var/www/html/moniwiki &&\\
chmod 777 /var/www/html/moniwiki/data/ /var/www/html/moniwiki/ &&\\
chmod +x /var/www/html/moniwiki/secure.sh &&\\
/var/www/html/moniwiki/secure.sh
RUN a2enmod rewrite
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
EXPOSE 80
CMD bash -c "source /etc/apache2/envvars && /usr/sbin/apache2 -D FOREGROUND"
[Docker] - [DOCKER] Docker 이해하고 사용하기 (2)