반응형
1. Apache Web Serve 구축
- Ubuntu image를 다운 받아서, Container로 띄우고 Apache 설치하기
2. 도커 이미지 생성
< 시나리오 >
- Docker hub 에서 nginx image로 불러와서 , container로 동작시킨다.
- Docke hub에서 nginx image 찾기
- docker pull nignx:lastest 로 nginx 이미지 다운로드
- docker image를 통해 지금 가지고 있는 이미지들을 확인한다.
- Docke hub에서 nginx image 찾기
- Nginx의 기본 index.html을 수정한다. (hello!)
- nginx 컨테이너 실행
- nginx:latest 이미지를 기반으로 mynginx 컨테이너 실행
docker run --name mynginx -d nginx:latest
- 컨테이너 내부에 들어가서 index.html 수정
docker exec -it mynginx bash echo "hello!" > /usr/share/nginx/html/index.html exit
- nginx 컨테이너 실행
- 저장하여 새로운 commit_test:1.0 image로 만든다.
docker commit mynginx commit_test:1.0
- Commit_test:1.0 image 새로운 container 를 띄운다.
- 현재 host 80포트는 Apache2가 쓰고 있어서 8080으로 연결
docker run --name mynginx2 -d -p 8080:80 commit_test:1.0
- 현재 host 80포트는 Apache2가 쓰고 있어서 8080으로 연결
- 새로운 Index.html을 host에서 cp 한다. (hi!)
echo "hi!" > index.html docker cp index.html mynginx2:/usr/share/nginx/html/index.html # 확인 docker exec -it mynginx2 cat /usr/share/nginx/html/index.html # or 웹사이트에서
- 해당 container 를 그대로 image 화 시킨다. Committest.2.0
docker commit mynginx2 commit_test:2.0
3. 실습 : private registry에 image push/pull
- Kube-node2 VM에 Docker 설치
- Docker 설치된 상태에서 ‘완전한 복제’
- Docker 설치된 상태에서 ‘완전한 복제’
- Docker Hub에서 Ubuntu 이미지 다운로드
- 사설 레포지트리 저장소 생성
- https://www.notion.so
docker run -d -p 5000:5000 --restart=always --name registry registry:2
- Ubuntu 컨테이너 실행 후 index.html 변경
- (외부 port 연결은 안함)
- 참고 (Run 옵션)
d
→ 컨테이너가 백그라운드에서 실행됨.i
→ 컨테이너가 입력을 받을 수 있도록 유지됨.t
→ 가상 터미널이 할당됨.
- “kube-node2입니다”
- 컨테이너 내 로케일이 한글 설정이 안되어 있어서 설치해줌
apt update && apt install -y locales locale-gen ko_KR.UTF-8 export LANG=ko_KR.UTF-8 export LC_ALL=ko_KR.UTF-8
- index.html 변경 후 확인
- (외부 port 연결은 안함)
- 컨테이너를 새로운 이미지로 Commit (kn2_n:1.0)
- 이미지 태그 설정 (tag)
- Private Registry로 push하려면, DockerRegistry (VM3)의 IP를 태그에 포함해야 해야 한다.
- 내 VM의 IP을 확인해보자.
- 127.0.0.1 : 루프백 주소 (localhost)
- 172.20.4.112 : VM의 외부 네트워크 인터페이스
- (다른 VM끼리의 통신)
- 172.17.0.1 : Docker Bridge 네트워크
- (도커 컨테이너 간의 내부 네트워크 용도)
- 이미지 태그 설정하기
- 레지스트리 컨테이너는 기본적으로 5000번 포트 사용함.
docker tag kn2_n:1.0 172.20.4.112:5000/kn2_n:1.0
- 레지스트리 컨테이너는 기본적으로 5000번 포트 사용함.
- Private Docker Registry에 Push
- /etc/docker/daemon.json 설정
(Private Registry를 insecure-registries로 설정)- 🚨 주의 : Docker는 기본적으로 보안 강화를 위해 HTTPS(SSL/TLS)로 인증된 레지스트리와만 통신한다.
- 즉, 기본 설정으로는 docker push나 docker pull 시 오류가 발생하기 때문에
Docker 데몬이 HTTPS가 아닌 HTTP로 통신하도록 변경시켜준 것
{ "insecure-registries": ["192.168.1.8:5000"] }
sudo nano /etc/docker/daemon.json
- docker info를 통해 Insecure Registries를 확인해보자.
- 이미지 Push 하기https://www.notion.so
docker push 172.20.4.112:5000/kn2_n:1.0
- /etc/docker/daemon.json 설정
- Private Registry에서 이미지가 정상적으로 올라갔는지 확인
-
[추가] Kube-node1에서 Pull을 땡겨보자…- 려고 했으나, CPU 99.9 %가 돌고 자꾸 컴퓨터가 튕겨서 포기
4. 볼륨 - 공유
- Host (VM) 에 있는 directory (vol) 에 index2.html를 넣는다.
- --name <이름> : 컨테이너 이름 지정
- p 8001:80 : Ubuntu의 8001 포트 (외부) 를 컨테이너의 80 포트 (내부) 에 매핑
- -v ~/vol:/usr/share/nginx/html : ~/vol 디렉토리를 Nginx의 웹 루트(/usr/share/nginx/html)에 마운트
- Nginx container를 하나 실행시키고 , 볼륨을 공유하여 nginx container에서 index2.html를 제공하도록 함
# Host에서 index.html 파일 생성 cd /home/jung/html echo "index.html in /home/jung/html" > index.html # Nginx 컨테이너 실행 (호스트 폴더를 마운트) docker run -d --name nginx_practice -p 8881:80 \ -v ~/vol:/usr/share/nginx/html \ # host /vol이랑, 내부 컨테이너 폴더 마운트 nginx # Nginx 컨테이너 내부 접속 후 파일 확인 docker exec -it host_V /bin/bash ls /usr/share/nginx/html
- 컨테이너 내부에도 파일이 공유된 것을 알 수 있다. (마운트)
5. docker volume과 여러 container 연결
- 도커 볼륨에 이름을 주고 생성한다.
docker volume create myvol
- Container 공유 공간에 파일 생성 및 확인
- Container 각각의 공간설정 후 host의 myvol과 마운트
- Container 각각의 공간설정 후 host의 myvol과 마운트
- 파일 공유 확인
- 각자의 공유 공간(host의 /myvol과 마운트된)에 각자 공유 file을 생성해준다.
- n2_v에서 n1_v, n3_v에 있던, hellofromn1과 byefromn3을 확인해본다.
- Host에서 Docker Volume의 저장소를 찾아서 확인한다.
- 각자의 공유 공간(host의 /myvol과 마운트된)에 각자 공유 file을 생성해준다.
6. Dockerfile 작성하기
- 작업에 용이하게 하기 위해 Nginx 디렉토리를 따로 생성
mkdir ~/nginx-custom cd ~/nginx-custom
index.html
을 하나 생성한다.echo "<h1>Welcome to My Custom Nginx Page</h1>" > index.html
- 현재 디렉토리에 Dockerfile을 생성한다.
- 작업 디렉토리를 Nginx의 기본 웹 루트(
WORKDIR
)로 설정.- 컨테이너 내부에서 작업할 기본 디렉토리를
/usr/share/nginx/html
로 설정 - 이후의 모든 명령(
COPY
,RUN
등)은 이 디렉토리 기준으로 실행
- 컨테이너 내부에서 작업할 기본 디렉토리를
- 현재 디렉토리의 index.html을 컨테이너 내부
WORKDIR
에 복사⇒ host에 있던 html을 내부 html에 덮어쓰는 작업
⇒ COPY 명령이 WORKDIR 기준으로 실행
- 작업 디렉토리를 Nginx의 기본 웹 루트(
- Nginx는 기본적으로 /usr/share/nginx/html/index.html을 웹 페이지로 제공하므로, 이 위치에서 파일을 변경하면 Nginx가 자동으로 해당 파일을 제공
# Step 1: Nginx 최신 이미지 사용
FROM nginx:latest
# Step 2: 작업 디렉토리를 Nginx의 기본 웹 루트로 설정
WORKDIR /usr/share/nginx/html
# Step 3: 현재 디렉토리의 index.html을 컨테이너 내부에 복사
COPY index.html /usr/share/nginx/html/index.html
- 도커 엔진은 현재 디렉토리의 Dockerfile이라는 이름의 파일을 인식하여 image를 생성
- 즉, docker build . → 현재 디렉토리(.)를 빌드 컨텍스트로 사용한다.
- 도커 이미지를 빌드한다.
docker build -t my-nginx-custom ./
- 도커 컨테이너를 실행한다.
docker run -d --name my-nginx -p 9999:80 my-nginx-custom
- 웹사이트에서 확인
반응형