도커 기본 다지기 2
기본적인 네트워크 개념이 필요함
ex) 아파치 웹 서버
서버, 클라이언트, 포트 등등의 개념이 필요함
=> 다행히도 네트워크 공부를 했고, 현재 국비 교육중에도 계속해서 사용하는 개념들이기 때문에(리눅스, 윈도우 서버) 큰 문제 없이 바로 해볼 수 있겠다는 생각이 들었음
- 도커가 웹서버를 사용하는 방식
=> 우리가 일반적으로 사용하는 방식
=> 도커를 이용해서 사용하는 방식
도커 컨테이너의 port - host의 port가 따로 있기 때문에, 연결을 시켜줘야하고(포트포워딩)
=> 이 과정이 지나가면 성공적으로 서비스를 사용할 수 있음
- httpd 이미지 다운로드
실행 => 8080:80 => host의 8080 포트를 통해서 -> container의 80번 포트로 접근하겠다고 지정해줌
=> CLI
=> 만들어진것 확인
-p옵션 -publish => 컨테이너의 포트를 호스트로 공개한다 => 연결시킨다
docker run --name nunu -p 8081:80 httpd
확인
docker ps
=> 성공적으로 잘 생성된것을 볼 수 있음
http://localhost:8080/index.html
=> 접속해볼 것임
둘다 성공적으로 나온것을 볼 수 있음
=> 접속시도 된것을 로그에서도 확인 가능
- 웹앱을 구현하기 위해서 => 컨테이너 내부로 들어가서 index.html파일을 수정해볼 것임
=> 터미널을 열어서 편집을 진행해주면 됨
기본적인 명령어들은 리눅스와 크게 다르지 않은것을 볼 수 있음
커맨드라인 실행 명령어
docker exec | 실행할 컨테이너 | 실행할 명령어
=> 컨테이너 내부의 커맨드라인에서 명령어를 실행하는 효과임
cmd에서 지속적으로 컨테이너의 CLI와 연결하기 위해서 사용할 명령어
docker exec -it /bin/sh | 지속적인 연결을 위해서 -it옵션을 사용해야함
=> sh -> Bourne shell 오래전에 나온 아주 기본적인 쉘
=> bash -> 최근에 많이 사용하는 쉘로 편의성이 좋음 -> 내가 사용하는 컨테이너가 지원하지 않으면 sh를 사용하면됨
=> dudu 컨테이너를 대상으로 명령어를 진행하는 것임
=> exec 옵션들
=> 도커프로그램 메뉴에서 cli를 들어갈때도 똑같은 방식으로 진행되어 우리에게 보인다고 생각하면 됨
=> exit => 호스트로 나갈 수 있음 나갈 수
=> 다행히도 지원을 하는것을 볼 수 있음
index.html 파일이 어디에 들어있는지에 대한 정보는 httpd를 다운받은 hub에 가보면 알 수 있음
=> 이동해서 확인해보니 있는것을 확인할 수 있음
=> vim / nano 같은 향상된 문서 편집기는 없을 확률이 큼(컨테이너는 기본적으로 작고 가벼워야하기 때문)
=> 필요하면 yum(centOS), apt(ubuntu) 등을 통해서 받으면 됨
apt update => apt를 업데이트 함
apt install nano => nano 편집기를 받아옴 -> 써본적 없음 ㅎㅎ;
=> 편집후 저장 => ctrl + x / + y / + enter
(nano는 vi/vim랑은 또 완전다르다)
=> 웹페이지를 다시 띄워보면
=> index.html이라고 따로 쳐주지 않아도 기본적인 웹문서가 index.html으로 지정되어있기 때문에 -> 파일내에 들어있는 내용이 출력됨
* 하지만 이런 방식으로 직접 수정하는것은 귀찮음 + 위험성을 불러올 수 있음
=> ex) 컨테이너가 사라지게될 경우 => 싹다 날아감
===> 컨테이너는 가벼운 사용성이 가장 큰 특징이기 때문에, 실수로 지우게될 가능성을 배제할 수 없음(필요할 때 쓰고, 안쓰면 지우는 형태로 많이들 사용하기 때문에)
그렇다면? 어떻게 하는게 좋은가?
=> 호스트의 디렉터리와 컨테이너의 디렉터리를 연결해서, 호스트에서 수정 => 컨테이너에 반영(개발 툴을 깃에 연결해두고, 깃에 push / commit 하는 개념이랑 비슷해보임)
- 실행환경 => 컨테이너
- 수정 / 설정 => 호스트
vscode로 폴더와, 파일을 만들어서
그래서 바탕화면서 docker_docs 폴더를 만들고 => index.html 파일을 만들었음
-=> 그리고 명령어를 실행
=> docker 프로그램에서 확인해보면
이름을 지정해주지 않아서 랜덤으로 지정됐지만, 8082 -> 80 번으로 포트포워딩된 컨테이너를 확인할 수 있음
-=> 호스트에서 내용을 바꾸면 바로 적용이 됨
바로 적용된것을 볼 수 있음