Server/Docker

[Docker]M1 Mac mysql wordpress 연동

wonhy2ok 2021. 9. 19. 17:07

안녕하세요. 두 번째 시간이네요. 맥북을 처음 받고 어쩔 줄 몰라 허우적대고, 이제는 완전히 적응하기 위해 프로젝트들을 맥북에 넣고 작업을 하고 있어요. 내 맥북은 정말 잘 다뤄야지 다짐해서, '인터넷에서 다운받아 설치하면 어지럽다' 등 구글링이 많아 homebrew 설치를 지향하는 방향으로 대부분의 툴들을 설치하였죠. 그중 도커 얘기도 많이 나와 '컨테이너에서 효율적으로 프로그램을 관리한다..' 내 맥북은 소중해서 더 끌리고, 마침 공부하고 싶은 영역이었어요. 글을 읽어봐도 컨테이너 역할이 와닿진 않고, 제가 직접 다루면서 느끼는 게 좋아서 계속 만져보려 합니다.

 

오늘은 M1 mac(실리콘 맥)에서 mysql용 컨테이너와 wordpress용 컨테이너를 설치하고, 연동해서 wordpress 메인화면까지 띄우는 연습을 해볼 것입니다!

 

과정부터 소개드릴게요

 

1. MySQL 설치

2. MySQL DB 생성 및 사용자 추가(권한 부여)

3. WordPress 설치

4. WordPress 블로그 개설

 

1. MySQL 설치

우선 알려드릴 url이 있어요.

 

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

Build and Ship any Application Anywhere Docker Hub is the world's easiest way to create, manage, and deliver your teams' container applications.

hub.docker.com

위 사이트에서는 도커 이미지들의 설치할 수 있는 이미지와 버전을 확인할 수 있는 사이트예요.

 

내가 설치하고자 하는 이미지를 검색하고 난 뒤에 설치하고자 하는 버전을 확인하시고, 우리 서버에 맞게 설치하시면 되겠습니다.

 

저는 모두 공부용이기 때문에 이번 소개에서는 모두 latest버전의 mysql과 wordpress를 설치할 거예요!

 

그렇담 먼저 위의 사이트인 도커허브에 mysql을 검색해볼게요

 

mysql 검색화면

화면 상단의 바에서 mysql을 검색하면 아래에 관련된 서치 할 수 있는 이미지 리스트들이 나열됩니다.

 

우리는 맨 상단의 mysql을 선택합니다.

 

mysql 이미지 상세화면

보시면 화면 중앙쯤에 'Tags'라는 네비게이션바가 있을 거예요. 클릭하고 들어가면 아래에 버전 리스트들이 나열됩니다.

 

저희는 그중 latest 버전을 설치할 예정입니다.

 

여기서 주목할 점은 OS를 확인해주시기 바랍니다. latest의 설치 가능한 OS는 linux/amd64입니다.

 

확인만 하고 terminal을 켜줍니다.

 

mysql:latest 설치 명령어 실행

위의 이미지에서 저는 한 줄로 'docker run -it -d --name mysql mysql:latest' 작성하고 실행시켰습니다.

 

그러나 이미지를 제대로 설치하지 못하고 실패하고 말았는데요. 명령어 아래 도커 메시지가 눈에 띄네요.

 

저는 이렇게 이해했어요. 이전 게시글에서 도커를 설치할 때 도커 홈페이지에서 인텔용과 M1용을 구분해서 설치 파일을 제공했었어요.

 

그때의 차이는 intel 이 amd64, m1 이 arm64 버전으로 설치 파일을 제공했었죠.

 

그렇담 내가 사용하는 docker는 기본적으로 arm64 버전의 이미지들을 다운받을 수 있는 것인가 이해했죠.

 

중요한 건 amd64로 제공하는 mysql 혹은 수많은 이미지들은 M1에서 어떻게 설치하는가죠?

 

방법은 간단했어요.

docker run -it -d --name mysql \ 
-e MYSQL_ROOT_PASSWORD=qwer1234 \
--platform linux/amd64 \
mysql:latest

--platform linux/amd64

 

위의 명령어를 추가해주면 문제없이 다운받더라구요!

 

그리고 '-e MYSQL_ROOT_PASSWORD=qwer1234'

 

이 명령어가 빠진 채로 설치를 진행하게 되면 도커에서 mysql컨테이너를 실행할 때 필수 환경변수가 누락되었다고 실행이 아예 안되더라고요.. 그러니 위의 명령어는 꼭 추가해서 입력이 필요합니다. 뒷부분의 'qwer1234'는 사용하고 싶은 비밀번호 아무거나로 지정해주세요!

 

