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