ft_server: 도커 서버 구축 (docker, debian:buster, nginx, php, phpmyadmin, mariaDB, wordpress, autoindex, dockerfile)

Joey Hong·2020년 10월 28일
2

🥊 만 따라가면 필수 기능 구현 완료

  • nginx, php-fpm, mysql, phpmyadmin, wordpress 설치
  • nginx 오토인덱스
  • Dockerfile 생성

1. 가상화 (Virtualization)

CPU, 디스크, 네트워크 등의 물리적인 컴퓨터 자원을 여러 실행환경이 공유해 효율적으로 자원을 사용하도록 해주는 기술

🐳 가상머신 (Virtual Machine)

호스트 운영체제 위에서 가상의 하드웨어를 서비스하는 것

  • 가상의 하드웨어에 게스트 운영체제 설치 후 사용
  • Hypervisor는 가상머신을 생성하고 컴퓨터 자원을 가상머신에게 배분하여 구동하는 프로그램
장점
  • 호스트 운영체제와 게스트 운영체제의 완전한 분리

    • 호스트 운영체제와 게스트 운영체제가 달라도 됨 (리눅스 위에서 윈도우 실행환경)
단점
  • 완전한 운영체제가 설치되기 때문에 대량의 메모리 필요
  • CPU 자원 확보의 어려움
    • 게스트 운영체제 내의 우선순위가 높아도 게스트 운영체제 자체의 우선순위가 낮다면 물리적인 CPU 자원 확보가 어려움
  • 소프트웨어 개발과 시스템 운영에 대한 이해 필요
  • 운영체제를 업데이트할 경우 호스트와 개별의 게스트 운영체제를 개별적으로 패치하는 번거로움

🐳 컨테이너 (Container)

호스트 운영체제의 커널을 공유하면서 격리된 자원을 제공하는 가상화 기술. 애플리케이션 실행환경의 가상화

  • CPU, 메모리, 디스크 등의 자원에 대한 쿼터(Quota) 설정

    • 자원 활용 문제 해결
  • 서로의 실행환경 격리로 보안 문제

장점
  • 빠른 부팅
    • 운영체제라는 개념 없이 프로세스를 띄우는 정도만 수행
  • 적은 메모리 사용량
    • 호스트 커널을 공유하기때문에 운영체제 설치X
  • 호스트 운영체제만 업데이트하면 되는 유지관리의 간소화
단점
  • 자원 격리와 쿼터 제한의 어려움
    • 가상머신과 다르게 하드웨어를 직접 제어할 수 없다
  • 호스트 운영체제에 실행 환경이 제한됨
    • 호스트 운영체제의 커널을 공유하기 때문에 호스트 운영체제의 환경을 그대로 가져간다
      • 리눅스에 컨테이너를 띄워 윈도우 환경을 만들 수 없음

🌟 이미지란?

  • 컨테이너의 스냅샷
  • 컨테이너 실행에 필요한 파일과 설정값을 포함하고 있는 것
  • 이미지를 통해 여러개의 컨테이너 생성 가능
    • 컨테이너를 이미지로 만들어 그 시점의 파일과 설정값 등을 저장 가능

2. Docker

Docker는 컨테이너 기반의 오픈소스 가상화 플랫폼

  • 잘 만들어진 컨테이너 이미지를 메모리상에 띄우기
  • 컨테이터 내부에서 작업한 내용을 다시 이미지로 커밋

🐳 Install

Docker Desktop for Mac stable 설치

debian buster

🥊 debian:buster 설치

docker pull debian:buster

🥊 debian:buster 이미지를 사용해 컨테이너 생성 및 실행

docker run -it --name [container_name] -p 80:80 -p 443:443 debian:buster
  • container_name은 원하는 이름으로 설정

  • -p 80:80 호스트의 80번 포트를 컨테이너의 80번 포트와 연결

    • http 프로토콜을 사용하는 웹 서버는 기본적으로 80번 포트를 사용하도록 세계적으로 약속되어 있
  • 호스트의 443번 포트를 컨테이너의 443번 포트와 연결

    • 443번 포트는 ssl이 적용된 https의 기본 포트
    • 나중에 ssl적용시 443으로 연결

🐳 docker command

컨테이너 실행 명령어

이미지로 컨테이너 생성 및 실행

