2018. 9. 13. 18:31

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message




도커 에러....진짜.....컴터가 그냥 꺼지면....... 컨테이너가 종료 됬다가 다시 시작이 안된다..


구굴에서 아무리 찾아봐도...아파치 설정을 바꾸라는데...


컨테이너가 실행이 되야. 들어가서 설정을 바꾸든지 하는데....


안된다......


결국 찾은 답은,


도커는 새 컨테이너를 만드는게 답이다.


그래서 컨테이너만 실행하면 다 바로 사용할 수있게 세팅이 된 이미지를 commit해서 가지고 있던지,


아니면, 이미지 만드는 Dockerfile에 다 설정을 해놓고, 빌드해서 써야한다.



위 에러가...보니까, 아파치가 계속 실행되고 있어서인데....


그래서 Dockerfile만들때 아파치 자동실행을 끄던지 해야한다.ㅠㅠㅠ

Posted by Tyson
2018. 7. 3. 15:46

도커파일 만들다보면, 설정파일내 문자열을 수정할때가 있는데,



리눅스 명령어 중에, 파일안에 문자열 수정명령어가 sed 명령어이다.


그래서 파일안에 문자열을 sed 를 사용해서 수정하면 된다.


다른데는 

RUN sed -i "s/'database_name_here'/'wp'/g" wp-config.php

위에처럼 했다.

sed -i "s/[찾는문자열]/[수정문자열]" 파일명


이런순인데. 나는 저..>따옴표때문에 안되는거다.


그래서 찾아보니, 구분자로 / 대신에 #를 써도 된다고 해서....


RUN sed -i 's#short_open_tag = Off#short_open_tag = On#g' /etc/php5/apache2/php.ini


RUN sed -i 's#;date.timezone =#date.timezone = "Asia/Seoul"#g' /etc/php5/apache2/php.ini


위에처럼 했는데. 잘 먹힘다. 구분자로 #를 넣어서 했다.


Posted by Tyson
2018. 7. 1. 14:12

앞에서 설명한, Docker에서 아파치 재시작이 안되서, 


컨테이너 안에서 아파치 설정을 바꾸고, 그때그때마다, 이미지를 만들어서, 


그 이미지로 컨테이너를 생성해서, 에러나, 실행 유무를 확인했다.



먼저, 내가 작업하고 싶은 컨테이너 안에 들어가서 설정들을 바꾼다.


그리고, 


그 바뀐 설정들에서, 스냅샷같은거를 만들어야하는거다.


그래서 커밋을 한다.



#커밋(이미지 생성)

docker commit -p [컨테이너ID] [원하는저장 이미지명]:[버젼명_태그:생략가능]  

docker commit -p 1e3bd8faf374 tysondev


난  1e3bd8faf374 컨테이너를 tysondev란 이미지로 생성했다.


버젼명은 안썼는데, 생략가능하다. 생략하면, latest로 자동입력됨.


이때, 컨터이너에서 나가지 말고, 창을 하나 더 열어서, 새로 접속해서 작업하는게 편하다.


그리고, 이미지를 확인해보자~!


#이미지 확인(아이디)

docker images 


REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

tysondev           latest              2aa8258fdbb1        9 hours ago         712MB



이렇게 생성이 될거다.



그리고, 그 이미지로 컨테이너를 새로 생성한다.

#컨테이너 생성

docker run -p [외부포트:내부포트] -d -v [외부공유폴더:내부공유폴더] [이미지이름:버젼]

docker run -p 8383:80 -d -v /Users/tyson13/Documents/workspace/docker/front:/var/www/html tysondev:latest



#컨테이너 실행 확인

docker ps -a 


머 밑에처럼 나온다.


2번째꺼는 내가 지금 샐행중 컨테이너고, 그 위에꺼가, 방금 생성한거다.



CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                  NAMES

b1c3e235a86d        cherrydevos2:latest   "/bin/sh -c '/usr/sb…"   1 min ago         Up 8 hours          0.0.0.0:8383->80/tcp   friendly_kalam

a23fc3e235a8        origianl:latest   "/bin/sh -c '/usr/sb…"   8 hours ago         Up 8 hours          0.0.0.0:8385->80/tcp   first saaam



자, 근데, 실행이 안되어 있으면, 로그를 확인한다.



#실행 중단되어 있으면, 로그확인

