새소식

Docker

aws에 도커(docker) 설치 및 간단한 명령어 알아보기

  • -

aws에 docker를 설치해서 서비스를 시작해보려 합니다

그러면 우선 docker를 설치해봅시다!!

 

도커(docker) 설치하기

curl -fsSL https://get.docker.com/ | sudo sh

위 명령어를 실행하여 docker를 설치합니다

도커를 사용하기 위해서는 기본적으로 루트 권한이 필요합니다

그런데 매번 sudo 권한으로 실행하려면 여간 귀찮은 일이 아닐 수 없습니다

그래서 몇가지 설정을 해줍니다

 

sudo 없이 도커 사용하기

sudo usermod -aG docker $USER # 현재 접속중인 사용자에게 권한주기
sudo usermod -aG docker your-user # your-user 사용자에게 권한주기

root가 아닌 사용자가 sudo 없이 사용하기 위해서느 해당 사용자를 docker 그룹에 추가해주면 됩니다

사용자가 로그인 중이라면 다시 로그인 후 권한을 적용합니다( ** docker를 실행하기 위한 커널 버전은 3.10.x 이상)

 

docker 설치 확인

docker version

위의 명령어를 입력해서 위와 같이 나온다면 설치가 잘 된것입니다

도커는 실제로 클라이언트와 서버로 나뉘어져 있습니다

도커 커맨드를 입력하면 클라이언트에서 서버로 명령을 전송하고

결과를 받아 터미널에 띄워주게 됩니다

 

도커(docker) 명령어

현재 실행중인 도커 정보 모두 보기

docker ps -a

위 처럼 docker에 대한 정보들이 모두 나옵니다

  • CONTAINER ID: 컨테이너의 고유 아이디 이다. 되게 길지만 다른 ID와 겹치지 않는다면 앞에 몇글자만 입력해도 인식
  • IMAGE: 컨테이너를 만들기 위해 사용한 이미지 이름
  • COMMAND: 모르겠음
  • CREATED: 컨테이너가 만들어진 시간 → 몇초 전에 만들어졌다고 뜨면 아 방금 빌드한게 잘 만들어졌구나 확인 가능( 방금 빌드했는데 만들어진 시간이 몇 시간 전이면 안된거)
  • STATUS: 컨테이너 가동 시간( UP: 가동중, EXIT: 가동X)
  • PORT: 호스트와 컨테이너의 연결된 포트, 5000→8080은 docker container 내부의 8008포트가 호스트의 5000 포트와 연결되었다는 뜻!! 즉 호스트ip:5000으로 접속하면 docker container의 8080 포트로 연결 되서 접속 됨
  • NAMES: 이름 지정안하면 유명인사들 이름으르 자동으로 지정됨 but, —name 옵션으로 이름 지정 가능. CONTAINER ID 대신 이 이름들을 사용하여 container를 쉽게 식별 가능

 

도커 이미지 보기

docker images

빌드된 도커의 이미지를 모두 볼 수 있습니다

위와 같이 나오게 됩니다 

- REPOSITORY: 이미지 이름

- TAG: 버전

- IMAGE ID: 이미지 아이디(보통 앞에 2,3자리만으로도 식별 가능)

- CREATED: 만들어진 날짜

- SIZE: 이미지 크기

 

도커 빌드

docker build -t springboot-app .

이는 Dockerfile이 있는 위치에서 docker build 명령어로 이미지를 빌드할 수 있습니다

위 명령어를 실행하게 되면 이미지 목록에 springboot-app이 추가 됩니다

 

도커 실행

docker run [options] springboot-app

위 명령어를 이용해서 docker 이미지들을 실행할 수 있습니다

다양한 옵션들을 주고 뒤에 container를 생성할 이미지 이름을 주면 컨테이너가 생성됩니다

위에서 만든 이미지 이름을 뒤에 주면 되겠죠???

 

도커 실행 주 옵션