그렇다면 mysql이 제대로 설치되었는지 확인해볼까요?

 

2. MySQL DB 생성 및 사용자 추가(권한 부여)

docker mysql cli 접속

mysql을 정상적으로 설치 완료한 후 docker 데스크톱에 mysql이 생성되었을 겁니다. 이제 wordpress 연동할 DB와 사용자 계정을 만들어 보겠습니다. mysql 행의 우측이 마우스를 가져가면 cli 버튼이 보이실 겁니다. 버튼을 누르고 cli 콘솔로 진입을 수행합니다.

-- root 아이디로 mysql 접속
mysql -u root -p

root의 계정으로 mysql에 접속합니다. 비밀번호를 물어보면 위에서 환경변수로 설정한 비밀번호를 작성해주시면 됩니다.

저는 위에서 MYSQL_ROOT_PASSWORD=qwer1234라고 작성하였으니, 'qwer1234'입니다

mysql 접속화면

다음은 계정과 DB를 생성하고, 모든 아이피에서 접근 가능할 수 있도록 권한 부여하도록 하겠습니다. 아래 쿼리에서 사용하고자 하는 사용자 아이디와 비밀번호로 변경해서 사용하시면 됩니다.

-- mysql DB에 연결
use mysql;

-- 계정생성
create user codewagon@localhost identified by 'qwer1234';
create user codewagon@'%' identified by 'qwer1234';
flush privileges;

계정이 생성된 후 user 테이블

localhost는 본인 주소(127.0.0.1), % 는 모든 아이피 주소를 뜻하며, 결국 모든 환경에서 접근이 가능할 수 있도록 작성하였습니다. 위처럼 select host, user from user; 쿼리로 새로 추가한 user id와 host 맞게 출력되었다면 성공입니다. 생성할 DB 이름도 알맞게 변경해주시면 되겠습니다. 권한은 위에서 생성한 계정의 아이디로 작성해주시면 되겠습니다.

-- DB 생성
create database docker_db default character set utf8;

-- 새로만든 계정에게 CRUD권한 추가(삽입,검색,변경,삭제권한 모두 부여)
GRANT ALL privileges ON docker_db.* TO codewagon@'%';
GRANT ALL privileges ON docker_db.* TO codewagon@localhost;
flush privileges;

db 리스트와 계정 연결정보

 위의 DB 생성 쿼리와 연결 권한 추가 쿼리를 정상적으로 수행했다면

show databases;  -> DB 생성 확인

show grants for codewagon@localhost; -> 사용자 계정의 localhost의 CRUD 권한 확인

show grants for codewagon@'%'; -> 사용자 계정의 모든 아이피의 CRUD 권한 확인

 

그렇다면 정리해봅시다.

저의 기준으로

DB_NAME 은 docker_db

USER_NAME 은 codewagon

USER_PASSWORD는 qwer1234입니다

 

대망의 WordPress 설치입니다.

3. WordPress 설치

도커허브에서 wordpress 검색 후 세부 검색에서 latest 검색 

wordpress의 latest에서 설치 가능한 버전을 확인해봅시다.

 

mysql 때와는 다르게 wordpress는 arm64가 있군요? 바로 설치를 진행해봅시다!

docker run -it -d --name wordpress \
-e WORDPRESS_DB_PASSWORD=qwer1234 \
-e WORDPRESS_DB_USER=codewagon \
-e WORDPRESS_DB_NAME=docker_db \
--link mysql:db \
-p 18080:80 \
wordpress:latest

이 부분에서 유의하실 점이 있습니다..

 

wordpress 환경변수를 설정하는 부분에서 저 같은 경우

 

-e WORDPRESS_DB_PASSWORD=qwer1234
-e WORDPRESS_DB_USER=codewagon
-e WORDPRESS_DB_NAME=docker_db

 

 감이 오실까요?ㅎ

위의 환경변수는 아래에 다시 wordpress cli에서 확인하겠습니다.

 

--link는 mysql DB와 연동하는 부분인데요. docker는 컨테이너를 생성할 때 '-p 호스트 포트:컨테이너 포트'를 지정해주지 않고 생성하게 되면 컨테이너를 종료한 후 다시 실행할 때 포트가 바뀌어서 실행되었어요. 그리고 저도 검색을 해보니 재시작을 하면 ip가 바뀌어 버린다고 해요(위의 wordpress는 -p를 명시해주었기 때문에 컨테이너를 종료했다 켜도 18080 포트로 접근 가능합니다!)

 

이러한 문제를 해결하기 위해 --link는 ip가 아닌 컨테이너 이름을 기반으로 통신할 수 있도록 돕는다고 합니다!

 

