도커 --> 배 + 컨테이너
----------------------
ㅣ 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
'Docker(도커)' 카테고리의 다른 글
Docker를 활용한 Linux 실습환경 구축 (0) | 2024.07.04 |
---|---|
리눅스(Linux) 기초1 (0) | 2024.07.03 |
Docker를 통한 DB연결(데이터 저장) (0) | 2024.07.02 |
Docker 를 이용한 SpringBoot DB연결 (0) | 2024.07.02 |