22.02.02 생활코딩 Docker 강의

2022. 2. 7. 20:52작업/Docker

도커개요

하나의 컴퓨터에 가상으로 컴퓨터를 만들고, 필요한 운영체제를 설치한 후 사용 -> 근데 이건 용량이 크다.

그냥 하나의 컴퓨터 안에서 각각의 앱을 실행시키자. 이를 독립된 환경에서 실행하자

각각의 컨테이너에는 운영체제까진 아니고, 실행하는데 필요한 lib,bin과 같은 실행파일들이 들어있다.

도커 : 컨테이너 제품 중 하나

 

도커 설치하기

도커는 리눅스 운영체제의 기술이다.

1. 도커 안에 각각의 컨테이너 안의 돌아가는 앱은 리눅스 위에서 돌아가는 앱이다.

2. 만약 내가 윈도우, Mac이라면? 가상머신을 깔고 리눅스를 깔고 도커와 같은 걸 사용할 수 있다.

도커 이미지

앱 스토어에서 쿠키런, 네이버 등 을 다운로드 한다. 앱을 실행 : 프로세스

도커도 도커 허브에서 도커에서 이미지를 다운로드(pull)한다. 이미지를 실행(run) : 컨테이너

예시로 우리는 아파치?라는 웹서버가 있는 이미지를 다운받고싶다!

httpd 검색
docker pull httpd

도커 공식사이트에서 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

port forwarding 과정

이건 GUI 버전

터미널에서 하려면

docker run --name ws3 -p 8081:80 httpd
하고 실행되고 있는지 확인
docker ps

잘 접속되는지 로그 확인

 

 

그럼 이제 저 index.html을 수정해보자 컨테이너 안으로 들어가서 수정하자

여기는 host가 아닌 저 컨테이너 안에 들어와서 pwd라는 명령어를 실행한 것이다.

저 컨테이너에서 명령어를 실행하고 싶은데 CLI가 아닌 host 터미널창에서 하려면?

docker exec 컨테이너이름 명령어

예시
docker exec ws2 pwd
docker exec ws2 ls

그런데 컨테이너에서 지속적으로 연결하면서 명령어를 입력하려면? exec -it bin/sh 사용 ( -it는 운영체제적으로 지속적으로 연결할 떄 쓰는 옵션이다~라고만 일단 이해하자)

sh : 입력한 명령어를 운영체제에 전달해주는 창구같은 역할

host의 터미널에서 컨테이너에 지속적으로 명령어를 실행시키는 모습

이제 컨테이너 밖으로 나가고 싶어요 연결 끊을래요 하면

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에러

이건 맥용인듯

윈도우용 C:\Users\어쩌구저쩌고 그냥 경로복사해서 하기
최종.. 마지막에 \없앰
안됨
ㅇ안됨..

아..안된다 ㄹ 일단 있는 도커 컨테이너 다 삭제하자 깔끔하게

 

윈도우 cmd말고 powershell에서 도커 컨테이너/이미지 삭제하기

'작업 > Docker' 카테고리의 다른 글

[Docker] 도커를 쓰는 이유(쉬운 설명 4분컷) 24.04.13  (0) 2024.04.13