[Docker] 도커 여러가지 명령어

devbug·2024년 12월 6일
0

이것저것

목록 보기
2/2

INTRO

오라클 클라우드에서 docker 를 설치하고 컨테이너로 oracle 을 실행하는데 자고 일어나면 항상 서버가 다운돼있어서 접속이 안되고 무한 로딩이 걸렸다.
맨날 인스턴스 중지와 시작을 반복할 수도 없고 사실 처음 한 번 정도면 그냥 인스턴스 재실행을 할텐데 항상 이러니까 docker 에서 메모리를 너무 잡아먹나 싶어서 메모리자원 할당을 검색해서 찾아보게 되었다.
자원 할당을 하는 김에 컨테이너 생성 관련된 명령어도 몇개 짚고가기 위해 한번에 작성한다.

선행 작업

  • docker 설치



docker 이미지 관련 명령어들

본 문에서는 추가적으로 이미지를 다운로드 하지는 않을 것이기 때문에 확인/찾기에 대한 내용만 실행하고 다운로드는 명령어만 작성할 예정이다. 실행 명령어들은 아래와 같다.

# docker 에서 사용 가능한 이미지 확인
docker images

# docker 에서 이미지 찾기
docker search [이미지명]

# docker 에서 이미지 다운로드 하기
docker pull [이미지명]

# docker 에서 다운로드 받은 이미지 삭제하기
docker rmi [이미지명]
# -f 를 붙이면 컨테이너까지 강제삭제
docker rmi -f [이미지명]

실행 확인

이미지 확인

이미지 찾기


docker 컨테이너 생성/실행/중지/삭제하기

우선 아무것도 실행되어있지 않은 상태로 가정하고 모든 컨테이너 정보를 확인한다.

# 모든 컨테이너 확인
docker ps -a

  • CONTAINER ID : 컨테이너의 고유한 아이디 해쉬값

  • IMAGE : 컨테이너 생성 시 사용한 docker 이미지

  • COMMAND : 컨테이너 시작 시 실행될 명령어

    • 대부분 이미지에 내장돼있어 별도 설정 필요x
  • CREATED : 컨테이너 생성 시간

  • STATUS : 컨테이너의 상태

    • UP : 실행 중
    • Exited : 종료
    • Pause : 일시정지
  • PORTS : 컨테이너가 개방한 포트와 호스트에 연결한 포트. 특별한 설정을 하지 않은 경우 출력되지 않음.

  • NAMES : 컨테이너의 고유한 이름

    • 컨테이너 생성 시 --name 옵션으로 이름을 설정하지 않으면 docker 엔진이 임의로 형용사와 명사를 조합해 설정
    • id 와 마찬가지로 중복이 안되고 docker rename 명령어를 이용하여 이름을 변경할 수 있음.

이제 확인을 했으니 컨테이너 생성을 해 볼 것이다. 한 개의 이미지로 여러 개의 컨테이너를 생성할 수 있다. 생성 명령어는 아래와 같다. 메모리자원 할당 생성은 밑에서 다루려고 한다.

# 컨테이너 생성 명령어
docker run --name [컨테이너 이름] -d -p [포트] [이미지명]
  • --name [컨테이너 이름] : 생략 가능. 이름을 짓지 않으면 docker 엔진이 임의로 설정한다.

  • -d : 생략 가능. 컨테이너를 백그라운드에서 실행하며, -d 유무에 따른 차이는 아래와 같다.

    • 주요 차이

      기능-d 있음-d 없음
      컨테이너 실행 위치백그라운드포그라운드
      터미널 사용 가능 여부가능불가능
      로그 확인 방법docker logs 로 확인터미널에 실시간 표시
      터미널 종료 시 컨테이너 상태계속 실행컨테이너 종료
  • -p [포트] : 포트 설정이다. 실행하려는 이미지에 맞게 작성해준다.
    보통 포트에 9000:8080 이런 형식으로 들어가는데 컨테이너 외부와 통신할 port(9000)와 내부적으로 사용할 port(8080)를 지정해 포워딩할 수 있다. 정도로 알고있으면 된다.


필자는 전부 작성하여 oracle 로 샘플용 이미지를 생성해보았다.

이제 실행중인 컨테이너를 확인한다. run 을 하면 아래와 같이 바로 실행이 된다.

# 실행중인 docker 컨테이너 확인
docker ps


이제 이 실행중인 컨테이너를 중지하고 다시 시작해 본다.

# 실행중인 컨테이너 중지
docker stop [컨테이너 이름]

# 컨테이너 시작
docker start [컨테이너 이름]


이제 샘플로 생성한 컨테이너를 삭제한다. 삭제 명령어는 두 가지가 있다.

# 실행 중지 상태의 컨테이너 삭제
docker rm [컨테이너 이름]

# 실행 상태와 상관없이 삭제
docker rm -f [컨테이너 이름]


docker 메모리자원 할당하기

docker 자원 할당은 처음 생성 시 할당과 생성 후 수정 2가지가 있다.

우선, 처음 생성 시 할당은 아래와 같다. 용량의 경우 mb로 설정 시 ~~m ,gb로 설정 시 ~~g 로 작성하면 된다. 스왑 메모리의 경우 따로 작성하지 않으면 메모리의 2배로 설정된다.

# 컨테이너 memory 자원 할당하여 생성
docker run --memory [용량] --memory-swap [용량] [이미지명]

여기에 이름, 백그라운드, 포트 설정까지 하여 샘플 컨테이너를 생성해보았다.

docker run --name sample --memory 256m --memory-swap 512m -d -p 1521:1521 oracleinanutshell/oracle-xe-11g


자원을 할당했으면 현재 컨테이너 자원을 확인한다.

# 컨테이너 상세 정보
docker inspect [컨테이너명]

잘 찾아보면 메모리가 있을 텐데 여기서 하나하나 찾는거는 시간이 좀 걸리고, 메모리만 찾아주면 된다. 아래 명령어를 사용해보자.

# 컨테이너 상세 정보 - 메모리
docker inspect [컨테이너명] | grep -i memory


이제 메모리 변경 방법이다. 메모리 변경은 update 를 사용하면 된다.

# 컨테이너 메모리 변경
docker update --memory [용량] --memory-swap [용량] [컨테이너명]

이제 실행중인 컨테이너 자원 할당 정보를 확인해보자.

# 실행중인 컨테이너 자원 할당 정보
docker stats

stats 를 나갈 때는 ctrl + z 를 누르면 멈춘다.


docker 사용자 설정하기

sudo 명령어 없이 docker 를 사용할 수 있다.

# 사용자를 docker 그룹에 추가
sudo usermod -aG docker [user]

위 명령어를 정상적으로 적용하기 위해서는 인스턴스에 재접속 해야된다.




여기까지 우선 마무리 하고 필요한 내용이 있으면 중간중간에 끼워넣을 예정이다.

0개의 댓글