docker run [options] [image_name] [command] [arg...]
options설명
-p호트스와 컨테이터 포트 연결 (포워딩)
-p [호스트 포트 번호]:[컨테이너 포트 번호]
--name컨테이너 이름 설정
-i컨테이너와 상호적으로 주고받겠다는 뜻 (interactive), 입력에 대한 출력을 제공
-ttty를 사용하겠다는 뜻, 터미널과 비슷한 환경을 조성

도커파일로 이미지 생성 명령어

도커파일로 이미지 생성

  • 도커파일로 필요한 파일과 설정값 등을 담고있는 이미지 생성
docker build [options] [image_name] [Dockerfile path]
options설명
-t, --tag-t [저장소 이름]/[이미지 이름]:[태그] 설정

이미지 커밋 명령어

현재까지 작업한 컨테이너를 이미지로 생성

  • 특정 과정까지 마친 컨테이너를 이미지로 저장해두면 다음번은 이후 과정부터 수행하면 된다
  • 깃헙의 commit과 유사
docker commit [container_id/name] [image_name]
  • docker images 로 확인 가능

목록 확인 명령어

#보유한 이미지 목록
docker images
#실행중인 컨테이너 목록
docker ps
#모든 컨테이너 목록(실행중인지, 사용중인 포트, 기반으로 하는 이미지, 컨테이너 이름 등)
docker ps -a

삭제 명령어

#컨테이너 삭제
docker rm [container_id/name]
#이미지 삭제
docker rmi [image_id/name]
#해당 이미지로부터 생성된 컨테이너도 함께 삭제 (이미지와 컨테이너 모두 삭제)
docker rmi -f [image_id/name]
#컨테이너 모두 삭제
docker rm `docker ps -a -q`

컨테이너 시작/입장 명령어

docker start [container_name]			  #컨테이너 start하기
docker attach [container_name]			#접속하기
docker exec -it [container_name] /bin/bash	#stop 안 하고 나온 컨테이너 들어가기

컨테이너 중지/퇴장 명령어

exit			        #컨테이너 stop 하고 나오기
ctrl + P + Q			#컨테이터 stop 안 하고 나오기
docker stop [container_name]			#컨테이너 stop하기

cd /var/www/html/

3. Nginx, php, mariaDB, wordpress, SSL, autoindex

🐳 nginx

클라이언트(브라우저)에게 html, css, javascript 등의 정보를 전송하는 웹서버

🥊 nginx 설치

apt-get update && apt-get -y install nginx
  • nginx 명령어
service nginx start
service nginx status
service nginx reload

🥊 nginx 시작

service nginx start

🥊 주소창에 localhost 치고 들어가서 아래 화면처럼 Welcome to nginx가 나오면 성공

🐳 php

웹서버의 요청을 바탕으로 데이터베이스의 데이타를 받아 html로 만들어 웹서버에 전달하는 웹서버상의 언어

🥊 php 설치

apt-get -y install php-fpm vim

🥊 vim /etc/nginx/sites-available/default 에서 아래와 같이 주석 풀기

location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
#	# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
#	# With php-cgi (or other tcp sockets):
#	fastcgi_pass 127.0.0.1:9000;
}

🥊 vim /etc/nginx/sites-available/default 에서 아래처럼 index.php 추가

index index.html index.html index.nginx-debian.html index.php
php 테스트하기 (optional, 안해도됨, 단순 확인용, 어차피 지워야함)
  • vim /var/www/html/phpinfo.php
<?php phpinfor(); ?>
service php7.3-fpm start
service php7.3-fpm status
service nginx reload
  • localhost/phpinfo.php

    다음 화면이 뜨면 php가 잘 작동된다는 의미

  • 테스트 후 보안을 위해 삭제해주어야한다

🐳 SSL

웹서버와 브라우저 간의 보안을 위한 프로토콜

인증서는 웹서버의 신원을 증명

웹서버와 브라우저는 서로 암호화된 http 데이터들을 전송

🥊 openssl 설치

apt-get -y install openssl

🥊 인증서와 키 생성

openssl req -newkey rsa:4096 -x509 -days 365 -nodes -subj "/C=KR/ST=GAEPO/L=Seoul/O=ECOLE42/OU=42SEOUL/CN=localhost" -keyout private.dev.key -out private.dev.crt

