2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

도커 파일, 컴포즈

2022. 10. 20. 15:26ㆍSK Rookies 9/review&practice

도커파일

수동으로 도커 컨테이너를 다운받아서 새로운 컨테이너 이미지로 생성 하는 것을, 스크립트를 이용하여 자동으로 이미지를 생성하는 방법 

Dockerfile - 약속된 파일명, 베이스 이미지(ubuntu) + 커스텀(RUN, ADD, COPY 등) = 최종 이미지

#FROM : 사용할 이미지 Pull과 같은 느낌
FROM ubuntu:14.04

#MAINTAINER : 만든사람 이름 적는 곳 (옵션)
MAINTAINER "boanproject"

#LABEL title : 이미지 라벨 붙이는 것 (옵션)
LABEL title "Web Application"

#RUN : 쉘 안에 들어가서 어떤 명령어를 할 지 순서대로 적는 것
#ADD : tar같은 압축파일을 풀어서 저장해줌	ADD test.tar
#COPY : 파일 복사	COPY test.txt
RUN apt-get update && apt-get -y install apache2 php5
RUN echo 'Docker Web Application' > /var/www/html/index.html
RUN echo '<?php phpinfo(); ?>' > /var/www/html/phpinfo.php

#80 포트를 여는 것!
EXPOSE 80

#작업 환경 - 후에 컨테이너 작업할 때 쉘로 들어가면 이 경로로 시작함
WORKDIR /var/www/html

#다 하고 최종적으로 아파치 프로세스 실행
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

공간

#도커파일이 있는 경로에서 실행해야 함!
# -t 도커파일이 있는 폴더이름
sudo docker build -t ubuntu_web .
#보통은 한개의 도커파일당 한개의 도커폴더로 관리하는 것이 좋다
#다양한 코드들을 폴더안에 넣고 컨테이너로 cp로 복사하기 용이하기 때문에
#만약 폴더안에 도커파일이 여러개면
sudo docker build -t ubuntu_web -f 도커파일이름

이미지 생성됨

#컨테이너에서 어떤 명령어를 했는지 다 나옴
sudo docker image history ImageName

image history

도커컴포즈

컴포즈를 하면서 Dockerfile의 수정이나 이미지 수정시 꼭 down시키고 이미지 삭제후 하기 안그럼 이미 있는 이미지로만 계속 생성해서 수정이 안됨

설치

sudo apt update
sudo apt install docker-compose
#설치확인
sudo docker-compose -v

정상 설치

docker-compose.yaml 만들기

이것 또한 폴더 관리 해주면 좋다.

db

version: '3.3'
services:
  mydb:
    image: mariadb:10.4.6
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: mypass
      MYSQL_DATABASE: wordpress
    volumes:
      - /home/kali/db-data:/var/lib/mysql
    ports:
      - "3306:3306"
#background로 실행하고 싶으면 -d (-itd에서 d랑 의미 동일)
sudo docker-compose up
#같은 폴더에서 치면 폴더가 관리하는 것만 보여줌
sudo docker-compose ps
#MySQL들어가기
sudo docker exec -it dbName bash
mysql -u root -p

#stop 및 삭제
sudo docker-compose down

실행 됨
쉘 가져옴

워드프래스 + db

version: '3.3'
services:
   db:
     image: mariadb:10.4.6
     volumes:
       - /home/kali/Docker/DockerCompose/web-db_compose/db-data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: wordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8080:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
     volumes:
       - /home/kali/Docker/DockerCompose/web-db_compose/web-data:/var/www/html

생성 완료
정상 동작

간단한 프로젝트

1. 도커 컴포즈의 프로젝트를 관리할 폴더 생성 (project)

2. 3개의 도커 파일을 저장할 폴더 생성(web01, web02, web03)

3. 각 폴더에 도커파일 생성 (index도 1, 2, 3으로 나누기)

4. project폴더에 yaml파일을 만들어서 build

5. 3개의 웹서비스가 생성

6. nginx 도커파일을 만들기 -> nginx.conf 파일을 만들어서 로드밸런싱이 가능하게 하고 ADD, COPY 이용

7. 빌드

web01-03/Dockerfile 파일

FROM ubuntu
MAINTAINER "Dogyun"
LABEL title "Test Server01~3"
RUN apt-get update && apt-get -y install nginx
RUN echo "Test Server 01~3" > /var/www/html/index.html
EXPOSE 80
WORKDIR /var/www/html/
CMD ["nginx", "-g", "daemon off;"]

project/docker-compose.yaml 파일

version: '3.3'
services:
  web01:
    build: web01
    ports:
      - "8001:80"
  web02:
    build: web02
    ports:
      - "8002:80"
  web03:
    build: web03
    ports:
      - "8003:80"
  lb:
    build: lb
    ports:
      - "8080:80"
    depends_on:
      - web01
      - web02
      - web03

lb/Dockerfile 파일

FROM nginx
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d/default.conf

lb/default.conf 파일

upstream web-alb {
        server 172.17.0.1:8001;
        server 172.17.0.1:8002;
        server 172.17.0.1:8003;
}

server {

        location / {
                proxy_pass http://web-alb;
        }
}

실행 결과

베이스 이미지 + 커스텀 이미지

'SK Rookies 9 > review&practice' 카테고리의 다른 글

도커 환경 취약점  (0) 2022.10.21
#포트포워딩을 통한 VM 외부 통신#  (0) 2022.10.19
Docker & Container basic  (0) 2022.10.18
WebHack Review&Practice Advanced  (0) 2022.10.18
WebHack Review&Practice basic  (0) 2022.10.18