docker logs b1c3e235a86d



#실행중이면, 컨테이너 접속

sudo docker exec -it b1c3e235a86d /bin/bash   



이런식으로 해서, 원본 컨테이너에서 설정을 바꾸면서, 계속 이미지를 만들어서 테스트 해보았다.


그리고, 이미지를 저장해서, 저장해놓던지, 레파지토리에 올리면 된다.


난 개인 소장용으로, 내 개인정보등도 세팅을 해놓아서, 그냥 저장해서 가지고 있다.



#도커 이미지 백업 (파일로 저장)

$ sudo docker save -o [저장할이름].tar [이미지 이름]

$ sudo docker save -o build-machin.tar build-machin


이런식으로 저장하면,  .tar파일이 생성된다.


이 파일을 회사사람들에게 공유해주던지, 가지고 있다가, 이 설정쓸때,


도커에서 불러오면 된다.


tar 로 묶어서 백업한 경우 load 명령을 사용하여 도커의 로컬 이미지 레포지토리에 넣어주어야 한다.

-i 옵션은 --input 임.

# docker load -i /root/container1.tar

확인을 위해 아래 명령을 입력해보자.

# docker images


이렇게 해서 사용하면 된다.


추가로, 설정 바꾸던, (원본 컨테이너에서는 나가지 말고, 계속 접속해서 작업하기를 추천한다.)


나갔다가, 컨터이너 종료가 되면, 에러가 있을떄, 컨테이너가 재시작이 안된다....


진짜...멘붕옴....ㅠㅠㅠㅠ 그안에 설정바뀐거, 중요파일까지 넣어놓았으면, 최악이다.


그래서 중요파일들은 공유폴더를 사용해서만 하자~!



도커를 사용하면서 느낀건.....내가 생각한거처럼 많이 까는게 아니고, 진짜 최소만 불러와서, 쓰는개념이라고 생각해야한다.



그리고, 한 컨테이너에 다 설치하는게, 아니고, 여러 컨테이너들을 포트로 연결해서 사용하는 개념으로 사용해야한다.


여러컨테이너 만들기 위해서 COMPOSE라는것도 있는데, 걔는 아직....ㅎㅎ


다음 포스팅에서 Dockerfile 작성에 대해서 쓰겠다.

Posted by Tyson
2018. 7. 1. 13:39

도커를 재대로 이해 못한상태에서, 컨테이너 들어가서, 


아파치 설정을 바꾸고 자꾸 재시작 하려니까.... 컨테이너가 종료되고, 실행이 안되는거다.


이게..처음에 개념을 잘못알고 있었는데, 컨테이너는 OS라기보다는 하나의 프로그램이 실행중이고,


거기에 웹서버 프로그램을 계속 돌리고있는거다.


그래서, 웹서버가 재시작을 하면, 컨터이너가 종료가 되는거다.


웹서버 이미지 Dockerfile를 보면, 마지막에 대부분 웹서버를 실행시킨다.


CMD /usr/sbin/apache2 -D FOREGROUND



이런 문구가 있는데,


이말은, 아파치를 백단말고, 앞단에서 계속 실행시킨다는 말이였던거다.


이걸 모르니....아파치 재시작을 하면 계속 컨터이너가 종료되고, 


아파치설정파일을 잘못 수정해서 에러가 뜨면, 실행이 안되던지.....


컨테이너 시작을 해도, 계속 에러가 뜨는거다.


도커 로그를 보면, 


httpd (pid 6) already running

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message


이런 문구들이 계속 뜨고, 실행이 안되다.


아마, 웹서버 계속 돌고있어서, 컨테이너가 실행될때, 다시 시작해야되는데, 실행이 안되는거같다.


인터넷 찾아보면, 


apache2 reload 


등과 같은 명령어를 사용하라고, 하는데, 이건 안되는거다.


결론은, 아파치 설정을 바꾸려면,


컨테이너를 죽였다가 다시 실행해야하는데, 


단점이 설정에 에러가 있으면, 컨테이너 자체가 실행이 안되고, 콘테이너 안에 들어갈 수가 없어서, 다시 수정도 못하는거다.


그래서 찾은 방법은


Dockerfile를 만들어서, 아파치 설정을 실행전에 바꾸고, 실행하는 방법을 해야한다.


근데, Docker명령어가 익숙치 않으니까, 이것도 일이다....


