네이버 클라우드 캠프/Spring Boot & React

[Docker] 도커로 앱 배포하기 (2)

graph-dev 2023. 8. 9. 17:39
728x90

도커 심볼 로고

 

도커 네트워크

 이전 글에서 도커에는 네트워크라는 것도 있다고 했습니다. 이 네트워크를 사용해서, 간단히 글을 작성할 수 있는 웹사이트, 블로그 앱 등으로 유명한 워드프레스(wordpress)라는 무료 오픈소스 소프트웨어를 실행해보겠습니다.

 

https://ko.wordpress.org

 

Blog Tool, Publishing Platform, and CMS - WordPress.org 한국어

아름다운 웹사이트, 블로그, 또는 앱을 쉽게 만드는 데 사용할 수 있는 오픈 소스 소프트웨어

ko.wordpress.org

 

 

다시 서버에 접속합니다.

ssh root@[공인아이피주소]

 

접속 후 도커 네트워크를 생성하겠습니다. 이름은 wordpress000net1 으로 설정했습니다.

docker network create [네트워크이름]

도커 네트워크 생성

 

이 네트워크 이름을 기억해두고, 이제 긴 명령어를 작성하겠습니다. 내용을 먼저 설명드리겠습니다.

  • Root 비밀번호를 지정: myrootpassword
  • 스키마 지정: wordpress000db
  • 사용자(USER) 생성: wordpress000kun
  • 사용자(USER) 비밀번호를 지정: wkunpassword
  • 도커 허브 등에 기배포된 mysql 이미지를 내려받아 사용
  • 유니코드 언어 설정: utf8
  • 인증방식(default-authentication-plugin): mysql_native_password (기본 패스워드 방식) 설정
docker run --name mysql000ex1 \
		   --net=wordpress000net1 \
		   -e MYSQL_ROOT_PASSWORD=myrootpassword \
           -e MYSQL_DATABASE=wordpress000db \
           -e MYSQL_USER=wordpress000kun \
           -e MYSQL_PASSWORD=wkunpassword \
           mysql --character-set-server=utf8mb4 \
           --collation-server=utf8mb4_unicode_ci \
           --default-authentication-plugin=mysql_native_password

 

이제 MySQL Community Server가 실행되었으므로 다른 조작이 안됩니다. 터미널을 새로 열어서 다시 서버에 접속합니다.

 

조작 불가능

 

새로운 터미널에서, 몇가지 옵션을 수행하겠습니다.

  • 백그라운드에서 실행하고, it 옵션으로 키보드를 통해 컨테이너 내부 조작
  • 네트워크 연결
  • 포트는 8085로 80포트 접속합니다.
  • 환경변수 4가지를 설정합니다. 워드프레스 DB관련 HOST, DB 이름, 사용자, 비밀번호를 설정합니다.
    • WORDPRESS_DB_HOST=mysql000ex1
    • WORDPRESS_DB_NAME=wordpress000db
    • WORDPRESS_DB_USER=wordpress000kun
    • WORDPRESS_DB_PASSWORD=wkunpassword
  • 마지막으로, wordpress를 실행합니다.

 

 적용하면 아래와 같이 명령어를 입력하면 됩니다.

docker run --name wordpress000ex1 -dit \
		--net=wordpress000net1 -p 8085:80 \
        -e WORDPRESS_DB_HOST=mysql000ex1 \
        -e WORDPRESS_DB_NAME=wordpress000db \
        -e WORDPRESS_DB_USER=wordpress000kun \
        -e WORDPRESS_DB_PASSWORD=wkunpassword wordpress

이제 컨테이너 상태를 확인하면 아래와 같이 두개의 이미지(wordpress, myssql)이 실행되고 있음을 알 수 있습니다.

이제 8085포트로 접속해보겠습니다. 공인아이피:8085를 주소창에 입력합니다.

최초 워드프레스 설치 화면
워드 프레스 설정

이렇게 설정하고, "워드프레스 설치"를 눌러줍니다. 이제 설치가 끝났습니다.

 

설치 후 화면

 

이제 로그인을 합니다. 앞서 설정한대로 입력합니다. 그러면 아래와 같은 화면으로 접근합니다.

관리자 페이지입니다. 글을 작성해봅니다.

최초 로그인 후 워드프레스 화면

 

