Docker(도커)

Docker(도커)란? 설치부터~!

Jr.고래 2024. 6. 10. 13:20

도커 --> 배 + 컨테이너 

 

----------------------

ㅣ      JDK                    ㅣ

ㅣ     python                ㅣ

ㅣ     git                        ㅣ

---------OS------------

-----인프라(컴퓨터) -----

 

도커 : 1. 컨테이너=OS(악단)를 만들수 있게해줌 

          2. 컨테이너 안에 응용 프로그램(드럼,베이스,기타,피아노) 들을 설치,변경 할수 있게 해줌 

          3. 컨테이너를 실행을 하게 해줌(음악이 흐름)

 

도커 컴포즈 : 여러 컨테이너들이 결합되는것 (무대 컨테이너--배경,높이,조명,밝기) 

                  최소 2개이상의 컨테이너를 결합하여 실행하는것 (무대+악단)

 

도커 허브(저장소) : 클라우드 서버(컨테이너 서버) 수많은 사람들이 컨테이너 업로드 및 다운로드 (무대,악단 컨테이너 등등...) 

 

 

도커 설치 https://www.docker.com/products/docker-desktop/ 

 

도커 실행 후 터미널창에서 

 

docker run -d -p 80:80 docker/getting-started

 

웹 브라우저 주소창에 localhost를 치면 이런화면이 나온다 .

 

도커 컴포즈 다운로드 https://docs.docker.com/compose/install/standalone/ 자신 os에 맞게 설치.

(맥은 처음에 알아서 설치되기 때문에 생략 가능 ) 

 

 

터미널창에 docker compose version 입력 후 버전확인

 

docker hub에서 회원가입 진행.

 

터미널 창에 docker pull openjdk 입력

 

설치 후 docker images 입력.

 

도커 이미지 (파일로만 존재) --> 도커 컨테이너 (이미지가 실행된 상태,메모리에 로딩된 상태, 인스턴스 상태)

 

실습해보기~

 

docker pull ubuntu 

docker images 

docker pull ubuntu:18.04

 

docker ps --> 실행중인 컨테이너 .

 

docker rmi openjdk

docker rmi iamgeID(이미지 2개의 이름이 같을 때  ) 

docker rmi iamgeID(이미지 2개의 이름이 같을 때  )

 

현재 실행중인 컨테이너의 이미지는 삭제 불가 . 

 

docker ps 

docker ps로 컨테이너 id 확인후 종료하기(이미지 id랑 다름)

docker stop 컨테이너id

docker ps로 스탑된거 확인(컨테이너가 보이지 않음)

 

컨테이너 종류는 2개이다. ( 실행중인 컨테이너, 중지된 컨테이너) 

docker ps -a --> 모든 컨테이너 확인 가능 .

docker rm Cotainerid (중지된 컨테이너 삭제)

docker rmi 이미지id

 

 

컨테이너 생명주기 --> 컨테이너 내부에 실행중인 프로그램에 따라 영향을 받음 . 

 

(컨테이너 안에 항상 실행중인 데몬 프로세스가 없다면 실행하자마자 바로 종료) ex) 우분투(os)와 jdk(프로그램)만 설치되어있는 이미지

 

우분투 아파치/톰켓이 설치되어있는 이미지가 실행된 컨테이너는  아파치톰켓(서버)이 내부적으로 계속 돌고 있기 떄문에 실행중.

(종료가 안됨)

 

 

 

docker pull tomcat

docker images 

docker run tomcat (forground모드로 실행됨) 로그들이 다 보임 .

새로운 터미널 열어서 docker ps 입력하면 톰캣 돌고있는거 볼수있음

localhost:8080 들어가면 톰캣 실행이 안되고 있는거 알 수 있음

-->  왜 안되냐?? 도커 컨테이너는 호스트os와 다른 네트워크 구성을 가지고 있다 

로컬호스트는 호스트 운영체제를 의미하는것 .

 

브라우저 -> 호스트 운영체제 -> 도커의 컨테이너 톰캣 8080 포트로 리다이렉션 해줘야한다  :  포트 포워딩

 