그래서 내가 선택한 방법은, 설정을 바꾸고, 바꾼 이미지를 떠서, 그 이미지로 새 컨테이너를 만들어 보는거다.



그 방법은 다음 포스트에서...


도커 개인 이미지 만들기(컨테이너 테스트하는 법) : http://tyson.tistory.com/142




Posted by Tyson
2018. 6. 30. 00:14


docker: Error response from daemon: Get https://registry-1.docker.io/v2/thomasbisignani/docker-apache-php-oracle/manifests/latest: unauthorized: incorrect username or password.



  ~ docker pull hello-world

Using default tag: latest

Error response from daemon: Get https://registry-1.docker.io/v2/library/hello-world/manifests/latest: unauthorized: incorrect username or password



위같은 에러가 떠서 보니까,


도커는 로그인할때, 


이메일에서 @이후꺼는 쓰면 안되네....


분명 이메일 썼을떄 로그인은 됐었는데....


도커에서 pull하려니까, 에러가 뜨길래....


docker login 


을 치고, 밑에처럼 @ 뒤에를 삭제하고 하니까, 되더라.

(아뒤는 예시)


Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.


Username (tyson@yahoo.com): tyson

Password: 

Login Succeeded




Posted by Tyson
2018. 6. 28. 15:26

도커가 최소 os다 보니까, 항상 한글이 깨진다.



locales 설치:

apt-get install locales


locale 설정:

export LANGUAGE=ko_KR.UTF-8
export LANG=ko_KR.UTF-8
locale-gen ko_KR ko_KR.UTF-8
update-locale LANG=ko_KR.UTF-8
dpkg-reconfigure locales



출처: http://pragp.tistory.com/entry/Docker-한글-설정하기 [Pragmatic Programming]


위처럼 해주고, 



그래도 vi 들어갔을때도 깨지면, 


vi 들어가서, 


 :set encoding=utf-8

:set encoding=euc-kr


위처럼 해주던지,


vi ~/.vimrc

또는

vi /etc/vim/vimrc (전체사용자)


들어가서, 

set encoding=utf-8

set fileencodings=utf-8,cp949


추가해준다.


출저 블로그 http://harryp.tistory.com/457



Posted by Tyson
2018. 6. 28. 13:25

아파치에, php, Oracle를 제일 많이 쓰는데, 


Oracle 연결할때 쓰는 oci8 세팅되어있는 도커를 찾다가, 좋은 이미지를 찾았다.



https://hub.docker.com/r/thomasbisignani/docker-apache-php-oracle/


https://github.com/davidgaya/docker-apache-php-oci



#도커 이미지 가져오기 

docker pull thomasbisignani/docker-apache-php-oracle


#도커 생성

docker run -p 8080:80 -d -v $(pwd)/sample:/var/www/html thomasbisignani/docker-apache-php-oracle


docker run -p 8080:80 -d -v /web/front:/var/www/html thomasbisignani/docker-apache-php-oracle


서버의 web/front 랑 도커의 폴더랑 연결해 놓는다.


서버의 web/front 폴더에 파일 올리면, 된다.



#도커 목록확인

docker ps -a


하면 실행중인 도커 목록 뜨고, id로 접속하면 된다.



#도커 접속

예)

sudo docker exec -it 7fd516 /bin/bash

sudo docker exec -it {id값} /bin/bash



기본에는 vi가 없어서, vim설치부터했다.


#vim 설치

apt-get update

apt-get install vim


#퍼미션 문제가 뜨길래, 폴더 권한 풀어줬다.

#폴더 권한 주기

cd /var/www

chmod 757 /var/www/html



#아파치 설정바꾸기

vi /etc/apache2/apache2.conf


에서 추가


<Directory /var/www/html/>

    Options Indexes FollowSymLinks

    AllowOverride All

    Require all granted

</Directory>




#프록시 설정해주기

#서버에 여러 도메인 사용시, 가상호스트 세팅을 해주고, 

reverse proxy 설정을 해줘서, 원하는 도메인으로 접속시 8080포트로 보내주는방법이다.


이런식으로 여러 도커 설정을 해줬다.


이건 내 서버 vhost 파일 위치다.

/usr/local/etc/apache24/conf/extra/httpd-vhost.conf

또는

/etc/httpd/conf 에 있다



#원본

