LEMP docker 를 만들어보았습니다.(버그있음) 정보
LEMP docker 를 만들어보았습니다.(버그있음)본문
LEMP_docker 입니다.
명령어 한줄로 nginx, php, mariadb를 설치하고 실행해줍니다.
각각의 버전은 수정도 가능합니다. 버그가 있는데 도움을 부탁드립니다.
버그는 아니고, mariadb 로그파일 저장기능이 없습니다.
1. docker 와 docker-compose 를 설치합니다.
2. 소스를 다운받습니다. git clone https://github.com/minotech/LEMP_docker.git
3. 해당 폴더에 들어가서 docker-compose up 실행하면 끝입니다. 아래글은 설명
4. LEMP_docker 폴더 밑에 docker-compose.yml 파일과 4개의 하위 폴더가 있습니다.
- www 폴더는 웹루트 폴더입니다. 웹소스를 복사해 넣으세요..
- nginx 폴더 아래 conf.d/default.conf 파일을 이용해서 설정을 변경할 수 있습니다.
- php-fpm 폴더 아래에 설정파일 두개가 있습니다.
docker-compose.yml 에서 설정파일 두개중 하나를 선택하여 입력하면 됩니다.
- mariadb 폴더 아래에는 데이타가 저장되는 data 폴더와 설정파일이 my.cnf가 있는 config 폴더가 있습니다. log 폴더는 작동하지 않습니다(방법을 찾는중).
5. docker-compose.yml 파일을 잘 보시면 volumes 부분의 앞부분이 host 컴퓨터의 폴더이고,
:뒷부분이 컨테이너 폴더입니다. 컨테이너 폴더는 건드릴 필요없고, host 컴퓨터 부분만 변경하면 됩니다.
- ./mariadb/data:/var/lib/mysql
예를 들어 이부분을 보면 ./mariadb/data 현재 디렉토리밑의 mariadb/data 폴더를 의미합니다.
:/var/lib/mysql 이것은 컨테이너의 폴더입니다.
즉 컨테이너에서 /var/lib/mysql에 저장될 데이타를 host 컴퓨터의 ./mariadb/data로 저장시킨다는 의미입니다.
6. db: 그누보드등에서 db서버의 host를 주소나 localhost로 넣으면 안됩니다.
여기에 적여있는 db를 host이름에 넣어주세요..(중요)
7. 실행할때 docker-compose.yml 이 있는 폴더에 가서 다음 명령어로 실행시킵니다.
$docker-compose up
ctrl-z 를 누르면 종료없이 빠져나올수 있으며 백그라운드로 실행됩니다.
ctrl-c 를 누르면 종료됩니다. 또는 docker-compose stop 과 같은 명령어입니다.
8. 그누보드 신규 설치는 테스트하였습니다.
그런데, 기존 소스를 복사해와서 실행 시킬 때, 자동등록방지 캡챠가 안나오고 있습니다.
해결책을 알려주시면 감사하겠습니다.
해결되었습니다. 감사합니다.
참고로 DB를 백업, 복원하는 법입니다.
일반백업 :
$sudo mysqldump -u root -p비밀번호 --databases DB명 > /backup.sql
비밀번호 있는경우 -p비밀번호 추가 (p와 비밀번호사이 공백없음)
도커백업 :
$docker exec -i 컨테이너명 mysqldump -u root -p비밀번호 --databases DB명 > /backup.sql
일반복원 :
mysql -u root -p비밀번호 < ./backup.sql
도커복원 :
$docker exec -i 컨테이너명 mysql -u root -p비밀번호 < ./backup.sql
2
댓글 13개
docker-compose build php
명령을 수행하셔야 합니다.
build용 docker 파일은 /php-fpm/dockerfile/Dockerfile 에 있네요.
수행을 안하시면 php 확장 모듈과 그에 필요한 기본 라이브러리리가 설치되지 않습니다.
그리고 docker-compose 로 build 시 build 설정에 있는 Dockerfile을 사용하게 됨으로
docker-compose.yml php 파트에 다음 설정이 추가되어야 합니다.
php:
build: ./php-fpm/dockerfile
확장모듈을 추가하고 싶으면 그때 빌드해도 됩니다.
php-gd는 설치되어 있지만, 실제 이미지 모듈인 libpng, libjpeg 가 설치되어 있지 않았습니다.
빌드해서 올려놓은 이미지를 새로 빌드하셔야 할것 같습니다.
docker shell에서
apt-get update
apt-get install libfreetype6-dev libjpeg62-turbo-dev libpng12-dev
해보니, 다시 설치를 하던데요.. 한번 해보세요.
https://sir.kr/qa/346052
일반적으로 docker 환경은 컨테이너라서 그냥 root 권한으로 설정합니다.
data폴더를 root로 소유자를 변경하면 도커가 쓰기모드로 들어갈때 root 권한으로 쓰지 않아요...
새로운 사용자를 만들어서 쓰기로 되드라고요..그래서 777로 해야만 쓰기가 되는것 같습니다.
php-fpm 컨테이너로 들어가면
/usr/local/etc/php-fpm.d/www.conf 를 보시면
user = www-data
group = www-data
로 되어 있습니다.
777로 변경시 정상 동작한다면, 이 부분이 문제일거라고 보네요.
data 폴더만 볼륨 마운트에서 제외 하거나, 그냥 php-fpm 을 root 권한으로 설정하면 될것 같네요.
찾아낸 결론은 docker-compose파일 ftp부분에 user: "1000:1000" 이것을 추가해야하는 겁니다..
1000유저는 /etc/passwd 에 나와있는 user입니다.. (저같은 경우 ftpuser)
ftpuser:x:1000:1000:ftpuser:/home/ftpuser:/bin/bash : /etc/passwd 파일 내용)
root:x:0:0:root:/root:/bin/bash
그런데 root는 0번인데, 0번으로 세팅하면 제대로 안됩니다. 다른 유저가 나오네요..
즉 user부분을 1000번으로 세팅하고, data폴더의 소유자를 1000번에 해당하는 사용자이름으로
모두 변경해주면 777로 안해도 정상적으로 나옵니다...
결국 방법을 찾아냈네요.. 감사합니다.
Starting nginx ...
Recreating php-fpm ...
Starting nginx ... error
ERROR: for nginx Cannot start service nginx: driver failed programming external connectivity on endpoint nginx (dc60e52c7a31e9e904937eb2fb186f26b3ab5358ccc44ed212da2cc05e66ffcd): Error starting uStarting mariadb ... error
ERROR: for mariadb Cannot start service db: driver failed programming external connectivity on endpoint mariadb (1102cd179b3e96d4bdacf65203ee692133100f5d033cbb57dfe065b62eda11cf): Error starting Recreating php-fpm ... done
ERROR: for nginx Cannot start service nginx: driver failed programming external connectivity on endpoint nginx (dc60e52c7a31e9e904937eb2fb186f26b3ab5358ccc44ed212da2cc05e66ffcd): Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use
ERROR: for db Cannot start service db: driver failed programming external connectivity on endpoint mariadb (1102cd179b3e96d4bdacf65203ee692133100f5d033cbb57dfe065b62eda11cf): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use
ERROR: Encountered errors while bringing up the project.
이런 에러가 발생하는데... 어떤 이유일까요.. ?