저 같은 경우엔 컨테이너 이름이 mysql이고, 연동할 때 사용할 별칭을 db라고 작성하였습니다!

--link 컨테이너이름:별칭

 

컨테이너 이름은 mysql을 생성할 때 --name 에서 작성하신 이름을 그대로 작성해주시면 됩니다.

 

별칭 부분은 자신이 구분이 가게끔만 마음대로 작성해주시면 되겠습니다!

 

그렇담.. 이제 제대로 실행이 되고 있는지 확인해볼까요?

 

localhost:18080 으로 접속한 화면
예시1
예시2

혹여나, 예시1과 같은 화면이 나오고 예시2와 같이 오류가 나와 진행이 안되었다면, DB와 연결이 되지 못한 겁니다..

 

만일 이러한 상황에 부딪치게 되었을 때는 침착하게 다시 wordpress 재설치를 수행하고 환경변수에 틀린 것이 없는지, mysql 계정이 확실히 생성된 것이 맞는지 확인합니다.

 

만일 모두 정상적으로 입력했다고 생각되는데도 안된다면 wordpress cli를 접속합니다.

# echo $WORDPRESS_DB_PASSWORD
qwer1234
# echo $WORDPRESS_DB_USER
codewagon
# echo $WORDPRESS_DB_NAME
docker_db

wordpress를 설치할 당시 환경변수와 동일한지 혹은 출력이 안 되는 것이 있는지 확인합니다. 위처럼 정상적으로 출력이 된다면 다음은 파일을 열어 수정할 것입니다.

ls 명령어로 파일 탐색을 진행하면 위 화면처럼 파일리스트가 출력될 것입니다. wordpress에서 db커넥션을 담당하는 파일은 wp-config-docker.php 파일입니다.

 

vim 편집기로 작업을 진행하고 싶으나, 저도 확인을 해보려고 하니, vim이 없더군요.. 그래서 설치해줍니다.

apt-get upgrade
apt-get update
apt-get install vim

위 3개의 명령어를 차례대로 입력하여 vim 에디터를 설치합니다.

 

그런 뒤, vi wp-config-docker.php 파일을 열어줍니다.

vi 편집기로 확인 wp-config-docker.php

보이시나요? 우리가 환경변수로 만든 WORDPRESS_DB_NAME, WORDPRESS_DB_USER, WORDPRESS_DB_PASSWORD.

getenv_docker()라는 함수 안에 감싸져 수행되는 저 부분이 DB커넥션 부분입니다.

 

혹여 다른 버전의 wordpress를 설치하셨다거나, 현재 저는 latest버전을 설치했지만 나중에 다시 업데이트되면서 다시 설치할 때는 위의 환경변수명이 바뀔 수도 있는 일입니다. 그러니 이러한 문제는 직접 원인을 찾아서 해결할 수밖에 없으니, 화면에서 나오는 오류들이 어떤 오류인지 확인하고 문제를 파악하는 일이 중요하다고 생각됩니다.

 

그리고 눈치채셨나요..? 바로 위에 getenv_docker() 함수를 정의하는 문장이 있는데, 대충 훑어보면 환경변수가 존재하지 않는 경우, 두 번째 파라미터의 값으로 대체한다는 내용 같습니다!

 

(오류가 발생한 분들만 아래의 방법으로 진행해주시면 되겠습니다!)

 

그렇다면 우리는 위 사진에서 밑줄 친 3개의 라인의 getenv_docker(p1, p2)에서 p2 자리에 db 명, user 명, password를 각각 입력해줍니다!

그리고 도커 데스크톱에서 wordpress 만 재실행해주신다면 정상 작동할 것입니다.

 

그렇게 해도 안된다면,, 재가 세팅한 대로 그대로 진행해 보시길 추천드립니다.. 모두 오류가 나지 않았던 코드들만 모아서 작성한 내용입니다!

 

4. WordPress 블로그 개설

모국어 선택뒤에 나오는 블로그 개설정보입력 화면
개설 완료
개설 성공
wordpress와 연동 후 mysql테이블 변화

wordpress를 정상적으로 설치를 마치면, 우리가 만들었던 db안에 새로운 테이블들이 새로 생성되어 있는 모습을 확인할 수 있습니다.

 

이로써 docker에서 mysql과 wordpress연동이 마무리되었습니다.

 

이 글을 보면서 오류가 나오지 않길 바라며 작성하여서 내용이 길었습니다.. 제가 작문능력을 키워서 바로 머리에 꽂히는 글을 작성할 수 있도록 노력해보겠습니다.

 

읽어주셔서 감사합니다.

 

'Server > Docker' 카테고리의 다른 글

[Docker]M1 Mac에서 homebrew를 활용한 docker 설치  (2) 2021.07.15