<VirtualHost *:80 *:443>

    ServerName test.com

    SetEnv HOST test.com

    DocumentRoot "/web/front"

    ProxyPass / http://localhost:8080/

    ProxyPassReverse / http://localhost:8080/

    <IfModule dir_module>

        DirectoryIndex  index.html index.htm index.cgi index.php index.php5

    </IfModule>

    <Directory "/web/front">

        Options MultiViews FollowSymLinks ExecCGI

        AllowOverride All

        <IfModule authz_core_module>

            Require all granted

        </IfModule>

    </Directory>


    <FilesMatch "\.(php[345]?|phtml)$">

        SetHandler "proxy:unix:/run/php-fpm/php56-fpm.sock|fcgi://localhost"


    </FilesMatch>


    ErrorDocument 400 /_webstation_/400.html

    ErrorDocument 401 /_webstation_/401.html

    ErrorDocument 402 /_webstation_/402.html

    ErrorDocument 403 /_webstation_/403.html

    ErrorDocument 404 /_webstation_/404.html

    ErrorDocument 405 /_webstation_/405.html

    ErrorDocument 406 /_webstation_/406.html

    ErrorDocument 407 /_webstation_/407.html

    ErrorDocument 408 /_webstation_/408.html

    ErrorDocument 500 /_webstation_/500.html

    ErrorDocument 501 /_webstation_/501.html

    ErrorDocument 502 /_webstation_/502.html

    ErrorDocument 503 /_webstation_/503.html

    ErrorDocument 504 /_webstation_/504.html

    ErrorDocument 505 /_webstation_/505.html


</VirtualHost>



위 설정은 내 설정이므로, 각자 서버에 맞게 찾아서 세팅하세요.


역프록시 설정은



    ProxyPass / http://localhost:8080/

    ProxyPassReverse / http://localhost:8080/


위에 두줄 추가해주고, 하면 나같은 경우는 됬다.


그리고


"리눅스 가상호스트" 검색하면 많이 뜨니까, 가상호스트 세팅은 찾아서 해보세요.


이렇게만 해 놓으면 그래도 바로 Docker 사용가능하다.


사실 이만한 이미지는 없는거 같다.


vi 정도만 설치해주고, 콘테이너 안에서 대부분 설정따로 해줄만한거가 없기 때문에, 완전 빠르게 세팅했다.



시놀로지에서 프록시설정해주기

