[42서울 / inception] 인셉션 테스트 가이드라인

Hans Park·2022년 12월 24일
0

42서울 본과정

목록 보기
15/15
post-thumbnail

💡 42seoul 본과정

💡 아래 링크들 밑에 설명이 있습니다.
다만, 아래 링크들을 전부 읽어보시면 굉장한 도움이 되실 겁니다.

🚀 Inception


[Column] 클라우드 네이티브란?
<클라우드 네이티브에 관한 (컨테이너에 관한) 자세한 설명>

도커와 컨테이너의 이해 (1/3) - 컨테이너 사용법
<도커 이해 블로그>

Inception
<jseo inception 설명>

[Docker] 도커 컨테이너 실행하기 / 명령어, 옵션 정리
<도커 명령어 기본>

Docker와 PID 1(좀비 프로세스)

Inception

컨테이너 환경을 위한 초기화 시스템 (tini, dumb-init)

Docker와 Dumb-Init
<테스트로 nginx 돌렸는데 컨테이너가 바로 종료될때 문제인 pid1 관련 자료>

Docker(file) CMD & ENTRYPOINT & RUN 그리고 docker 컨테이너 생명주기와 프로세스 (container lifecycle & process)
<CMD, ENTRYPOINT 차이 및 pid1>

Nginx 이해하기 및 기본 환경설정 세팅하기

Nginx 설치 및 nginx.conf, default.conf 이해하기
<nginx 기본 설정>

[Infra] 리버스 프록시(reverse proxy) 서버 개념
<프론트프록시, 리버스 프록시>

[Docker] docker compose 사용법
<docker compose 간단한 설명>

도커 컴포즈 기초 및 문법

09. 도커 컴포즈(Docker Compose)란 무엇일까?
<도커 컴포즈 문법 및 간단한 예제>

도커(Docker) 컴포즈를 활용하여 완벽한 개발 환경 구성하기
<도커 백서>

How To Install WordPress With Docker Compose | DigitalOcean
<참고자료>

docker compose와 간단한 compose 문법
<워드프레스와 nginx 코드예시>

Docker Compose로 Wordpress, MariaDB, PHP-FPM, Nginx, Redis, Certbot 설치하기 > 우분투 서버 | 우성짱의 NAS
<nginx, 워드프레스, mysql 설치 예시 매운맛>

WordPress
<워드프레스 설치 위키>

[networking] 여러 도커 작성 프로젝트 간의 통신

docker & docker-compose network
<docker network 예시>

[docker] docker-compose.yml의 명명 된 볼륨에 대한 호스트 경로를 설정하는 방법
<docker 볼륨 바인드 마운트 설정>

docker-compose로volumes 설정
<docker compose 볼륨 옵션 설명>?

Docker Alpine Linux에 WordPress Mariadb 설치하기#2
<docker wordpress, mariadb 설치>

Error setting up MySQL: Table 'mysql.plugin' doesn't exist
<mysql_install_db 명령어>

[TIL] 도커 시작하기 - 도커 설치, Nginx, OpenSSL
<ssl 설정>

[ft_server]Docker, nginx, openssl
<ssl설정 깊은버전>

튜토리얼 Nginx - SSL, TLS 1.0 및 TLS 1.1을 비활성화 [ 단계별]
<nginxs tls 설정>

wp-cli 사용하기 #1
<워드프레스 cli 유저 설정>

WP-CLI - 워드프레스를 명령창에서 관리하는 유틸리티

터미널에서 WordPress를 관리하기 위해 wp-cli를 설치하는 방법 - TechCrop.net
<wp-cli로 워드프레스 설치하는 방법>

wordpress에 redis cache 적용하기 | 다비도브 linux vps서버운영일기
<redis 설정>

ubuntu 에 WordPress 설치

How to Setup FTP to use in locally hosted wordpress
<ftp서버 설정>

🚀 학습용 테스트 가이드라인

💡 이전에 “Born2beRoot” 과제 가이드라인을 만들었다가, 치팅시트로 전락될 뻔하여 일부 수정하였습니다.
이 글은 기본 지식 함양 및 쓸데없는 고생을 덜기 위한 참고용 가이드라인으로만 봐주시길 바랍니다.
실제 과제를 만들기 위한 방법과 다릅니다.
도커, 도커컴포즈 학습용 가이드라인임을 알려드립니다.

