참고자료
제출 전 체크할 사항
You must place all the necessary files for the configuration of your server in a folder
called srcs.
Your Dockerfile file should be at the root of your repository. It will build your
container. You can’t use docker-compose.
All the necessary files for your WordPress website should be in the folder srcs.
필수 과제
•
You must set up a web server with Nginx, in only one docker container. The
container OS must be debian buster.
•
Your web server must be able to run several services at the same time. The services
will be a WordPress website, phpMyAdmin and MySQL. You will need to make
sure your SQL database works with the WordPress and phpMyAdmin.
•
Your server should be able to use the SSL protocol.
•
You will have to make sure that, depending on the url, your server redirects to the
correct website.
•
You will also need to make sure your server is running with an autoindex that must
be able to be disabled.
시행착오
•
html이 저장되는 경로
/var/www/html
Shell
복사
•
php에서 사용하는 암호 알고리즘
blowfish
#var/www/html/phpmyadmin/config.inc.php
$cfg['blowfish_secret'] = '복잡한 해쉬 문자열'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
Shell
복사
안의 해쉬 문자열을 가지고 암호 알고리즘에 사용
•
80:80 443:443
•
구조
기존의 가상화 방식은 각 가상 환경마다 독립된 커널 OS가 존재하여 매우 무겁고 느릴 수 밖에 없었다. 또한 각 환경마다 쓸 수 있는 자원이 고정으로 정해져 있기 때문에 컴퓨터의 성능과 환경이 제한된다. 성능 환경이 중요한 서버에선 더더욱 곤란할 것이다.
그러나 도커의 가상화 방식은 새롭게 커널 OS를 생성하지 않고 기존의 커널 OS 자원을 계승하여 사용한다. 또한 각 환경마다 사용할 수 있는 자원이 고정으로 정해져 있지 않아 유동적으로 변할 수 있다. 이러한 이유로 기존의 가상화 방식보다 훨씬 자원적, 성능적으로 뛰어날 수 밖에 없다.
운영체제를 공유하기 때문에
Dockerfile에 있는 한줄 한줄이 layer로 들어가게 되는데 결국 이런 layer들이 다 이미지화 되기 때문에 이미지가 계속 실행될때마다 이 layer들을 공유하여 vm보다 훨씬 가볍고 성능이 좋음. 동일한 명령어들은 이미 이미지 layer로 남아있기 때문에 캐싱데이터로 사용하여 빠름
•
dockerfile 속 expose
예를들어 expose 80,443 이면 80포트와 443포트를 쓸 것이다를 명시하는 것이지 실제로 이 명령어를 만나면 연결되는게 아님
docker run을 할때 -P 옵션을 주게 되면 그때서야 80포트와 443포트와 연결되는것
docker run -p 80:80 -p 443:443을 주게 되면 expose에 명시되어 있는 80포트,443포트를 쓰는게 아니라 -p 옵션을 통해 실제로 연결할 포트를 직접 지정해주는것
•
run.sh은 잘 실행하는데 자꾸 컨테이너가 종료됨..
FROM debian:buster
RUN apt-get update
RUN apt-get upgrade
RUN apt-get install -y nginx vim
COPY ./srcs/run.sh /.
EXPOSE 80 443
CMD bash run.sh
Shell
복사
service nginx start
service nginx status
bash #bash를 실행줘야함
Shell
복사
◦
docker run -it를 하게 되면 dockerfile의 내용이 실행되고 마지막 CMD bash run.sh가 실행이 된다.
◦
-it옵션을 통해서 컨테이너와 상호작용을 하게 되는데 컨테이너는 run.sh만 실행을 하고 상호작용이 끝났다고 생각하기 때문에 컨테이너가 종료된다
◦
따라서 bash를 실행함으로써 foreground에 무언가를 실행시켜주고 있어야 컨테이너가 종료되지 않고 살아있음
•
expose를 통한 포트 공개와 -p의 차이점
EXPOSE로 80 443을 하게 되면 호스트와 연결할 포트를 80포트와 443포트를 쓴다는 것이고 호스트의 포트는 랜덤으로 설정하게 된다
반면 -p옵션의 경우 애초에 설정을 -p 80:80 -p 443:443으로 주기 때문에 80포트는 80포트끼리 연결되고 443포트는 443포트끼리 연결된다
•
이건 무엇을 의미할까
server {
listen 80 default_server;
listen [::]:80 default_server;
#####################################################
root /var/www/html; # 기본 루트 디렉토리 입니다.
index index.html index.htm index.nginx-debian.html index.php; # 기본 루트 디렉토리에서 가장 먼처 찾는 첫번째 파일입니다.
#####################################################
server_name _;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
}
}
server {
listen 443;
ssl on;
ssl_certificate /etc/ssl/certs/localhost.dev.crt;
ssl_certificate_key /etc/ssl/private/localhost.dev.key;
root /var/www/html;
index index.php index.html index.htm;
}
Shell
복사
◦
var/www/html 경로에 test.html을 생성하고 index.nginx-debian.html앞에 test.html을 적어두면 시스템은 var/www/html에서 test.html을 먼저 찾게 되고 찾으면 리턴을 하게 된다
◦
index.php를 추가해주는 이유 phpmyadmin에 접속하기 위해
•
wget이 필요한 이유
◦
데비안에서 phpmyadmin을 바로 다운받을 수 없음
◦
wget이란 웹 서버로부터 콘텐츠를 가져오는 컴퓨터 프로그램으로 HTTP, HTTPS, FTP프로토콜을 통해 다운받음
•
NGINX
Nginx(엔진 x라 읽는다)는 웹 서버 소프트웨어
클라이언트에게 웹 페이지를 전달(HTML,CSS로 되어 있는 문서를 사용자에게 보내주고 띄워줌)
•
query 문
CREATE DATABASE IF NOT EXISTS wordpress; #wordpress라는 디비를 만들어라
GRANT ALL PRIVILEGES ON *.* to 'user'@'%' IDENTIFIED BY '1111' WITH GRANT OPTION; #계정을 만들고 비밀번호 설정하고 권한을 줘라
FLUSH PRIVILEGES; #적용해라
show databases;
exit
SQL
복사
•
chown -R www-data:www-data /var/www/html/wordpress
◦
chown: 리눅스에서 소유자를 변경하는 커맨드.
• -R은 –recursive. 에러 메시지가 있어도 출력하지 않게 하는 커맨드.
◦
www-data는 우분투에서 Apache,PHP 실행시 수정이 가능한 권한
•
dockerfile RUN 명령어 관행
RUN apt-get update
RUN apt-get install -y nginx
RUN apt-get install -y vim
...
Docker
복사
◦
위와 같이 하나하나 사용을 해버리면 update가 캐싱데이터로 남아있어서 새로 업데이트를 하지 않아서 문제가 생길 수 있다
그래서 아래와 같이 쓰는 것이 관행이다
RUN apt-get update && apt-get install -y \
nginx \
vim \
...
Docker
복사
궁금증
왜 도커는 새로 시작할때마다 초기화가 되는거지? 이미지가 저장되는 곳이 없나?
기존 컨테이너가 exit 명령어를 통해서 종료를 하게 되면
docker ps 명령어를 통해서 컨테이너가 종료된 것을 알 수 있음
docker ps -a를 사용하게 되면 종료된 컨테이너가 보임
docker restart <container id> 를 통해서 종료된 컨테이너 다시 살리기
docker attach <container id> 를 통해서 컨테이너 다시 실행
List
Search