mv private.dev.crt etc/ssl/certs/
mv private.dev.key etc/ssl/private/
chmod 600 etc/ssl/certs/private.dev.crt etc/ssl/private/private.dev.key
req 인증서 요청 및 생성 유틸리티 (Linux man 페이지)
  • -newkey [arg] 새 인증서와 새 비공개키를 생성
    • rsa:[nbits] RSA 키의 크기를 n 비트로 지정. 비트를 명시 안 하면 디폴트값으로 설정
  • -x509 인증서발급 요청대신 자체 서명된 인증서를 출력. (자체인증에 사용)
    • 공인인증을 이용하는 경우 인증기관에 인증서 발급 요청을 해 인증서와 키를 발급받는다
    • 자체인증을 이용하는 경우 자체 서명된 인증서를 발급한다
  • -days [n] -x509 옵션이 사용된 경우, n으로 유효기간을 지정. 디폴트는 30일
  • -nodes 개인키가 생성되었을 때 암호화하지 않음
  • -subj [arg] 인증서에 대한 정보
    • /C=국가/S=/ST=/L/O/OU/CN
  • -keyout [filename] 새로 만들 개인키 이름
  • out [filename] 새로 만들 인증서 이름

🥊 vim etc/nginx/sites-available/default 에서 아래와 같이 ssl 관련 부분 추가

server {
	listen 80 default_server;
	listen [::]:80 default_server;
}

server {
		listen 443;

		ssl on;
		ssl_certificate /etc/ssl/certs/private.dev.crt;
		ssl_certificate_key /etc/ssl/private/private.dev.key;

		.
		.
		.
	}

🥊 설정 업로드를 위해 nginx 재시동

service nginx reload

🥊 https://localhost로 들어가 아래 화면이 뜨면 ssl이 잘 적용된 것

  • safari에서는 localhost 앞에 자물쇠가 뜨는 것으로 확인 가능
  • chrome에서는 Not Secure와 같은 경고창이 뜨는 것으로 확인 가능

🐳 MariaDB

Maria DB는 오픈소스 관게형 데이터베이스(RDBMS)

데이터베이스들이 담겨있는 데이타베이스 서버로 MySQL과 거의 모든 기능이 동일

  • 데이터베이스 - 실시간으로 접근, 삽입, 삭제, 수정이 가능한 데이터의 집합
  • 테이블 - 행/열에 데이타가 담긴 테이블

🥊 mariadb설치

apt-get -y install mariadb-server

🥊 mysql 실행 및 설치내역 적용을 위한 nginx와 php 재시작

service mysql start
service nginx reload
service php7.3-fpm restart
  • php7.3 재시작시 FastCGI 에러가 뜨면 apt-get install --reinstall php 후 시작

🥊 mysql 접속

mysql

🥊 계정 생성

  • 생성한 계정에 모든 database의 모든 table에 권한 부여 *.*
  • user_iduser_password 설정
CREATE USER [user_id]@localhost IDENTIFIED by '[user_password]';
GRANT ALL PRIVILEGES ON *.* to [user_id]@localhost;

🥊 wordpress 데이타베이스 생성 (나중을 위한 것)

CREATE DATABASE IF NOT EXISTS wordpress;
  • 생성되었는지 확인 후 종료
show databases;
exit
  • mysql 로그인 명령어
mysql -u [user_id] -p [user_password]

🐳 phpMyAdmin

웹기반으로 mysql을 관리할 수 있는 무료 소프트웨어 (콘솔보다 쉽게 데이타베이스 관리)

🥊 phpMyAdmin설치

  • php-mysql는 php에서 mysql을 사용하기 위한 모듈로 설치 필수

  • 온라인 자료를 바로 받을 수 있는 wget 설치

  • wget으로 phpmyadmin을 온라인에서 바로 다운로드

  • config.inc.php 파일 생성

apt-get -y install php-mysql wget
wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.tar.gz
tar -xvf phpMyAdmin-5.0.2-all-languages.tar.gz
mv phpMyAdmin-5.0.2-all-languages phpmyadmin
mv phpmyadmin /var/www/html/
cp -rp var/www/html/phpmyadmin/config.sample.inc.php var/www/html/phpmyadmin/config.inc.php

🥊 vim var/www/html/phpmyadmin/config.inc.php

Blowfish secret generator에서 암호 생성 후 아래 '여기'에 복붙

$cfg['blowfish_secret'] = '여기';

🥊 phpmyadmin 데이타베이스 생성