옵션 설명 예시
-d detached mode. 백그라운드 모드 docker run -d springboot-app
-p 호스트와 컨테이너의 포트를 연결(포워딩) docker run -p 5000:8080 springboot-app
-v 호스트와 컨테이너의 디렉토리를 연결(마운트) docker run -v /home/user/data:/home/data springboot-app
-e 컨테이너 내에서 사용할 환경변수 설정 docker run -e MYSQL_ROOT_PASSWORD=root mysql
-name 컨테이너 이름 설정 docker run --name db mysql
-rm 프로세스 종료시 컨테이너 자동 제거 docker run -rm mysql
-it -i(표준입력)와 -t(tty 모드)를 동시에 사용한 것으로 터미널 입력을 위한 옵션 docker exec -it db /bin/bash
-link 컨테이너 연결 [컨테이너명:별칭] docker run -link db:db nginx

많이 쓰이는 실행 옵션들을 표에 정리해봤습니다

-p 5000:8080이라 했는데 이는 위에서도 설명했듯이 5000은 호스트(외부)포트 8080은 컨테이너(내부) 포트입니다.

-e는 환경변수 옵션을 줄때 사용합니다. 저는 mysql 생성시에 db 이름이나 비밀번호 설정에 이용하였습니다.

-name으로 container의 이름을 직접 설정할 수 있습니다. exec 명령으로 컨테이너에 접속하는 경우가 많은데 이름을 설정해두니 편했습니다

-it는 exec 명령어와 함께 container에 접속시 많이 사용하였습니다

-link는 써보지는 않았지만 컨테이너 끼리의 연결을 도와줍니다. 위와 같이 하면 db 컨테이너의 별칭을 db로 해서 nginx container와 연결합니다. 이렇게 하면 nginx container에서 db 컨테이너로 접근할 수 있습니다

 

exec 명령어

exec는 외부에서 컨테이너 내부에 명령을 실행하는 명령어입니다

docker exec 명령어를 활용하면 데몬이 실행되고 있는 컨테이너에 bash 셀을 연결하여 다양한 명령을 할 수 있습니다

옵션 설명 예시
-d 백그라운드로 명령을 실행 sudo docker exec -d hello apt-get update
-i interactive, 표준 입력 활성화  
-t tty모드 사용. bash . bash 사용시 ash 사용시 설정 docker exec -it jenkins /bin/bash

저는 보통 -it 옵션을 이용해서 bash 셀에 접속하는 경우 많이 사용했습니다.

-it로 bash를 연결할 필요 없이 그냥 exec 명령어를 이용해 바로 명령어를 줄 수도 있습니다

 

도커 로그보기

docker logs springboot-app

logs 명령어로 컨테이너의 로그를 볼 수 있습니다

예를들어 backend로 spring을 올려두었다면 logs 명령어로 System.out.println으로 칠해놓은 로그들을 볼 수 있는거죠

 

컨테이너 시작

docker start springboot-app

중지된 컨테이너를 시작할 수 있습니다

 

컨테이너 재시작

docker restart springboot-app

컨테이너를 중지했다가 다시 시작합니다

 

컨테이너 중지

docker stop springboot-app

컨테이너 즉 프로세스를 멈춥니다

 

삭제

컨테이너 삭제

docker rm springboot-app

rm 명령어로 컨테이너를 삭제할 수 있습니다

단, 컨테이너 삭제를 위해서는 우선 컨테이너를 stop 명령어를 통해 멈춰야 합니다

 

이미지 삭제

docker rmi mysql

rmi 명령어를 통해 이미지를 지울 수 있습니다

단, 이때 이 이미지를 통해 생성된 컨테이너가 실행중이면 안됩니다

즉 컨테이너를 멈추고, 지우고, 이미지를 지웁니다

 

이렇게 간단히 aws에서 도커를 설치하고

설치후에 사용할 명령어들을 알아봤습니다

저도 이번에 docker를 처음 써봤지만 처음이 어렵지 굉장히 편한 것 같습니다

 

잘못된 점이 있다면 댓글 지적해주시면 감사하겠습니다 ( 꾸벅 )

'Docker' 카테고리의 다른 글

docker(도커)가 뭐고 왜 사용하는거지???  (0) 2020.09.02
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.