1. nginx 설치
- 웹 서버 소프트웨어로, 가벼움과 높은 성능을 목표로 한다. 웹 서버, 리버스 프락시 및 메일 프락시 기능이 있음.
1) 이미지 저장
[+] 도커 사이트에서 이미지 다운로드
docker pull nginx
** 추후 업데이트/추가로 받을 경우 증분값만 추가로 받는 패치와 같다.( 중복된 값은 제외된다)
[+] nginx 이미지 다운로드 확인
2) 이미지 컨테이너로 올리기
[+] nginx 컨테이너 확인
- 로컬에서 실행되는 웹서버이기 때문에 포트번호가 나온다
- 실행되었을 때는 컨테이너 리스트 확인할 때에는 나오지 않는다.
[+] 백그라운드로 실행
-d 옵션을 통해
[+] 둘다 동시 실행
- 현재 콘솔창에서 실행되는 것과 백그라운드로 실행
-둘 다 접속되도록 포트는 가지고 있다.
3) 도커(Docker) : 포트 포워딩 설정(포트 맵핑하기)
- 도커 컨테이너 내부에서 동작하는 서버로 컨테이너 외부에서 접속할 수 있도록 포트 포워딩(Port forwarding) 설정 또는
포트 맵핑(Port mapping)을 해야 한다.
- 즉, 외부에서 접속하려면 먼저 OS에 접속하고 OS에서 해당 컨테이너 포트로 포트 리다이렉트 해줘야 한다.
==> On-Demand(요청에 의한) 상용 클라우드 Amazon ANS, Microsoft Azure, google GCP는 현재 Ubuntu 노드와 같은 역할
==> Ubuntu 노드 안에 무수한 컨테이너를 생성해서 운영하듯이 ANS등 안에서 무수한 가상머신들을 운영하고 잇는 것이다.ㅈ
==> 예로, AWS에서 가상머신을 선택할 때, 리소스 등을 선택하고, 지역을 선택하게 되는데 이는 CDN 네트워크의 개념이 들어 있는 것으로 자신의 위치에 가까운 클라우드 서버를 지정하여 더 빠르게 서비스를 지원하게 된다.
CDN : 오리진 서버가 있고, 지역마다 복제 서버를 가지고 있고 서비스받는 사람의 가까운 지역으로 연결해 준다. (애니캐스트 개념??)
[+] nginx 실행 및 접속 확인
docker container run --name webserver -d -p 8080:80 nginx
- 실행 후 로컬 8080포트로 접속한 것과 칼리 리눅스에서 아이피 주소로 접속
- 지금은 컨테이너 독자적인 IP주소를 가지고 있지 않아서 외부에서 접속할 때 우분투를 통해 리다이렉트 되지만, IP주소를 추가한다면
독자적으로 접속 할 수 있다.
[+] 하나의 nignx를 포트를 여러 포트 지정하기
docker run -p 8080:80 -p 3000:80 -d nginx:latest
4) 컨테이너 내리기 (서비스 내리기)
[+] 도커의 모든 컨테이너 내리기
docker -rm -f $(docker ps -aq) ##docker ps -aq 도커 ID 확인
5) 컨테이너 이름 설정 및 재지정
- 처음 만들 때 지정 및 재지정 가능하다.
docker container run --name nginx_ser_01 -d -p 8080:80 nginx ## 만들 때 지정
docker rename gallant_herschel ngunx_ser_01 ## 변경
[+] 이미지 태그 변경
- 기존 태그를 사용자가 알아볼 수 있도록 수정도 가능하다.
- 기존의 이미지를 복제하여 태그를 다는 것이라고 할 수 있다.
[+] 가독성있게 데이터 출력
-docker ps로 출력 시 가독성 있게 출력
- 일회성으로 변경
docker ps -format="ID\t{{.ID}}\nNAME\t{{.Names}}\nIMAGE\t{{.Image}}\nPORTS\t{{.Ports}}\nCOMMAND\t{{.Command}}\nCREATED\t{{.CreatedAt}}\nSTATUS\t{{.Status}}\n"
- 지속적으로 사용하기 위해 환경변수 추가
export FORMAT="ID\t{{.ID}}\nNAME\t{{.Names}}\nIMAGE\t{{.Image}}\nPORTS\t{{.Ports}}\nCOMMAND\t{{.Command}}\nCREATED\t{{.CreatedAt}}\nSTATUS\t{{.Status}}\n
[+] 확인
docker ps --format=$FORMAT
2. 도커 서비스 볼륨
- Ubuntu 노드 안에 Docker Image 컨테이너가 실행되고 있고, 각각의 컨테이너는 OS나 APPs 이미지를 가지고 있다.
- Docker Volume은 노드 안의 컨테이너 <-> 컨테이너, 노드 <-> 컨테이너 사이를 연결해서 데이터, 파일, 그리고 폴더 등을 공유한다.
- 하나의 컨테이너에 들어있는 도커 이미지에서 실 행되어 나온 결과 데이터나 MairaDB나 MySOL과 같은 도커에서 작업한 데이터는
- 해당 컨테이너 가 프로세스이기 때문에 사라지면 이들 데이터도 함께 사라지므로 컨테이너 <->컨테이너, 노드 <-> 컨테이너 간의
데이터 처리외부 호스트(노드)의 HDD 공간을 공유하게 해서 처리하는 것이 매우 중요하다.
1) nginx index파일 만들기
[+] 메인 페이지 만들기
[+] Web사이트 만들기
mkdir Desktop/Website ## 웹 페이지를 저장할 디렉터리 생성
echo "<h1> HELLO Docker and Volumes_test </h1>" > Desktop/Website/index.html ## index 메인 파일 생성
cd Desktop/Website/ ## 폴더로 이동
docker run --name Website3 -v $(pwd):/usr/share/nginx/html:ro -p 8080:80 -d nginx:latest ##서비스 실행
[+] 서비스 확인
- 웹페이지가 잘 들어가지는지 확인.
- history -> clear recent history.. 을 선택하여 쿠키를 삭제 후 확인
[+] 컨테이너 내부에서도 화인
- 컨테이너에 접속(exec) 후 /usr/share/nginx/html/ 아래 인덱스 파일이 있다.
- 하지만, Read-only로 작성했기 때문에 읽기밖에 안된다.
3. 컨테이너 간 데이터 이동
[+] 웹 서버 복사
- Website3의 컨테이너를 복제하여, 또 다른 웹 사이트를 구성할 수 있다.
## 이미 구성된 웹사이트를 복사하여 서비스할 수 있다.
docker run --name Website8 --volums-from Website3 -p 8081:80 -d nginx:latest
- 접속되는 메커니즘은 아래 이미지와 같다.
4. Dockerfile
- 컨테이너에 도커 이미지를 추가하는 방법으로 지금까지 hub.docker.com에 미리 만들어져있는 이미지를 pull을 사용해서 가져오는
방법이 있었다.
- Dockerfile은 DSL(Domain Specific Language)로 특정 도커를 위한 도커 이미지를 정의하고, 이런 이미지를 생성하는 작업을
Dockerizing이라고 한다. CI 과정이다.
- 사용할 명령을 배치파일 식으로 만들어 놓아
1) 도커 이미지 만들기
[+] Ubuntu OS의 이미지를 생성하기
ROM ubuntu:18 ## 불러올 이미지_명
RUN apt update ## apt 리포지터리 업데이트
RUN apt -y install git ## git 설치
[+] moniwiki 이미지 다운로드하여 컨테이너로 올리기
git clone https://github.com/nacyot/docker-moniwiki.git ##바로 사용가능한 모니 위키
docker build -t paul-moniwiki:latest . ##도커 이미지 올리기
docker run -p 9999:80 -d paul-moniwiki ## 컨테이너 올리기 및 서비스 시작
[+] 패치기능
- ADD 문을 사용하여, 이미지의 추가할 부분이 있을 때 추가할 수 있다.
'소소한 IT이야기 > 클라우드' 카테고리의 다른 글
[Cloud] 쿠버네티스 명령어 정리-002 (1) | 2023.03.23 |
---|---|
[Cloud] Docker 설치 및 구성 (feat. ubuntu22.04) (1) | 2023.03.13 |
[WinSER_06] Windows 배포(무인 서버) 구성 (feat. AD, DHCP, DNS) (0) | 2023.03.07 |