mysql -u root --skip-password < var/www/html/phpmyadmin/sql/create_tables.sql
  • --skip-password 로 비밀번호 생략
  • < create_tables.sql이라는 파일의 내용을 입력
    • phpmyadmin을 구성하는 테이블들을 생성하는 명령문을 담고있다

🥊 사파리에서 https://localhost/phpmyadmin 접속해서 아래 화면이 뜨면 성공

  • 위에서 생성한 mysql 계정으로 로그인 가능

🐳 wordpress

블로그와 홈페이지 제작이 가능한 CMS(Content Management System)

만들기 쉽고, 관리하기 쉽고, 모바일 웹도 지원하고, 소셜네트워크와 연동도 잘 되며 검색시 노출도 잘 되는 오픈소스 소프트웨어

🥊 wordpress 설치

  • wget으로 온라인에서 바로 다운
  • chown 파일의 개인/그룹 소유자 변경 참고
    • -R 재귀적으로 적용 (해당 파일 및 그 그룹의 파일들 소유자 변경)
    • www-data php 실행시 수정이 가능한 권한
wget https://wordpress.org/latest.tar.gz
tar -xvf latest.tar.gz
mv wordpress/ var/www/html/
chown -R www-data:www-data /var/www/html/wordpress
cp var/www/html/wordpress/wp-config-sample.php var/www/html/wordpress/wp-config.php 

🥊 vim var/www/html/wordpress/wp-config.php

  • 아래처럼 데이타베이스 이름, 유저명, 비밀번호를 아까 생성한 그대로 설정해준다
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );

/** MySQL database username */
define( 'DB_USER', '[user_id]' );

/** MySQL database password */
define( 'DB_PASSWORD', '[user_paddword]' );
  • 만약 위의 정보가 mysql에 입력한 정보와 다르면 아래와 같은 에러화면이 뜬다

🥊 nginx 재가동

service nginx reload

🥊 https://localhost/wordpress에서 아래 화면이 뜨면 성공

  • 로그인 후 원하는 대로 페이지를 수정할 수 있다

wordpresss 테마 추가

wordpress에 들어가면 여러가지 테마를 다운받아 설치할 수 있는데 여기에 직접 만든 테마도 추가할 수 있다. css 적용을 성공하지 못해 그만두었으나 대략적인 방법을 아래에 기록한다.

  • 필수 파일 index.php, style.css

    • mine 폴더를 생성해 index.phpstyle.css 를 담는다 (폴더명은 원하는 테마이름)

    • index.php 는 html 파일과 동일하게 작성하면 된다.

  • style.css 는 상단에 아래와 같이 주석에 테마 정보를 입력해야 wordpress에 뜬다

    /*
    Author: jehong
    */
  • mv theme /var/www/html/wordpress/wp-config/themes/mine

    • themes 폴더에는 설치되어있는 워드프레스 테마들이 저장되는 곳이다
    • wordpress에서 테마 변경을 하면 mine 테마를 적용할 수 있다
  • 이에 추가로 등의 문법을 이용해 추가 php 파일을 불러오거나 워드프레스의 입력사항을 불러올 수도 있다.

🐳 autoindex

nginx 인덱스 페이지에서 root 디렉토리 파일 목록을 보여주는 기능

🥊 vim etc/nginx/sites-available/default

아래처럼 autoindex on; 내용 추가

server_name _;

location / {
	autoindex on;
	try_files $uri $uri/ =404;
}

🥊 index.nginx-debian.html 제거

  • root 디렉토리에 인덱스 페이지가 있으면 그것을 띄우기때문에 오토인덱싱을 하지 않는다
  • 따라서 autoindex를 하고싶다면 root에 있는 index 페이지를 지워야한다
    • 위의 내용을 설치했다면 아마 index.nginx-debian.html, phpmyadmin, wordpress 가 있을 것이다. 여기서 인덱스 파일을 제거해주면 오토인덱싱을 적용할 수 있다
rm -rf /var/www/html/index.nginx-debian.html

🥊 https://localhost 에서 pypmyadminwordpress 가 목록으로 작성된 페이지를 볼 수 있다

custom autoindex page

