-
[docker] 도커, 도커 CLI 알아보기docker 2024. 12. 6. 15:00
도커 알아보기
도커를 쓰는이유
- 이식성
특정 프로그램을 다른 곳으로 쉽게 옮겨서 설치 및 실행, 배포할 수 있다.
도커를 쓰면 어떤 컴퓨터든 특정 프로그램을 에러 없이 설치하고 실행할 수 있다.
그외장점)
매번 귀찮은 설치과정을 일일이 거치지않아도된다.
항상 일관되게 프로그램을 설치할 수 있다(버전, 환경 설정, 옵션, 운영체제와 상관없이)
각 프로그램이 독립적인 환경에서 실행되기 때문에 프로그램간 충돌이 일어나지 않는다.
Docker컨테이너를 사용하여 각각의 프로그램을 분리된환경에서 실행 및 관리할 수 있는 툴이다
컨테이너
- 하나의 컴퓨터 환경내에서 독립적인 컴퓨터 환경을 구성해서 각 환경에 프로그램을 별도로 설치할 수 있게 만든 개념.
- 하나의 컴퓨터 환경에서 여러개의 미니 컴퓨터 환경을 구성.
- 여기서 미니컴퓨터를 docker에서 컨테이너라고 부른다.
- 그리고 큰 컴퓨터를 호스트 컴퓨터라고 부른다.
컨테이너의 특성독립성
분리되어 서로 영향을 끼치지 않는다.
1-1) 저장공간(디스크)각 컨테이너마다 서로 고유의 공간을 가지고있다. 일반적으로 A컨테이너내부에서 B컨테이너 내부에있는 파일에 접근할 수 없다
1-2) 네트워크(IP,Port)각 컨테이너마다 고유의 네트워크를 갖고있다. 컨테이너는 각자의 IP주소를 갖는다.
이미지- 이미지는 프로그램을 실행하는데 필요한 설치과정, 설정, 버전정보등을 포함하고 있다. 즉 프로그램을 실행하는데 필요한 모든 것을 포함하고 있다.
- 이미지만 있으면 하나의 컨테이너에서 특정 프로그램을 별도의 설치과정없이 쉽게 실행된다.
- 닌텐도 칩과같은것.
-MYSQL서버를 이미지로 만들었다면 이 이미지를 도커로 실행시키는 순간 컨테이너환경에서 실행된다. mySQL 설치 필요없이 MYSQL DB를 사용할 수 있게된다.
도커로 nginx실행하기도커로 nginx 이미지 다운하기.
이미지는 도커허브로부터 다운받게된다.
(도커허브는 이미지를 저장, 다운할 수 있는 사이트이다.)
도커허브에 들어가서 nginx를 검색하면 nginx이미지 정보를 볼 수 있다.
nginx이미지 정보중 태그명은 해당 이미지의 버전을 의미한다. 따라서 nginx의 특정 버전을 다운로드 하고싶다면
nginx라는 닌텐도칩을 다운받았고 이제 이를 실행할 수 있다.
Docker pull nginx
기본적으로 태그명이 없을경우 :latest가 붙어서 가장 최신 버전의 이미지를 다운받게된다.
실제 실행되는 코드(태그명이 없을때)
docker pull nginx:latest
특정버전의 nginx 이미지를 다운받기 (태그명이 있을때)
docker pull nginx:stable-alpine.19-perl
도커 이미지목록 확인하기도커가 실행할 수 있는 닌텐도 칩목록확인
Docker image ls
도커로 실행중인 컨테이너(미니컴퓨터)목록 확인Docker ps
// 옵션 -a : 실행중이지 않은 컨테이너 목록까지 보기
도커로 실행중인 nginx 컨테이너(미니컴퓨터) 끄기Docker stop webserver
도커 이미지 삭제- 중단된 컨테이너에서 이를 사용하고있다면 해당이미지를 삭제할 수 없다.
- 이때 -f옵션을 이용해서 강제로 삭제할 수 있다. 하지만 이걸로도 실행중인 컨테이너의 이미지를 삭제할 수는없다. 이때는 컨테이너를 중단하고 삭제해야한다.
- ID의 일부값만 입력해도 삭제된다Docker image rm [image ID]
컨테이너에서 사용하고 있지않은 전체 이미지 삭제Docker image rm $(docker images -q)
중단된 컨테이너에서 사용하고 있는 이미지들까지 전부 삭제Docker image rm -f $(docker images -q)
컨테이너(미니컴퓨터) 생성(실행x)- 없는 이미지로 실행하면 알아서 이미지 다운받고 컨테이너 생성
Docker create nginx
컨테이너 실행Docker start [컨테이너 ID]
도커로 nginx 실행하기<이미지다운 -> 컨테이너 생성 -> 실행> 한 명령어로 3가지 모두 진행
기본적으로 이 명령어는 포그라운드로 실행하기 때문에 다른 프로그램의 작업을 할 수 없음.
닌텐도에 nginx칩 꽂아서 실행하기
Docker run --name webserver -d -p 80:80 nginx
//옵션 --name : 컨테이너 이름 설정 -d : 백그라운드 실행 -p : 호스트 포트와 컨테이너 포트 연결 (안하면 외부에서 접근불가) -e : 컨테이너(미니컴퓨터) 내부에 환경변수 설정 -v : 볼륨생성 [호스트 디렉토리 절대경로]:[컨테이너 디렉토리 절대경로] [이미지명]:[태그명]
- 이때 백그라운드로 실행하기위해서 -d 옵션 입력
- 브라우저에서 [localhost: 도커 컨테이너의 포트] 로 연결해도 연결 안되는이유호스트와 컨테이너가 연결되어있지 않기때문. -p [localhost의 포트]:[컨테이너포트]옵션을 통해 호스트와 컨테이너 포트 연결해야함.
이미지가 없거나 컨테이너가 없다면 이를 다운받고 알아서 생성해주기까지 하기 때문에
하나의 명령어로 <이미지 다운 + 컨테이너 생성 + 컨테이너 실행> 모두 할 수 있음
Docker run mysql
리눅스 용어- 포그라운드
내가 실행시킨 프로그램의 내용이 화면에서 실행되고 출력되는 상태
장점
실시간으로 실행중인 프로그램의 상태와 로그를 확인할 수 있음.
단점
다른 프로그램 조작 불가능함
- 백그라운드
내가 실행시킨 프로그램이 컴퓨터 내부적으로 실행되는 상태
장점
다른 프로그램의 명령어를 입력할 수 있음
단점
실시간으로 실행중인 프로그램의 상태나 로그를 확인할 수 없음
Docker stop VS Docker kill- Docker stop: 안전하게 정상 중지
- Docker kill: 강제중지(문제가 생겼을때)
중지된 컨테이너 삭제- 실행중인컨테이너는 지울 수 없음
Docker rm [컨테이너ID/컨테이너이름]
// 옵션 -f : 실행중인 컨테이너 강제 삭제
- 중지된 모든 컨테이너 삭제
Docker rm $(docker ps -qa)
컨테이너 로그확인(디버깅용)컨테이너 ID의 일부만 입력하거나 name을 적어도 상관없음
Docker logs [컨테이너ID]
// 옵션 --tail 10 : 맨뒤 10줄만 출력 -f : 실시간으로 생성되는 로그들도 확인
<호스트컴퓨터 실행중인 컨테이너>로 접속하기Docker exec -it [컨테이너ID] bash
<컨테이너 -> 호스트컴퓨터> 로 나오기exit
'docker' 카테고리의 다른 글
[docker] docker compose로 nestJS, postgresql, redis 서버 띄우기 (0) 2024.12.07 [docker] docker compose 로 mysql 서버 띄우기 (0) 2024.12.07 [docker] docker로 nestJS 서버띄워보기 (0) 2024.12.07 [docker] 도커파일 만들기1 (0) 2024.12.07 [docker] docker volume으로 mysql 서버띄우기 (0) 2024.12.06