2022. 2. 7. 20:52ㆍ작업/Docker
도커개요
하나의 컴퓨터에 가상으로 컴퓨터를 만들고, 필요한 운영체제를 설치한 후 사용 -> 근데 이건 용량이 크다.
그냥 하나의 컴퓨터 안에서 각각의 앱을 실행시키자. 이를 독립된 환경에서 실행하자
각각의 컨테이너에는 운영체제까진 아니고, 실행하는데 필요한 lib,bin과 같은 실행파일들이 들어있다.
도커 : 컨테이너 제품 중 하나
도커 설치하기
도커는 리눅스 운영체제의 기술이다.
1. 도커 안에 각각의 컨테이너 안의 돌아가는 앱은 리눅스 위에서 돌아가는 앱이다.
2. 만약 내가 윈도우, Mac이라면? 가상머신을 깔고 리눅스를 깔고 도커와 같은 걸 사용할 수 있다.
도커 이미지
앱 스토어에서 쿠키런, 네이버 등 앱을 다운로드 한다. 앱을 실행 : 프로세스
도커도 도커 허브에서 도커에서 이미지를 다운로드(pull)한다. 이미지를 실행(run) : 컨테이너
예시로 우리는 아파치?라는 웹서버가 있는 이미지를 다운받고싶다!
도커 공식사이트에서 reference 참조해서 명령어 보기
도커 컨테이너 run
GUI 로 실행
사용하고픈 이미지를 선택하고 container name을 맘대로 정해주고 run을 시킨다.
터미널로 실행
docker run httpd # 원하는 이미지 실행
docker ps # 현재 실행되고 있는 이미지 확인
하나의 이미지는 여러개의 컨테이너를 생성할 수 있다. 아까는 ws1 컨테이너였는데 이번엔 ws2컨테이너를 또 만들어보자
docker run --name ws2 httpd
다시 docker ps를 해보면
실행중인 컨테이너를 끄고 싶다
docker stop 컨테이너아이디
# docker stop ws2
모든 이미지들 확인 ( 컨테이너를 stop했다고 컨테이너가 삭제되는 건 아니다 )
docker ps -a
stop했던 컨테이너를 다시 싫행하고 싶다면
docker start 컨테이너이름
# docker start ws2
그러나 로그는 출력되지 않음 로그를 보고싶다면
docker logs ws2
또는
docker logs -f ws2 # 실시간으로 로그보기
컨테이너 삭제
docker rm 컨테이너이름 # 단 실행되고 있는 도커는 삭제할 수 없다
# 실행중인 애를 삭제하려면 stop시키고 지우거나
docker rm --force 컨테이너이름
예시
docker rm ws2
docker rm --force ws1
이미지 삭제
docker rmi httpd
도커 사용하기 위해 알아야 하는 네트워크 지식!
도커가 없이 웹 서버를 사용하려면? 어떻게 해야 됬었을까
웹서버야 누가 저 index.html이 들어있는 디렉토리를 찾아야 해 라고 설정을 해줘야 한다.
어떤 소프트웨어가 접속을 마중나갈 지 알수가 없다. 그래서 65000개의 포트 중 일부를 연결해줌
브라우저가 80번 포트로 example.com으로 들어간다. 그 다음 웹서버가 index.html파일을 찾고 그걸 웹서버가 다시 웹브라우저로 전달한다.
만약 도커를 이용한다면?
도커 안에 있는 운영체제 : Host라고 부른다. 하나의 host내에 여러 컨테이너가 들어있을 수 있다. 각자 독립적인 파일시스템과 포트를 가지고 있다.
도커 실행 docker run httpd
그 다음 host의 80번포트와 컨테이너의 80번 포트를 연결 docker run -p 80:80 httpd
이건 GUI 버전
터미널에서 하려면
docker run --name ws3 -p 8081:80 httpd
하고 실행되고 있는지 확인
docker ps
그럼 이제 저 index.html을 수정해보자 컨테이너 안으로 들어가서 수정하자
저 컨테이너에서 명령어를 실행하고 싶은데 CLI가 아닌 host 터미널창에서 하려면?
docker exec 컨테이너이름 명령어
예시
docker exec ws2 pwd
docker exec ws2 ls
그런데 컨테이너에서 지속적으로 연결하면서 명령어를 입력하려면? exec -it bin/sh 사용 ( -it는 운영체제적으로 지속적으로 연결할 떄 쓰는 옵션이다~라고만 일단 이해하자)
sh : 입력한 명령어를 운영체제에 전달해주는 창구같은 역할
이제 컨테이너 밖으로 나가고 싶어요 연결 끊을래요 하면
exit
sh는 shell이다. 근데 shell은 사용해보니 불편한 점이 많음 > 인가? 으로 끝나가지고..
그래서 보통은 이제 이렇게 많이 쓴다
docker exec -it ws3 /bin/bash 이건 배쉬쉘 사용!
그럼 이제 index.html을 좀 바꿔보자
docker exec -it ws3 /bin/bash
cd /usr/local/apache2/htdocs/
apt update
apt install nano
nano index.html
완성!
그런데 index.html을 직접 수정하면 위험하다
소스코드는 host에 있게 하고, 컨테이너가 날아가도 코드를 계속 불러올 수 있게끔
실행은 컨테이너에서, 수정은 host에서 한다.
엥 안됨 404에러
이건 맥용인듯
아..안된다 ㄹ 일단 있는 도커 컨테이너 다 삭제하자 깔끔하게
윈도우 cmd말고 powershell에서 도커 컨테이너/이미지 삭제하기
'작업 > Docker' 카테고리의 다른 글
[Docker] 도커를 쓰는 이유(쉬운 설명 4분컷) 24.04.13 (0) | 2024.04.13 |
---|