오토인덱스 페이지를 커스터마이즈할 수 있으나 css 적용이 뜻대로 되지 않아 그만뒀다. 완벽하지는 않지만 기록용으로 방법을 아래에 작성한다.

  • index.htmlstylesheet.css 파일을 추가해 오토인덱스 페이지를 커스터마이즈할 수 있다

    • index.html을 header.html과 footer.html로 쪼개면 오토인덱싱 위아래로 꾸밀 수 있다
  • /etc/nginx/theme

    theme 폴더를 만들어 그 안에 html과 css 파일을 넣는다 (폴더명은 달라도됨)

  • vim /etc/nginx/sites-available/default

    theme 폴더 위치를 알려주고 오토인덱스(body) 앞뒤로 해당하는 파일을 적어준다.

    만약 index.html 하나만 있다면 하나만 원하는 위치에 설정

    server {
    	...
    }
    server {
    	...
    	
    	location /theme/ {
    		root /etc/nginx/
    	}
    
    	location / {
    		autoindex on;
    		add_before_body /theme/header.html;
    		add_after_body /theme/footer.html;
    	}
    }

4. Dockerfile

여태까지 만든 컨테이너를 보관하는 방법은 여러가지가 있다. 컨테이터 그대로 가지고 있을 수도 있고 이미지를 생성해서 보관해도 된다. 또 다른 방법은 이미지를 생성할 수 있는 도커파일을 가지고 있는 것이다. 도커파일로 보관할 경우 컨테이터에 어떤 패키지가 어떤 설정값으로 설치되었는지 쉽게 확인할 수 있다. 이를 위해 세 가지가 필요하다

  • Dockerfile
  • 설정값이 담긴 srcs 폴더
  • 패키지 설정을 마칠 쉘스크립트 파일

Dockerfile

  • 사용할 소프트웨어/패키지 설치 명령어 (nginx, php-fpm, mysql 등)
  • 각종 설정파일 등을 컨테이너 내로 복사 (default, wp-config.php, config.inc.php 등)

srcs 폴더

  • 컨테이너 내로 복사할 파일과 폴더들 (default, wp-config.php, config.inc.php 등)
  • 컨테이너에서 실행할 쉘스크립트

쉘 스크립트

  • 설정파일들을 적절한 위치에 배치 (default, wp-config.php, config.inc.php 등)
  • 설정파일 외 따로 쳐야하는 명령어들 (ssl 인증서 발행, phpmyadmin과 wordpress 설치, mysql 데이타베이스 구축)

🐳 Dockerfile

FROM

베이스가 될 이미지 지정

FROM [image]:[tag]
#example
FROM debian:buster

MAINTAINER

MAINTAINER [name]
MAINTAINER [email address]
MAINTAINER [name] [email address]

COPY

파일이나 디렉토리를 이미지로 복사

COPY [src] [dest]

ADD

COPY와 유사

  • src 에 URL 입력 가능

  • src 에 압축 파일 입력시 자동으로 압축 해제하며 복사

ADD [src] [dest]

RUN

명령어 그대로 실행

  • 내부적으로 /bin/sh -c 뒤에 실행
  • \ 를 사용해 긴 명령어를 여러 줄로 나눌 수 있다
RUN [command1] \
		[command2] \
		[command3]
		
#예시
RUN apt-get upadate && apt-get install -y \
		nginx \
		openssl \
		vim

EXPOSE

도커 컨테이너가 실행되었을 때 요청을 기다리고 있는 포트 지정

  • 여러개 지정 가능 EXPOSE 80 443
EXPOSE [port]

CMD

도커 컨테이너가 실행되었을 때 실행되는 명령어 정의

  • build할 때는 실행되지 않음
  • 여러개 존재시 마지막 CMD만 실행
CMD [src] [dest]

🥊 도커파일 작성

FROM debian:buster

MAINTAINER jehong <jehong@student.42seoul.kr>

RUN apt-get update && apt-get install -y \
	nginx \
	php-fpm \
	vim \
	openssl \
	mariadb-server \
	php-mysql

COPY /srcs/default ./etc/nginx/sites-available/
COPY /srcs/phpMyAdmin-5.0.2-all-languages.tar.gz ./
COPY /srcs/config.inc.php ./
COPY /srcs/latest.tar.gz ./
COPY /srcs/wp-config.php ./
COPY /srcs/install.sh ./

EXPOSE 80 443

CMD bash install.sh

🐳 srcs 폴더

설정파일들은 매번 작성하기 번거로우므로 srcs 폴더에 따로 저장해둔다

  • 추후에 컨테이너 내부로 복사해서 배치해주면 간편하게 설정을 마칠 수 있다

  • 이 작업을 위해서는 먼저 srcs 폴더에 해당 파일들을 담아야 한다.

