ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 74일차 - 세미프로젝트 AWS 서버에 배포
    AWS|Docker 2024. 5. 14. 17:24

    서버 켜기

    시작할 서버(인스턴스)를 선택해주고 상태를 인스턴스 시작으로 변경하자

    정상적으로 서버에 SSH 포트로 접속한것을 확인할 수 있다

    어제 타임존 변경한 부분도 잘 반영되어있다


    Docker 설치

    # docker 설치
    sudo yum install docker -y

    # service 등록 ( 서버가 켜질 때 같이 켜지도록)
    # redhat 계열에서만 작동하는 명령어이다 
    sudo systemctl start docker
    
    #ubuntu 는?
    sudo systemctl ubuntu start docker

     

    컨테이너에 이미지 넣기

    # 도커의 이미지 리스트 확인
    # docker [명령어]
    docker images
    
    ls -al /var/lib # /var/lib 경로에 있는 리스트의 상세 정보를 보여달라
    # docker 내용만 보고 싶다면
    ls -al /var/lib | grep docker
    # containerd 내용만 보고 싶다면
    ls -al /var/lib | grep containerd

    containerd

    - 파일 타입 : 디렉토리

    - 소유자 : 소유자는 읽고 쓰기 실행 모두 가능하다

    - 그룹 : 쓰기 실행

    - 누구나 : 쓰기 실행 

    docker

    - 파일 타입 : 디렉토리

    - 소유자 : 소유자는 읽고 쓰기 실행 모두 가능하다

    - 그룹 : 실행만 가능

    - 누구나 : 아무것도 못함 

    sudo 를 붙여서 해도 된다 그런데 하나하나 sudo 붙이기가 귀찮으므로 이럴경우 권한 변경을 해 준다.

    권한 변경 

    # 모든 사용자에게 개방하는 방식
    # chmod [변경할 권한] [대상 폴더 및 파일]
    cd /var/lib
    # 모두가 읽기,쓰기,실행 이 가능 하도록
    sudo chmod rwxrwxrwx docker
    # 위 방법은 가독성이 좋지 않아 다른 방법을 사용 한다.
    # r=> 4 w=>2 x=>1
    # rwx = 4+2+1=>7 rwx = 4+2+1=>7 rwx = 4+2+1 =>7
    sudo chmod 777 docker
    # rwxr_x__x => 751
    # rwxr_xr_x => 755
    # -R : 하위 폴더까지 모두
    sudo chmod -R 755 docker
    
    # 소유자를 변경 하는 방식
    # chown [소유주]:[그룹] [대상 파일 및 폴더]
    cd /var/lib
    sudo chown ec2-user:ec2-user docker

    /var/run/docker 도 권한을 설정해줘야한다

    [ec2-user@ip-172-31-43-53 run]$ pwd
    /var/run
    [ec2-user@ip-172-31-43-53 run]$ ls -al | grep docker
    drwxr-xr-x.  5 root   root            140 May 14 09:26 docker
    -rw-r--r--.  1 root   root              5 May 14 09:26 docker.pid
    srw-rw----.  1 root   docker            0 May 14 09:26 docker.sock

     

    [ec2-user@ip-172-31-43-53 run]$ sudo chmod 755 docker*
    [ec2-user@ip-172-31-43-53 run]$ ls -al | grep docker
    drwxr-xr-x.  5 root   root            140 May 14 09:26 docker
    -rwxr-xr-x.  1 root   root              5 May 14 09:26 docker.pid
    srwxr-xr-x.  1 root   docker            0 May 14 09:26 docker.sock
    
    cd /var/run
    sudo chmod 755 docker.pid
    sudo chmod 777 docker.dock
    -rw-r--r--.  1 root   root              5 May 14 09:25 docker.pid
    srw-rw----.  1 root   docker            0 May 14 09:25 docker.sock
    
    # 소유자를 변경 하는 방식
    # chown [소유주]:[그룹] [대상 파일 및 폴더]
    cd /var/lib
    sudo chown ec2-user:ec2-user docker
    
    # chown 이 보안상으로는 더 안전하다.
    # 하지만 여러 아이디가 사용되는 경우가 더 많기 때문에 chmod 를 사용한다.

     

    원하는 이미지 검색 또는 설치 

    https://hub.docker.com/

     

    Docker Hub Container Image Library | App Containerization

    Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.

    hub.docker.com

    # docker search 에서 검색
    docker search [원하는 프로그램]

    - STARS : 하트 갯수

    - OFFICAIL : 공식, 공식이 아닌것은 유저들이 설정을 바꾸고 올린 이미지이다

    이제 도커 명령어를 통해서 9.0 버젼의 톰캣을 풀 땡겨오자

    docker pull tomcat:9.0

    docker images

    최초에 컨테이너를 생성하고 톰캣을 구동하는 명령어이다 헷갈리면 안됨

    # 톰캣 구동 - 아래 명령어는 컨테이너를 생성 후 실행 하는 명령어
    # docker run -d --name [컨테이너이름] -p [요청포트]:[연결포트] tomcat:9.0
    # 클라이언트가 요청한 포트와 실제 구동중인 톰캣의 포트를 연결시켜준다 /photo -> /webapps
    docker run -d --name tomcat -p 8080:8080 tomcat:9.0
    # --name 을 설정하지 않으면 임의로 이름을 지어버린다( 이상한 이름을 지어버려서 반드시 정해야한다)
    # -p : 컨테이너 밖에서 8080 포트로 요청이 들어오면 컨테이너 내부의 8080 포트와 연결하겠다
    
    # 컨테이너 내부에서 톰캣이 구동되었는지 확인한다
    docker container ls
    docker ps

    톰캣 구동 확인

    브라우저에서 8080 포트로 접속하면 톰캣이 구동되어있지만 아무런 페이지가 없어서 404 에러가 뜬다

    현재 상태 그림으로 그려보면 aws 안에 putty 로 ssh 로 접속한 상태이고 8080 포트를 열어 tomcat 서버에 접속까지 가능한 상태이다

     

    # 404 원인 파악?
    # 컨테이너 안으로 진입
    # docker exec [옵션] [컨테이너명] /bin/bash
    # -it : 푸티처럼 터미널로 컨테이너와 연결 하겠다.
    
    # 내가 컨테이너를 만든 루트이기 때문에 root 로 접속된다
    docker exec -it tomcat /bin/bash

    이전에 봤었던 톰캣 서버 폴더의 구조와 정확하게 일치한다 73일차 참고

     

    root@140e2b21fc79:/usr/local/tomcat# ls -al
    total 156
    drwxr-xr-x. 1 root root    30 May  7 21:37 .
    drwxr-xr-x. 1 root root    20 May  2 06:52 ..
    drwxr-xr-x. 2 root root 16384 May  7 21:37 bin
    -rw-r--r--. 1 root root 20913 May  3 20:22 BUILDING.txt
    drwxr-xr-x. 1 root root    22 May 14 01:46 conf
    -rw-r--r--. 1 root root  6210 May  3 20:22 CONTRIBUTING.md
    drwxr-xr-x. 2 root root 16384 May  7 21:37 lib
    -rw-r--r--. 1 root root 57092 May  3 20:22 LICENSE
    drwxrwxrwt. 1 root root   177 May 14 01:46 logs
    drwxr-xr-x. 2 root root   158 May  7 21:37 native-jni-lib
    -rw-r--r--. 1 root root  2333 May  3 20:22 NOTICE
    -rw-r--r--. 1 root root  3283 May  3 20:22 README.md
    -rw-r--r--. 1 root root  6901 May  3 20:22 RELEASE-NOTES
    -rw-r--r--. 1 root root 16505 May  3 20:22 RUNNING.txt
    drwxrwxrwt. 2 root root    30 May  7 21:37 temp
    drwxr-xr-x. 2 root root     6 May  7 21:37 webapps
    drwxr-xr-x. 7 root root    81 May  3 20:22 webapps.dist
    drwxrwxrwt. 2 root root     6 May  3 20:22 work

    webapps 폴더에는 아무것도 존재하지 않기 떄문에 페이지를 보여줄 수 없다 

    그래서 webapss 폴더 아래에 ROOT 라는 폴더를 만들어서 페이지를 생성해야한다

    왜냐하면 톰캣에서는 ROOT 폴더 읽고 실행하기 때문이다

    ① index.html 를 파일질라를 통해 파일을 보내주고

    ② aws 서버에서 클라이언트로부터 받은 파일을 컨테이너로 넘겨서 가상의 톰캣 안으로 파일을 복사한다

    이때 putty 를 하나 더 실행해서 진행해야한다

    ※ 주의사항 : aws 서버에서 명령어를 실행해야한다 당연히
    # docker cp [복사할 파일] [보낼컨테이너이름]:[컨테이너안의 경로]
    docker cp ./index.html tomcat:/usr/local/tomcat/webapps/ROOT

    # 컨테이너에서 빠져나오고 싶다면...
    exit
    
    # 톰캑 컨테이너를 정지했다가 시작하기
    docker stop tomcat
    docker start tomcat

    서버를 끄고 키면 index.html 파일이 적용되면서 8080 포트로 요청시 페이지가 보인다

    컨테이너에 마리아DB 설치

    설치할 마리아 DB 버젼을 확인하고 

    # 1. mariadb image 검색

    docker search mariadb


    # 2. 허브로 부터 image pull

    docker pull mariadb:11.3
    docker pull mariadb # 버전이 빠지면 최신버전으로 받는다.


    # 3. 컨테이너 실행

    docker run -d --name mariadb -p 3306:3306 mariadb -e MYSQL_ROOT_PASSWORD=1111


    # 4. 실행 확인

    # 4. 실행 확인
    docker ps -a
    
    # 이후 DBEVER 로 접속 확인 까지 해 준다.

    컨테이너 동작 관련 확인

    # 컨테이너 정지
    # docker stop [컨테이너 이름]
    # 여러개의 컨테이너를 정지시키고 싶다면 계속 추가해 주면 된다.
    docker stop tomcat mariadb
    
    # 컨테이너 실행
    # docker start [컨테이너 이름]
    docker start tomcat mariadb

    #1. 마리아DB, 톰캣 컨테이너 생성 ( 공용폴더와 연결 )

    컨테이너 생성시 공용폴더오와 연결시켜 로컬에서 한번에 컨테이너 안으로 파일을 복사할 수 있게 만든다 

    # -v : 컨테이너의 특정 폴더와 서버의 특정 폴더를 연결해 주는 옵션
    # -v 서버의 폴더 경로:컨테이너의 폴더 경로
    docker run -d --name mariadb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=gudi@gdj78 
    -v /home/ec2-user/db:/var/lib/mysql mariadb

    DBeaver 에서도 web_user 를 계정 만들어서 권한을 부여하고 실제로 잘 생성되었는지 확인한다 

    # 2. web_user 생성 및 권한 부여
    create user 'web_user'@'%' identified by 'admin@pass';
    grant all privileges on *.* to 'web_user';
    select * from mysql.user;

    로컬에서 프로젝트 데이터베이스를 덤프뜬다

    # 4. filezilla 를 통해 백업 파일 서버로 이동
    
    # 5. 백업 파일을 컨테이너로 이동
    docker cp ./my_dump.sql mariadb:/home/
    
    # 6. 복구(하기 전에 해당 이름의 데이터베이스가 존재)
    create database gdj78_semi_beansmarket;
    # [mysql|mariadb] -u root -p [데이터베이스명] < [가져올경로]
    docker exec -it mariadb /bin/bash
    mariadb -u root -p gdj78_semi_beansmarket < /home/my_dump.sql
    
    
    ### 톰캣 연동
    docker run -d --name tomcat -p 80:8080 
    -v /home/ec2-user/webapps:usr/local/tomcat/webapps tomcat:9.0

    #2. C:\upload 가 아닌 리눅스 운영체제에 맞게 경로를 수정( 중요 )

    #3. 로컬에 있는 프로젝트 파일을 WAR 로 빌드한다

     

    #4. 서버에 올린다(로컬에서 프로젝트 war 를 서버로 이동, 그 후 컨테이너에 집어 넣는다)

    #5. 쿼리문의 대소문자 구분하지 않기 위해 설정을 따로 해줘야한다

    docker exec -it tomcat /bin/bash
    apt-get update -y
    apt-get install vim -y
    docker exec -it mariadb /bin/bash

     

     

    vim my.cnf

    1. 수정할 줄까지 방향키를 눌러 이동한다

    2. 수정 모드로 바꾸기 위해 i 를 누른다

    3. 대소문자를 구분을 하지 않기 위해 아래의 코드를 삽입한다

    lower_case_table_names=1

    4. ESC 키를 누른다 

    5. :wq 입력 후 엔터 누르면 파일 저장 및 나가기가 된다 

     

    #6. 서버에서 톰캣 및 마리아DB 를 실행한다

    정상적으로 데이터베이스와 연결되어 페이지가 보인다

    # 1. mariadb 컨테이너 실행
    # -v : 컨테이너의 특정 폴더와 서버의 특정 폴더를 연결해 주는 옵션
    # -v 서버의 폴더 경로:컨테이너의 폴더 경로
    mkdir db
    
    docker run -d --name mariadb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=gudi@gdj78 
    -v /home/ec2-user/db:/var/lib/mysql mariadb:11.3
    
    # 2. web_user 생성 및 권한 부여
    create user 'web_user'@'%' identified by 'admin@pass';
    grant all privileges on *.* to 'web_user';
    select * from mysql.user;
    
    # 3. DB 에서 덤프 해 오기
    #[mysqldump|mariadb-dump] -u root -p [데이터베이스명] > [내보낼경로]
    mariadb-dump -u root -p gdj78_semi_beansmarket > D:/my_dump.sql
    
    # 4. filezilla 를 통해 백업 파일 서버로 이동
    
    # 5. 백업 파일을 컨테이너로 이동
    docker cp ./my_dump.sql mariadb:/home/
    
    # 6. 복구(하기 전에 해당 이름의 데이터베이스가 존재)
    create database gdj78_semi_beansmarket;
    # [mysql|mariadb] -u root -p [데이터베이스명] < [가져올경로]
    docker exec -it mariadb /bin/bash
    mariadb -u root -p gdj78_semi_beansmarket < /home/my_dump.sql
    
    
    ### 톰캣 연동
    # 1. 컨테이너 실행
    docker run -d --name tomcat -p 80:8080 
    -v /home/ec2-user/webapps:/usr/local/tomcat/webapps tomcat:9.0
    
    # 2. 404 발생 해결
    cd webapps
    mkdir ROOT
    cd ROOT
    mv ../../index.html ./index.html
    
    # 3. webapps/photo 폴더 만든 후 이미지 넣기
    # 123.456.789.3/photo/이미지명 으로 이미지 잘 나타나는지 확인
    
    # 4. 소스 내에서 업로드 경로를 변경 해 준다.
    # C:/upload -> /usr/local/tomcat/webapps/photo
    # 필요한 경우 DB 의 IP 와 비밀번호도 변경 해 준다.
    # 빌드
    
    # 5. tomcat 컨테이너 정지 해 준다.
    docker stop tomcat
    
    # 6. war 파일 ROOT.war 로 변경 후 FIlezila 를 통해 업로드
    
    # 7. 권한을 변경해 준다.
    sudo chmod -R 777 ROOT.war
    
    # 8. 컨테이너 작동
    docker start tomcat

     

    1. 로컬 vs 클라우드 차이점

    2. IDC vs 클라우드 차이점

    클라우드 장점 : 시작하기 좋다, 무료, 서버 관리가 쉽다

    클라우드 단점 : 트래픽이 많아지면 과금되어서 어쩔 수 없지 IDC 센터에 입주하게 된다

    3. IDC 장점

    트래픽이 많아져도 추가적인 비용을 지불하지 않아도 된다 

    단점 : 증설이 쉽지 않다 서버 설치 비용이 매우 크다 

    4. 방화벽?

    외부 접속을 허용/차단할 수 있음

    5. 기본적으로 허용 포트

    22, 3306, 80, 8080

    6. AWS 운영체제는 리눅스 명령어 중에서 docker ps 는 무슨 명령어인가요?

    ps 는 현재 실행중인 프로세스들을 조회하는 명령어

    7. ls 는 ?

    현재 위치의 파일과 폴더들을 보여주는 명령어

    8. rm 은 ?

    파일이나 디렉토리를 지우는 명령어

    9. permission denied 는 뭐예요?

    명령어를 실행할 권한이 없을 때 뜨는 문구

    10. permission denied 가 뜨면 어떻게 해야해요?

    chmod (파일의 권한을 변경)

    chown (파일의 소유자나 그룹을 변경)

    sudo(관리자 권한 실행) 

    11. rwxrwxrwx 소유주:그룹:나머지
    rwx 읽기 쓰기 실행

    12. docker 란?

    가상화 플랫폼이다

    13. image 는 뭐고 톰캣은 뭔가요?

    프로그램의 원본 그 자체인거고 톰캣은 그 이미지를 통해 만들어진 프로세스이다

    14. image 를 다운로드 받는 명령어는?

    docker pull

    15. image 를 확인하는 명령어는?

    16. 컨테이너를 실행 할때 -v 옵션은 무엇인가요?

    도커랑 aws 폴더와 연결(매핑)하는 옵션으로 컨테이너를 지워도 aws 로컬에 저장되어있기 때문에 다시 복구가된다

    17. rwx 가독성이 안좋아서 숫자로 표현하자 했는데 표현 방식을 설명

    r 은 4 w 는 2 x 는 1 로 모두 더한 값을 권한으로 설정하면 된다

    18. 디렉토리나 파일을 지우고 싶을때 사용하는 명령어는?

    rm 이다

     

    위의 문제 다음주 월요일 5월 20일

     

     

    'AWS|Docker' 카테고리의 다른 글

    73일차 - 프로젝트 빌드 및 배포  (0) 2024.05.13
Designed by Tistory.