Docker 활용법

Heewon👩🏻‍💻·2024년 4월 30일

install
Docker for MAC

Docker를 왜 쓰는가?

<문제점>

  1. 개발을 하거나 서버를 운용할때 DB, tomcat, JDK등 여러가지 응용프로그램을 설치하고 사용한다.
    그런데 기껏 설치한 프로그램 실행환경이 깨지는일은 빈번하게 발생한다.

  2. 프로그램을 쓰려고 환경구축을 했지만, 프로그램이 업데이트 되는경우 설치한 버전이 맞지않아 호환성이 떨어진다. 업데이트된 프로그램에 맞게 환경설정을 따로 해줘야하는 문제점이 발생한다.

  • SnowFlakes Server : 내 환경설정에 맞게 서버를 구축했는데, 버전이 달라져서 일어나는 문제를 지칭하는 용어이다.

이러한 문제를 해결하기위해서 나온게 Docker다.

도커를 사용하게되면 특정 버전에 맞춰서 구성해놓은 환경설정을 째로 snapshot 형태로 만들어준다.
그렇다 보니 미리 구성해놨던 환경을 어디서나 100% 동일하게 맞출 수 있게 된다.
특히 도커가 가지고 있는 컨테이너 기술이 있다. 모델하우스에 컨테이너를 설치하면 외부와 내부가 분리되어있고 미리 구성된 컨테이너들을 찍어낼 수 있다. 붕어빵 틀처럼. 도커가 각 컨테이너 간에 간섭이 불가능한 독립된 환경을 만들어주고 미리 정의해 놓은 컨테이너를 얼마든지 만들 수 있게 도와준다.

로컬에서 도커 데스크탑 UI가 존재하지만 (데스크탑 app) 서버에선 UI없이 100% 터미널로 모든일을 처리하기 때문에 터미널 환경에 익숙해지는게 중요하다.

[명령어 모음]

docker images
  • 입력했을 때 REPOSITORY 부터 TAG, IMAGE ID 등등 다양한 카테고리를 볼 수 있다.
  • 도커는 snapshot을 기반으로 동일한 환경을 만들어 주는데 이를 위해선 "설계도"가 필요하며, [image = 설계도]이다.
  • 설계도는 여러개 구축이 가능하며 커스텀도 할 수 있다.
    • 건물로 예를들면 사람이 주거하는 주택, 소규모 가게가 들어서는 상업시설용, 대규모 아파트, 고층 빌딩등 다양한 설계도가 존재한다. 도커 이미지도 비슷하게 Java 환경이 미리 만들어져 있는 이미지, MySQL 환경이 미리 만들어져 있는 이미지등 굉장히 다양한 이미지가 있다.

Image list
Docker이미지리스트

도커에서 공식으로 제공하는 이미지들도 있고, 인증된 단체에서 제공하는 이미지들도 있고 개인이 직접 커스텀해서 올려놓은 이미지들도 있다.

Ubuntu(우분투는 리눅스에 입문하기엔 가장 무난한 리눅스 배포판)을 검색하게되면, 우분투 옆에 뭔가 초록색 훈장모양 마크를 볼 수 있는데, 이 마크가 도커에서 공식적으로 제공하는 이미지라는 뜻이다. 저 마크가 붙은 이미지를 받는다면 이상한 문제가 일어날 가능성은 극히 낮음을 의미한다. (예를 들면 이상한 해킹툴이 심어져 있다던가 하는..)

docker pull ubuntu
docker images
  • 우분투라는 이미지가 생성된걸 확인 할 수있다.