컨테이터 >>> srcs 폴더

docker cp [container_name]:[path_in_container] [path_in_container]
#ft_server 컨테이너의 /var/www/html에 있는 phpmyadmin을 srcs 폴더로 복사
docker cp ft_server:/var/www/html/phpmyadmin /srcs/
srcs 폴더 >>> 컨테이터
docker cp [file_name || directory_name] [container_name]:[path_in_container]
#phpmyadmin 폴더를 ft_server 컨테이너 내에 phpmyadmin이라는 이름으로 복사
docker cp scrs/phpmyadmin ft_server:phpmyadmin

🥊 srcs 폴더에 작성이 복잡한 설정파일들을 모두 옮겨준다

docker cp ft_server:/var/www/html/phpmyadmin/config.inc.php /srcs/
docker cp ft_server:/var/www/html/wordpress/wp-config.php /srcs/
docker cp ft_server:/etc/nginx/sites-available/default /srcs/
  • phpmyadmin과 wordpress처럼 인터넷 다운이 오래 걸리는 설치파일들은 미리 받아 srcs 폴더에 위치해두면 편하다
  • 쉘스크립트도 srcs 폴더에 넣어둔다

🐳 쉘스크립트

쉘스크립트 이름은 install.sh 로 정했다 (바꿔도됨)

  • #!/bin/bash 아래 명령어들을 bash 명령어로 인식
  • echo "CREATE DATABASE IF NOT EXISTS wordpress;" | mysql -u root --skip-password mysql에 패스워드 없이 들어가서 CREATE DATABASE IF NOT EXISTS wordpress; 를 입력하라는 명령어다
  • bash 마지막에 안 넣어주면 도커가 제대로 작동하지 않는다
    • 컨테이너를 시작하면 2-3초 내로 금방 중지되어버린다

🥊 쉘스크립트 작성

#!/bin/bash

# setup ssl
openssl req -newkey rsa:4096 -x509 -days 365 -nodes -subj "/C=KR/ST=GAEPO/L=Seoul/O=ECOLE42/OU=42SEOUL/CN=localhost" -keyout /etc/ssl/private/private.dev.key -out /etc/ssl/certs/private.dev.crt
chmod 600 etc/ssl/certs/private.dev.crt etc/ssl/private/private.dev.key

# install phpmyadmin
tar -xvf phpMyAdmin-5.0.2-all-languages.tar.gz
rm -rf phpMyAdmin-5.0.2-all-languages.tar.gz
mv phpMyAdmin-5.0.2-all-languages /var/www/html/phpmyadmin
mv config.inc.php /var/www/html/phpmyadmin/

# setup DB
service mysql start
mysql -u root --skip-password < var/www/html/phpmyadmin/sql/create_tables.sql
echo "CREATE DATABASE IF NOT EXISTS wordpress;" | mysql -u root --skip-password
echo "CREATE USER jehong@localhost IDENTIFIED by '1111';" | mysql -u root --skip-password
echo "GRANT ALL PRIVILEGES ON *.* to jehong@localhost;" | mysql -u root --skip-password

# intall wordpress
tar -xvf latest.tar.gz
rm -rf latest.tar.gz
mv wordpress /var/www/html/
chown -R www-data:www-data /var/www/html/wordpress
mv wp-config.php /var/www/html/wordpress/

# remove index for autoindexing
rm -rf /var/www/html/index.nginx-debian.html

# start services
service php7.3-fpm start
service nginx start
service mysql restart

bash

🐳 실행

도커파일로 컨테이너를 만들어 잘 마무리되었는지 확인해본다

🥊 Dockerfile로 이미지 생성

  • 마지막의 . 잊지말 것
    • 해당 위치의 도커파일을 참조하라는 의미
docker build -t ft_server .

🥊 생성한 컨테이너 생성 및 실행

docker run -it -p 80:80 -p 443:443 ft_server

확인사항

🥊 https://localhost

  • ssl 인증
  • 오토인덱스

🥊 https://localhost/phpmyadmin

  • phpmyadmin 로그인
  • 설정한 사용자 계정으로 로그인
  • 해당 계정에 phpmyadmin과 wordpress 데이타베이스가 있는지 확인

🥊 https://localhost/wordpress

  • wordpress 가입창
profile
개발기록

0개의 댓글