더 궁금하신 점은 DM 부탁드려요 🙏

🖋 OS 설치 및 설정

  1. Ubuntu 18.04 iso 설치
    2Gb짜리 설치

    [Ubuntu 18.04.6 LTS (Bionic Beaver)](https://releases.ubuntu.com/18.04/)
  2. iso 다운받는동안 vdi 생성 → 본투비루트와 같으나, ram을 4096으로.

  3. iso파일 다운받는동안 network 포트포워딩 10.0.2.15에 포트 22, 80, 443 연결해두기

  4. iso설치가 완료되면 vdi열어서 iso얹고 실행.

    💡 iso를 통해 우분투 설치 중, Update Ubuntu 체크 해제!!!!!!!!!

  5. 계정설정은 간단하게 완료하기 (비번 1111이 편함)

  6. sudo apt-get install -y git 실행.

  7. 편한 개발을 위한 tools 설치

    💡 우분투 서버를 kakao로 바꾸면 좋다.

    • make
    • vim
    • systemd
    • git 설정
    git config --global user.email "[tmdgks2222@naver.com](mailto:tmdgks2222@naver.com)"
    git config --global [user.name](http://user.name/) "KOREAparksh"
    • ufw
    • openssh-server
    • net-tools
    • zsh
    • oh my zsh
  8. zsh 환경에서 docker 설치

    1. curl로 도커 설치
    2. curl로 도커 컴포즈 설치
    3. /var/run/docker.sock 권한 666
    4. sudo chmod 666 /var/run/docker.sock
    5. sudo chmod +x /usr/local/bin/docker-compose

나만의 작고 소중한 첫 docker 컨테이너 띄어보기

💡 ssh 설치했으면 적용해야 할 것 같은 XXXXX의 이름은?
(hint: vm)

  1. 도커 파일 만들어보기 with nginx를 불러오지 말고 alphain에서 설치해서 운용하기

    FROM @@@
    
    RUN @@@
    RUN @@@
    
    WORKDIR @@@
    
    COPY . .
    
    ENTRYPOINT @@@
    CMD @@@
  2. 도커 이미지 만들고 컨테이너 띄우기

    1. run으로 바로 띄우면 터미널 사용을 못함. -d옵션으로 백그라운드 실행하면 해결됨.
    2. dumb-init 관련 내용 숙지할 것.
    3. dumb-init 안써도 프로세스가 죽지 않지만(대부분 안함), 하는게 좋아보임.
  3. 포트포워딩으로 연결한 포트 크롬으로 띄어보기. nginx 화면이 나오면 성공.

  4. nginx 문법 배우기

  5. exec 옵션으로 container안에 들어가서 nginx 설정들 알아보기 (nginx 설정 잘 되는가 확인하는거)

    1. /var/www/ 에 html 폴더 만들기
    2. /var/www/html/ 에 index.html 만들고 내부 아무거나 채워보기
    3. /etc/nginx/http.d 안에 default.conf 열어서 location블록 안에 root 설정하기
      (root /var/www/html/)
    4. root 밑에 index index.html 넣어보기
    5. 크롬으로 열어보기
    6. root 경로 안에 이것저것 넣고 default.conf 설정 만져가면서 알아보기
  6. 이제 도커파일 안에 copy를 이용해서 적용해보기

    쉽게말해 exec 옵션으로 nginx 설정 바꿀 필요없이 docker run만으로 nginx설정 다 바뀌게.

    1. default.conf, *.html 파일 작성
    2. default.conf 안에 root폴더 설정한게 만약 폴더가 없다면 RUN mkdir로 만들기
    3. COPY로 각 파일들 알맞은 위치에

도커 컴포즈 알아보기

  1. 도커 컴포즈 알아보기
  2. docker-compose.yaml 파일 작성하기
  3. docker-compose up (-d) 해서 제대로 되는가 확인
    1. docker run 명령어 실행했을때와 같이 nginx화면 및 설정한게 적용되야 함.

도커 네트워크/볼륨으로 nginx와 php 연결하기

  1. 워드프레스가 무엇일까? 알아보기

  2. 일단 exec로 nginx 컨테이너 들어가서 php 만져보기

    1. apk add --upgrade curl php8 php8-fpm

    2. vi /etc/php8/php-fpm.d/www.conf 내 127.0.0.1 → 0.0.0.0

      💡 0.0.0.0의 뜻은 무엇일까요?
      0.0.0.0의 단점을 보완하기 위해, 도커 네트워크를 활용한다면 어떠한 ip주소를 넣어야 할까요?

    3. # nginx server 블록 변경
      
      location ~ \.php$ {
              root           /var/www/html;
              # php 파일이 존재하는 디렉터리 경로
              
              fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
              # fastcgi_pass : php-fpm.sock이 존재하는 경로
              
              fastcgi_index  index.php;
              # 초기 php 파일명 지정
              
              fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
              include        fastcgi_params;
      }
    4. vi /var/www/html/index.php

    5. nginx -s reload

    6. php-fpm8

  3. 도커 볼륨 만들기 (컴포즈 아님)

  4. 도커 볼륨 연결

    volumes:
            wordpress-v:
                    driver: local
                    driver_opts:
                            type: 'none'
                            o: 'bind'
                            device: '/home/seunpark/data/wordpress'
  5. nginx default.conf 수정
    index.html은 있어도 없어도 됨.

    ```docker
    server {
            listen 80 default_server;
            listen [::]:80 default_server;
    
            root /var/www/wordpress/;
    
            index index.php index.html;
    
    	location ~ \.php$ {
            	fastcgi_pass   wordpress:9000;
            	fastcgi_index  index.php;
    
            	fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    	        include        fastcgi_params;
    	}
    
            # You may need this to prevent return 404 recursion.
            location = /404.html {
                    internal;
            }
    }
    ```
  6. 이제 wordpress dockerfile 따로 만들어서 연결해보기수정

    FROM @@@@@@
    
    RUN apk update
    
    RUN apk add --upgrade curl \
    	 php8 \
    	php8-fpm
    RUN apk add dumb-init
    
    WORKDIR /usr/src/app
    
    // 도커볼륨과 연결할 폴더 만들기
    RUN @@@@@
    
    // 워드프레스 설치
    RUN curl https://ko.wordpress.org/wordpress-6.0.2-ko_KR.tar.gz -o wordpress.tar.gz && \
    	tar -zxvf wordpress.tar.gz && \
    	rm -rf wordpress.tar.gz && \
    	cp -R ./wordpress/* /var/www/wordpress/
    
    RUN sed -i "s/listen = 127.0.0.1:9000/listen = wordpress:9000/" /etc/php8/php-fpm.d/www.conf
    
    ENTRYPOINT ["/usr/bin/dumb-init"]
    CMD ["php-fpm8", "--nodaemonize"]
  7. wordpress같은 경우 바인드된 도커볼륨에 복사하므로, 설치 후 재 빌드 시엔 설치하면 안됨.
    따라서 스크립트로 따로 빼야 함.

  8. 연결해보기

DB 생성 및 연결

  1. DB또한 wordpress 컨테이너 안에서 설치 후 실행해보고,
    잘 돌아가는지 확인해보고 컨테이너를 분리해봅시다!

인셉션 하면서 들었던 의문/질문들

  • Docker run 사용한 터미널 앞으로 못사용하는게 맞는지
    • 백그라운드로 실행하니 터미널은 사용가능
    • 컨테이너 생성만 하고 start로 따로 명령 내리니 터미널 사용가능
  • Docker ps에서 끝난지 안끝난지 어케암?
    • status에 up이라 뜨고 포트가 지정되어 있는군
  • 처음 docker run -d로 백그라운드로 돌렸는데, 이거는 잘되는군
  • attach의 역할이 뭐지??
  • exec로 하면 컨테이너 내부 들어가짐
  • 근데 서버랑 컴퓨터 환경이랑 같게 하려고 도커 쓰는 일이 많을텐데, 우리가 도커 위에서 작업이 안되지 않나? 그러면 우리 설정을 서버에 맞춰야하나? 안됨.

nginx 명렁어 왜 다른가

[ft_services] nginx 설정

고민 순서

  • 도커가 뭘까
  • 도커파일 작성법
    • 파일 문법설명
  • dumb-init?
  • 이미지랑 컨테이너 차이
  • nginx란?
  • nginx 설정해보기
  • 도커컴포즈란?
  • 도커컴포즈 사용
  • 워드프레스란?
  • fastcgi란?
  • 네트워크연결방법
    • docker network
    • docker compose network
    • hostname
profile
장안동 개발새발

0개의 댓글