일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 메뉴바
- 알림생성
- JSON Web Token
- Winston
- 네비게이션 한번에
- 레포지토리
- 패스파라미터
- unnest
- 게시글 이미지 업로드
- .env
- 포트번호
- 이미지가 포함된 게시글
- 스테이지어스
- element.style
- 환경변수
- JWT 쓰는 방법
- N+1문제
- 부트캠프
- 쿼리스트링
- secret코드
- JWT
- 알림생성모듈
- JWT 쓰는이유
- 메뉴바 한번에
- 3계층구조
- getComputedStyle
- 게시글 이미지
- N+1
- route 53
- 토큰
- Today
- Total
기주
[docker] 도커, 도커 CLI 알아보기 본문
도커 알아보기
도커를 쓰는이유
- 이식성
특정 프로그램을 다른 곳으로 쉽게 옮겨서 설치 및 실행, 배포할 수 있다.
도커를 쓰면 어떤 컴퓨터든 특정 프로그램을 에러 없이 설치하고 실행할 수 있다.
그외장점)
매번 귀찮은 설치과정을 일일이 거치지않아도된다.
항상 일관되게 프로그램을 설치할 수 있다(버전, 환경 설정, 옵션, 운영체제와 상관없이)
각 프로그램이 독립적인 환경에서 실행되기 때문에 프로그램간 충돌이 일어나지 않는다.
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
'devops > 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 |