도커파일
수동으로 도커 컨테이너를 다운받아서 새로운 컨테이너 이미지로 생성 하는 것을, 스크립트를 이용하여 자동으로 이미지를 생성하는 방법
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
도커컴포즈
컴포즈를 하면서 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 |