(http://tyson.tistory.com/135)




=======================================

참고 블로그 

http://m.assayo.com/board_view.html?board=forum_nas&pid=19139

Posted by Tyson
2018. 6. 28. 12:14

처음에 도커 이해가 안되는게, 


콘테이너 생성할때, 포트로 설정을 해야하는데, 


웹 서버들 80을 디폴트로 사용하는데,


80포트는 한번 사용하면, 다른 컨테이너에서 사용할수가 없는거다.


근데, 한 서버에 여러 도메인을 관리하면.....


컨터이너 별로 만들어서 사용하는데, 포트는 80 중복이 안되는데...어떻게 하라는거냐?????


이 개념이 이해가 안되니까, 웹에서 Docker를 사용하는게 한개밖에 안되면...너무 빡센거다.


그래서, 찾은 방법이 역프록시 방법이다.


예로, 호스팅 업체에는 


밑에 2개 도메인을 다 내 서버에 연결해놓은다. 

www.tyson1.co.kr 

www.tyson.2co.kr 


그리고, 서버에서 웹서버 콘테이너를 2개 만들고, 포트를 하나는 8081, 8082 이렇게 했다고 치면, 


아파치설정에서 가상호스트세팅에서, * 80 으로 들어오는것을 


reverse proxy (역프록시)로 


www.tyson1.co.kr 로 들어오는거는 localhost:8081  로 가게 하고,


www.tyson2.co.kr 로 들어오는거는 localhost:8082  로 가게 하면 되는거다.



리눅스 가상호스트 찾아보고,


아파치 설정에서, 


<VirtualHost *:80>

    ServerAdmin test@test.com

    DocumentRoot /var/www/html/

    ServerName www.tyson1.com

    ProxyPass / http://localhost:8081/

    ProxyPassReverse / http://localhost:8081/

    ErrorLog "logs/error_log"

    CustomLog "logs/access_log" common

</VirtualHost>


위에처럼, 


    ProxyPass / http://localhost:8081/

    ProxyPassReverse / http://localhost:8081/

두 부분을 추가해주던지 하면 된다.




이 방법을 못 찾으니까, 도커를 처음에는 웹서버 하나만 올릴수있는거면 왜 사용하지라는 고민을 많이했다.



그러다가, 도커에 가상호스트 구축 및 서브 도메인 연결하는 콘테이너가 있고, 사용하기 간단하게 만들어 놓은것을 찾았다.


밑에 두 블로그를 참조한거다.



https://blog.youngbin.kim/2017/07/10/docker-%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EA%B0%80%EC%83%81-%ED%98%B8%EC%8A%A4%ED%8A%B8virtual-host-%EA%B5%AC%EC%B6%95-%EB%B0%8F-%EC%84%9C%EB%B8%8C-%EB%8F%84%EB%A9%94%EC%9D%B8-%EC%97%B0%EA%B2%B0/



https://zeewhon.blogspot.com/2017/06/blog-post_13.html



  1. docker pull jwilder/nginx-proxy
  2. docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy
  1. docker run -d -e VIRTUAL_HOST=blog.youngbin.kim wordpress:latest


프록시 서버 콘테이너를 제일 먼저 생성해서, 80포트는 무조건 저걸 거치게 하고,


다음 콘테이너들 (실제 웹서버로 돌릴 콘테이너들 생성할때, VIRTUAL_HOST= 세팅에 도메인명 넣어주면, 


저 콘테이너로 역프록시를 자동 세팅해주는거다.


완전 대박이다!!


이게 해결되니까, 이제 도커를 엄청 이용할 수 있을거 같다.!!



그리고, 참고로, 난 시놀로지Nas에서 도커를 생성해서 웹서버 2개를 돌렸는데, 도커에서 80를 못써서 어떻게 할지 찾았는데,


시놀로지에서도 역프록시 세팅을 해서 여러개 올릴 수 있는 방법을 찾았다.


그 방법도 시놀로지 카테고리에 작성해 놓겠다.

(http://tyson.tistory.com/135)



참고 블로그

http://m.assayo.com/board_view.html?board=forum_nas&pid=19139







'컴퓨터 > Docker' 카테고리의 다른 글

도커 로그인 에러  (0) 2018.06.30
Docker Vim 한글 깨짐  (0) 2018.06.28
Apache PHP Oracle Docker 사용하기  (0) 2018.06.28
도커 도메인 세팅  (0) 2018.01.29
도커 컨테이너 생성하기  (0) 2017.05.11
Posted by Tyson
2018. 1. 29. 14:00

도커를 사용하면서, 도메인별로 포트를 어떻게 보내주는게 이해가 안되는거다.


웹서버 3개를 쓰려고, 콘테이너를 3개 만들었는데, 


포트는 8081,8082,8083 이렇게 했다고 치면,....


사실 80포트로 들어올수밖에 없는데..


어떻게 할까하다가 가상호스트에서 플록시로 포트를 해주던지

http://tyson.tistory.com/78


아니면, 콘테이너 실행할때, 도메인 세팅을 해주면 된다.


$ docker run --name wordpress -e VIRTUAL_HOST=wp.xxxx.com -d waog/rpi-wordpress




참고 블로그 : https://zeewhon.blogspot.kr/2017/06/blog-post_13.html

Posted by Tyson
2017. 5. 11. 15:01

 1. 도커 이미지 검색

docker images 

: 현재 다운 받은 이미지 목록

docker search centos

: centos 들어간 이미지 검색


docker pull centos:7.0

:뒤는 태그

centos 이미지 다운받음



docker ps -a : 실행중인 콘테이너 목록 보기



2. 콘테이너 실행



docker run -i -t --name centos_base -p 80:80 -v /dataRoom:/dataRoom centos bin/bash


-i -t 넣어야지 입력이랑 터미널 화면 볼수있음

-i가 입출력, -t가 tty ??


--name 콘터이너 이름 : 쓰고 싶은 이름


-p 외부포트: 내부포트

앞에꺼는 외부에서 들어오는 포트, 뒤에꺼는 콘테이너 안에서 사용할 포트



-v 외부폴더: 내부폴더 

폴더 공유함. 외부에 있는 폴더랑 콘테이너내에 저 경록의 폴더 생성후 둘이 공유


bin/bash 콘테이너 실행하면 bash로 실행되게함.





Posted by Tyson