control +c  or docker stop containerID 해서 톰캣 종료하기.

 

docker run -d tomcat (백그라운드 데몬프로세스로 실행)

 

 

포트포워딩 

 

docker pull httpd

톰캣이 docker ps로 돌고있으면 스탑해준다. 

docker run -d httpd ( 이렇게 실행하면 포트포워딩이 안됨,, 실행X)

httpd 는 80으로 돌기 때문에 포트번호 80으로 포트포워딩하기.

docker run -d -p 8080:80 httpd ( 호스트 os로 8080 요청이 오면 도커 80포트로 넘겨주기)

작동하는걸 확인할 수 있음. 

 

 

docker run -d -p 8081:80 nginx 

이미지가 없으면 도커 pull과 run을 한번에 가능 

 

도커 모든 이미지 한번에 삭제하는 명령어

더보기

docker stop $(docker ps -a -q)

docker rm $(docker ps -a -q)

docker rmi -f $(docker images -q)

 

 

 

docker run -d --name myubuntu ubuntu 

docker ps --> 실행중인 도커가 없다 ? (내부에서 실행중인 데몬프로세스가 없기때문에 바로 죽어버린다)

 

docker run -dit --name myubuntu ubuntu (dit :   d 백그라운드  i --> interaction 실행 후 상호작용한다, t --> terminal 모드로)

 

docker ps --> 실행중인거 확인 가능 (Command /bin/bash, names : myubuntu)

이제부터 ubuntu docker 내에 bin/bash 쉘이 작동중이어서 직접 상호작용 가능 .

 

docker attach containerId

실행중인 컨테이너에 접근하는 명령어 

exit로 빠져나오기

 

 

docker run -p 8080:80 httpd 

애초에 dit로 실행하지 않은 컨테이너에 접근은 

docker ps

docker exec -it containerid bash로 접근 

 

내부적으로 아무것도 돌지 않는 프로그램은

docker run -dit ubuntu (bash)로 해야 죽지 않는다. 

docker attach containerId가능.

 

내부적으로 계속 뭔가 돌고 있는 프로그램은

docker run -d -p 8080:80 httpd

docker ps

docker exec -it containerid bash로 접근. 

 

 

 

ls --> cd htdocs -- > ls -->

 

볼륨 연결 

 docker run -d -p 8080:80 -v ~/Documents:/usr/local/apache2/htdocs httpd

내 pc의 특정 디렉토리와 도커 httpd의 index.html이 있는 폴더를 찾는 쪽으로 동기화

그러면 내pc에서 docker컨테이너 내의 폴더로 모든 파일이 동기화됨 

 

docker exec -it 6be bash

ls --> cd htdocs --> ls 하면 확인 가능 

 

 

 

도커 커밋 --> 현재 돌고있는 컨테이너를 이미지로 만들ㅇ ㅓ낼 때 사용 

https://hub.docker.com/repository/create?namespace=goorm94

도커 리포지토리 퍼블릭으로 생성. 

 

docker run -dit ubuntu 

docker ps

docker attach containerId

 

apt update

apt install vim

ls --> cd home --> ls --> mkdir ubuntu --> cd ubuntu --> vi hello --> i (insert mode) --> Hello World --> esc + :wq 엔터

ls --> exit

docker ps 

docker ps -a

docker start containerid

docker ps

docker attach containerid

 

다시 ubunut 폴더로 가서 cat hello 

exit 로 빠져나오면 실행이 종료됨

control+ p , control+ q 순서대로 하면 실행중인 상태로 나와짐

 

docker commit containerId goorm94/vim-ubuntu2:1.0 (아까 생성한 레포지토리)

docker images

docker push goorm94/vim-ubuntu2:1.0

 

싹 다 삭 제 후

docker pull goorm94/vim-ubuntu2:1.0

vim이 설치되어있는 우분투 다운받아짐. 

docker images

docker run -dit goorm94/vim-ubuntu2:1.0