Nginx란?
경량 웹 서버로 클라이언트로부터 요청 받았을 때, 요청에 맞는 정적 파일을 응답해주는 HTTP 웹 서버로 활용됨
서버의 부하를 줄일 수 있는 로드 밸런서로 활용되기도 함
Event-Driven 구조로 동작하기 때문에 한 개 or 고정된 프로세스만 생성하여 사용하고, 비동기 방식으로 요청들을 concurrency하게 처리함
Dokerfile 구성 & 옵션
FROM ubuntu:18.04 # FROM: 어떤 이미지를 기반으로 할지 설정
MAINTAINER LYJ <~~@kookmin.ac.kr> # MAINTAINER: 이미지 작성자 정보
RUN apt-get update # RUN: 이미지에서 스크립트나 명령 실행
RUN apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
RUN chown -R www-data:www-data /var/lib/nginx
VOLUME ["/data", "/etc/nginx/site-enabled", "/var/log/nginx"] # VOLUME: 데이터를 호스트에 저장하도록 설정
WORKDIR /etc/nginx # WORKDIR: 명령을 실행할 디렉토리 설정
CMD ["nginx"] # CMD: 컨테이너가 시작되었을 때 스크립트나 명령 실행
EXPOSE 80 # EXPOSE: 호스트와 연결할 포드 번호 설정
EXPOSE 13000
# ENTRYPOINT: 컨테이너가 시작되었을 때 스크립트나 명령 실행(docker run에서 처리 방식이 다름)
# ADD, COPY: 이미지에 파일 추가
# USER: 명령을 실행할 사용자 계정 설정
# ONBUILD: FROM으로 이미지가 사용될 때 실행할 명령 설정
Dockerfile을 활용한 image 생성
# docker build --tag hello:0.1 . (Dockerfile이 존재하는 위치)
# docker images (docker image list. 다운로드 받은 image 목록 출력)
컨테이너 생성하기
# docker run --name hello-nginx -d -p 13000:80 -v /root/data:/data hello:0.1
- -d: datached mode (백그라운드 모드)
- -p: 호스트와 컨테이너의 포트를 연결
- -v: 호스트와 컨테이너의 디렉토리를 연결
- -e: 컨테이너 내에서 사용할 환경변수 설정
- --name: 컨테이너 이름 설정
- --rm: 프로세스 종료시 컨테이너 자동 제거
- -it: -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션
- --network: 네트워크 연결
# docker ps (실행중인 컨테이너 확인)
# docker ps -a (모든 컨테이너 확인)
- CONTAINER ID: 컨테이너 생성시 지정되는 임의의 컨테이너 ID (앞의 12자리만 출력)
- IMAGE: 컨테이너 생성시 사용된 이미지 이름
- COMMAND: 컨테이너 시작되면 실행될 명령어
- CREATED: 컨테이너가 생성된 기간
- STATUS: 컨테이너 상태 (UP: 실행중, Exited: 중지됨, Pause: 일시중지)
- PORTS: 컨테이너가 오픈한 포트와 호스트에 연결 상태
- NAMES: 컨테이너 고유 이름, 중복 불가능, 변경 가능
Docker 컨테이너 세부 정보 확인
컨테이너의 세부정보 확인 (image 등)
# docker inspect hello-nginx
# FireFox web browser에서 http://127.0.01:13000 접속 확인
Docker 기타 명령어
(이미지 히스토리 확인)
# docker history hello:0.1
(컨테이너에서 호스트로 파일 복사)
# docker exec -it hello-nginx /bin/bash (컨테이너 접속)
# docker cp hello-nginx:/etc/nginx/nginx.conf ./
(컨테이너에서 변경된 파일 확인)
# docker diff hello-nginx
(컨테이너의 변경 사항을 이미지로 저장)
# docker commit hello-nginx hello:0.2
Docker hub login
# docker login (username, password 입력)
Docker image tag
(docker image 파일 태그 걸기)
# docker tag [image name][docker hub id]/[repository name]:[tag name]
# docker image
Docker hub image push
# docker push [docker hub id]/[repository name]:[dockerfile name]
Docker hub image pull
(docker hub에 올라가 있는 다른 웹 서버 image pull)
# docker pull ~~
Docker hub container 실행
# docker run -p 3000:3000 [image ID]
# FireFox web browser에서 서버 접속 (http://127.0.0.1:3000/coin)
'2023_국민대 > AI 개발 환경의 이해' 카테고리의 다른 글
[Git] Git, Github (0) | 2023.06.09 |
---|---|
[Docker] Docker 환경 웹서버 구축 (0) | 2023.06.05 |
[Linux] Docker 개발 환경 (0) | 2023.04.16 |
[Linux] Docker (0) | 2023.04.16 |
[Linux] 웹 서버 구축 Apache (0) | 2023.04.15 |