ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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












Designed by Tistory.