Posts server 2
Post
Cancel

server 2

Dockerfile

이미지 생성하는 방법

개발한 애플리케이션을 컨테이너화할 때 이전까지는 아래의 방법과 같이 진행.

1.아무것도 존재하지 않는 이미지(ubutu, Centos 등)로 컨테이너를 생성

  1. 애플리케이션을 위한 환경을 설치하고 소스코드 등을 복사해 잘 작동하는 것을 확인
  2. 컨테이너를 이미지로 커밋(commit)

이 방법을 사용하면 어플리케이션이 동작하는 환경을 구성하기 위해 일일이 패키지를 설치하고 코드를 복사해야함.
물론 직접 컨테이너에서 애플리케이션을 구동해보고 이미지로 커밋하기 때문에 정확하다는 장점 있음.

docker는 위 과정을 손쉽게 기록하고 수행할 수 있는 build 명령어를 제공.
하나의 파일에 설치해야하는 패키지, 소스코드, 명령어 등을 build 명령어를 통해 실행하면 docker가 한줄씩 실행하며 편한 환경을 구성할 수 있음.
결론적으로 Dockerfile을 사용하면 위의 1,2,3 같은 복잡한 순서를 실행해야하는 번거러움을 줄일 수 있고 빌드 및 배포를 자동화할 수 있음.



Dockerfile 문법

FROM
생성할 이미지의 베이스가 될 이미지.
FROM 명령어는 Dockerfile을 작성할 때 반드시 한번 이상 입력해야 함.
이미지 정보는 run을 할때 사용한 이미지와 동일.

<이미지 이름="">:<태그> 형식으로 작성.
ex) ubuntu:14.04


**MAINTAINER**
이미지를 생성한 개발자의 정보.


**LABEL**
이미지에 메타데이터를 추가.


**RUN**
도커이미지가 생성되기 전에 수행할 쉘 명령어.


**COPY**
COPY는 파일을 이미지에 복사.
- COPY src1 src2 ... dest - COPY ["src1", "src2", ..., "dest"]

**EXPOSE**
호스트와 연결할 포트 번호. Dockerfile의 빌드로 생성된 이미지에서 노출할 포트를 설정.
이것을 설정한다고 무조건 host와 바인딩되는 것은 아니며 단지 \*번 포트를 사용할 것임을 나타내는 것 뿐.
실제로 포트를 열기 위해서는 run 명령어에서 -p 옵션을 사용 해야 함.


**CMD**
컨테이너가 시작되었을 때 실행할 실행 파일 또는 셸 스크립트.
해당 명령어는 DockerFile내 1회만 쓸 수 있음.


**docker build . -t test**
이미지를 만들음.
.: Dockerfile이 저장된 경로
\-t: 이미지의 이름을 설정.


**docker run -it -p80:80 -p443:443 test**
만들어진 이미지를 활용하여 container를 만들음.
\-i: interactive(입출력)
\-t: tty(터미널) 활성화
*일반적으로 터미널 사용하는 것처럼 컨테이너 환경을 만들어주는 옵션*
--name [컨테이너 이름]: 컨테이너 이름을 지정할 수 있음. 안하면 랜덤으로 생성.
\-p[호스트포트번호:컨테이너포트번호]: 컨테이너의 포트를 개방한 뒤 호스트 포트와 연결.



## mariaDB 데비안 버스터에서는 mariaDB만을 지원.
mariaDB도 mysql을 기반으로 만들어졌기때문에 mysql 명령어와 완전히 호환.
php-mysql은 php에서 mysql에 접근할 수 있게 해주는 모듈.
php-mbstring은 2바이트 확장 문자를 읽을 수 있도록 해주는 모듈.(Mbstring is an extension of php used to manage non-ASCII strings.)



## php php-fpm 을 통해 nginx와 php를 연동시켜 우리의 웹 서버가 정적 콘텐츠 뿐만 아니라 동적 콘텐츠를 다룰 수 있도록 함.
- 정적 콘텐츠(static) - 변화가 없는 콘텐츠. - 보통 HTML, CSS, JS와 같이 미리 서버에 저장해두고 서버가 요청을 받으면 그저 응답만 해주면 되는 것들로 구성. - 이것은 곧 어느 사용자에게든지 동일하게 결과값을 보여주게 됨. - 동적 콘텐츠(dynamic) - 누가, 언제, 어떻게 서버에 요청했는지에 따라 결과값을 다르게 보여주는 형식. - 즉, 사용자가 맞춤형 콘텐츠를 제공 받음. - 예를 들면 유투브의 추천 영상, 이 콘텐츠를 제일 잘 활용하는 웹 서비스는 넷플릭스.


## autoindex autoIndex = true; means to respond with /path/index.html when /path/ is requested.
파일이 아닌 디렉토리를 가리키는 url에 대한 요청을 받았을 때는,
요청한 url에 대응되는 디렉토리 안에서 index.html 혹은 index.htm으로 이름 붙은 파일을 찾아 그 파일의 콘텐츠를 반환



## openssl ``` openssl req -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=KR/ST=Seoul/L=Seoul/O=BlahBlah/OU=CYM/CN=localhost" -keyout localhost.dev.key -out localhost.dev.crt //localhost.dev.key 와 localhost.dev.crt가 생성된다. ```` req : 인증서 요청 및 인증서 생성 유틸.
\-newkey : 개인키를 생성하기 위한 옵션.
\-keyout <키 파일="" 이름=""> : 키 파일 이름을 지정해 키 파일 생성.
\-out <인증서 이름=""> : 인증서 이름을 지정해 인증서 생성.
days 365 : 인증서의 유효기간을 작성하는 옵션.
\-nodes: 생략시 재부팅할때마다 수동으로 암호를 입력해야함
x509: X.509는 PKI에서 사용하는 표준 인증서 형식. self-signed SSL 인증서를 만들기 위해 사용. |사용시 표기|의미|내용| |-----------|----|----| |CN|Common Name|일반 이름(인증서 고유 이름).
대부분의 인증기관 CA에서는 SSL인증서 신청시에 도메인명을 CN으로 지정.| |O|Organization|기관명| |OU|Organization Unit|회사/기관 내의 ‘사업부, 부문, 부서, 본부, 과, 팀’ 정도.| |L|City/Locality|시/도| |S|State/County/Region|구/군| |ST|Street|나머지 상세 주소. (OV,EV 인증시에만 필요)| |C|Country|국가를 나타내는 ISO 코드를 지정. 한국은 KR, 미국은 US 등 2자리 코드|
This post is licensed under CC BY 4.0 by the author.