docker pull ubuntu
docker pull ubuntu:22.04
docker images
  • 이미지가 2개가 생성된걸 확인 가능
  • 같은 우분투 이미지라도 이렇게 설계도 버전에 차이가 있으면 태그, 이미지 아이디가 달라짐
  • 태그가 달라졌단말은 어케해석하면 될까?
    • 건축사무소에서 2층자리 건물 설계도 2개가 있는데, 디테일이 아주 많이 다르다. 근데 단지 "2층 건물 설계도"라고 네이밍을 해두면, 설계도를 펼쳐서 봐야 디테일을 확인할 수 있는 불편함이 있다. 만약, "2층 주택: 이중창", "2층 주택: 대형통창" 이런식으로 네이밍을 한다면? 쉽게 찾을 수 있다. Docker에서 테그(tag)가 이 역할을 해준다. 우리가 서비스를 제공중일 때 최신 배포한 버전에서 뭔가 문제가 생겨서 이전 버전으로 롤백을 해야할경우, 태그가 없으면 "아 어떤게 직전 버전이었지?" 이러고 해멜 수도 있다.

테그 지정해서 가져오기 : docker pull <이미지 이름>:<태그 이름>

Docker이미지리스트
Supported tags and respective Dockerfile links 여기에 해당 이미지에서 주로 사용할 수 있는 태그들이 모여있다. 찾을 수 없으면 Overview 탭 바로 옆에 Tags라는 탭에서 찾으면 된다.

이미지를 이용해서 컨테이너 만들기: docker run <이미지 이름>:<태그이름>
단 latest 태그는 생략이 가능하다.

docker run ubuntu 
docker ps
  • 컨테이너 생성
  • 실행중인 컨테이너 확인

실행중인 컨테이너를 확인하려고 했을때 아무것도 생성이 안되어 있다.

docker container ls -a
  • 지금까지 생성됐던 모든 컨테이너들 확인하기

실행은 안되었는데 생성은 되어있네? 이유는 : docker run을 이용해서 실행시켰을 때 기본적으로 실행이 완료되면 그냥 꺼져버린다. docker run ubuntu 를 입력해서 실행이 되자마자 동작이 완료되고 그대로 꺼져버려서 docker ps를 아무리 해도 안나타나고 docker container ls -a로만 볼 수 있었던거임.

docker container rm <NAMES>

아무 역할을 못한는 컨테이너는 지워도 ㄱㅊ.

안꺼지고 동작하는 컨테이너 만들기: docker run -it <이미지 이름>
-it 라는 플래그를 주면 된다.

docker run -it ubuntu
  • root@ 어쩌구 저쩌구 해서 바뀐게 확인가능 : 우분투 컨테이너 내부로 들어온거임
  • 여기서 ls 라고치면 디렉토리를 볼 수 있다.
  • exit을 입력하면 컨테이너 내부에서 나가게된다.
  • 다시 docker ps를 입력해서 확인하면 컨테이너가 사라져있다. 왜? exit을 입력해서 우분투 컨테이너를 빠져 나왔으니 실행이 완료되서 사라지게 된거다.

그냥 동작중인 컨테이너를 띄워놓고 우리는 다른 일도 하고 싶은뎅?
글고 계속 컨테이너 내부에만 있으면 다른 컨테이너는 관리는 어케해?

가동중인 컨테이너 만들기: docker run -it -d <이미지 이름>:<태그 이름>

docker run -it -d ubuntu
docker ps

실행중인 컨테이너 종료하는법 :docker stop <이미지 이름>
뭔가 이유가 생겨서 저 컨테이너를 재실행 할때: docker start <이미지 이름>

그런데 docker run을 이용해서 컨테이너를 만들면 이름이 자동으로 셋팅되는걸 확인할 수 있다.
내 이름은 Jiho 인데 우리 집에 붙여진 이름은 내 이름이 아니라 "Willam Smith의 집" 뭐 이런..?
이런 일을 방지하려면 컨테이너에 내가 원하는 이름을 붙일 수 있어야 한다.

컨테이너 이름 생성 :docker run -it -d --name <내가 원하는 컨테이너 이름> <이미지 이름>:<태그 이름>

docker run -it -d --name heewon ubuntu

뭐 이런식!

profile
Interested in coding, meat lover, in love with dogs , enjoying everything happens in my life.

0개의 댓글