글을 작성하려면 글 > 새로 추가를 누르고 글을 작성하고, 공개버튼을 누르면 됩니다. 

 

작성 후 화면

 

위와 같이 제목과 내용이 잘 보여지는 것을 확인할 수 있습니다.

 

도커 내부 파일을 home으로 옮기기

 추가로 도커 내부에 있는 파일을 home 디렉토리로 옮기는 방법을 정리했습니다. 먼저 apa000ex1이라는 이름으로 httpd 패키지를 설치합니다.

docker run --name apa000ex1 -d -p 8089:80 httpd

도커 이미지 설치

 이미지를 바탕으로 만든 컨테이너를 실행시켜 도커 내부로 접속합니다. 실행시킬때는 /bin/bash 꼭 붙여주시고, exec 명령어와 -it 옵션을 통해 실행과 동시에 키보드로 내부를 조작할 수 있게 설정해줍니다.

docker container exec -it apa000ex1 /bin/bash

도커 내부로 접속

 

이제 도커 내부의 index.html이라는 파일을 외부에 있는 서버 home 디렉토리로 복사해보겠습니다. cp 명령어를 사용하면 됩니다.

docker cp apa000ex1:/usr/local/apache2/htdocs/index.html /home

도커 내부의 index.html 경로

 

 해당 apache2 도커 내부에서 exit 명령어로 docker-test-server로 나옵니다. 서버 디렉토리에서, 위 명령어를 실행합니다. 그 다음 /home 디렉토리에서 내부 파일을 확인하면, index.html 파일이 있는 것을 알 수 있습니다.

 

도커 외부에서 index.html 복사 후 생성된 모습

 이렇게 잘 복사된 것을 확인했습니다. 도커 컨테이너 이름:경로 파일로 잘 접근하면, 해당 내부에 있는 파일도 잘 끄집어낼 수 있습니다.

 

도커 볼륨(Volume)

마지막으로 볼륨에 대해 정리하고 마무리하겠습니다. 

먼저 /home/root/test 라는 디렉토리를 만듭니다. mkdir 명령어로 만들어 주고, 해당 디렉토리로 이동합니다.

mkdir /home/root
mkdir /home/root/test
cd /home/root/test

 

이 디렉토리에서 볼륨을 생성해주고 그 내부 정보를 확인합니다.

# volume 생성
docker volume create volume000ex1
# volume 내부 정보 확인
docker volume inspect volume000ex1

docker volume 생성

 

 이제 내부 정보를 보면 생성날짜, 마운트 포인트, 이름 등이 나타나있음을 알 수 있습니다.

 

볼륨을 활용한 컨테이너 생성 및 실행

 

추가로 이 볼륨값(volume000ex1)을 이용해서  apa000volumeex2라는 컨테이너를 생성하고 실행할 수 있습니다. 아래와 같이 코드를 작성해줍니다. 포트는 8090으로 설정해서 겹치지 않게 했습니다.

docker run --name apa000volumeex2 -d -p 8090:80 \
			-v volume000ex1:/usr/local/apache2/htdocs httpd

위 코드에 더해서 apa000volumeex2로 접속할 수 있습니다. 접속이 잘 이루어지는 것으로 보아 잘 생성된 것이라 볼 수 있습니다.

 

docker 볼륨을 활용한 컨테이너 생성

 

볼륨을 삭제해보겠습니다. 삭제 명령어는 다음과 같습니다.

# docker volume 삭제
docker volume rm volume000ex1

그런데 그냥 삭제가 되지 않습니다. container를 중지시키고 삭제해야 합니다. 

 

 

docker volume 삭제시 에러

그러면 관련 컨테이너인 apa000volumeex2를 정지 후, 다시 삭제해보겠습니다.

먼저 정지시킨 후, 화면입니다.

볼륨과 관련된 컨테이너 정지

 

컨테이너를 삭제하고, 그 다음에 볼륨 삭제를 진행합니다.

컨테이너 삭제 후 볼륨 삭제

 

이렇게 볼륨 삭제까지 완료했습니다. 

 

 도커 네트워크를 통해 wordpress 소프트웨어도 실행해보고, 볼륨을 통해 도커 컨테이너 내부 파일에 접근하고 편하게 새롭게 컨테이너를 생성할 수 있음을 배웠습니다.