도커 명령어와 사용사례 요약정리

안상철·2022년 8월 19일
0

CI / CD

목록 보기
7/8
post-thumbnail

CI/CD 편에서 도커를 다루긴 했지만 당시 제대로 알아보지 못하고 급하게 빌드 ~ 배포한 경험이 있어서 이번엔 시간을 조금 내어 도커 주요 명령어 몇 가지를 직접 알아보고 실습 해 보는 시간을 가졌습니다.

명령어와 사용사례를 많이 알아두지 못하니 다른 컨테이너를 실행하거나 볼륨에 마운트 하는 등 과정에서 애로사항이 많아서요😂

0. 도커란?

도커는 데이터 또는 프로그램을 격리시키는 기능을 제공하는 소프트웨어 입나다.
우리의 PC나 서버 환경은 여러가지 기능이 함께 동작하고 있는데, 도커는 다양한 프로그램이나 데이터를 각각 독립된 환경에 격리 해 주는 기능을 제공합니다.

이미지를 기반으로 여러 컨테이너를 각각 독립된 환경에 분리해 저장시키므로, 이미지는 한 개여도 컨테이너는 여러가지를 생성할 수 있습니다.

다만 이미지는 틀 같은 것이어서 이미지 자체로는 어떤 작업을 할 수 없고 반드시 컨테이너를 생성해야 합니다. 반대로 컨테이너로 이미지를 만들 수 도 있습니다.

도커의 장점

  • 하나의 물리 서버에 여러개의 서버를 띄울 수 있다.
  • 도커가 생성 한 각 서버는 모두 독립된 환경이므로 관리가 용이하다.
  • 명령 스크립트가 알고나면 복잡하지 않고 규격화 되어 있어 콘솔 다루는 것이 비교적 용이하다.

단점

  • 서버는 반드시 리눅스용이어야 한다.
  • 호스트 서버에 문제가 생기면 모든 컨테이너에 영향을 미친다.

1. 도커의 커맨드는 어떻게 입력하나?

1. 커맨드

모든 도커 명령어의 시작은 docker 입니다.

명령어 뒤에 오는 부분을 커맨드 라고 합니다.
커맨드는 상위 커맨드하위 커맨드로 나뉩니다.

  • 상위 커맨드: 무엇을? 을 지정
  • 하위 커맨드: 어떻게? 를 지정

하위 커맨드 다음에는 대상이 지정됩니다.
정리하자면 docker + 커맨드 + 대상 순으로 입력하면 됩니다.

2. 옵션과 인자

구글링을 하다보면 엄청나게 긴 도커 명령어를 발견 할 때가 있습니다.

대충 이정도도 짧은 편.. 아래는 Docker에서 테스트 자동화 도구인 카탈론 스튜디오(Katalon Studio)의 스크립트를 실행하는 명령어입니다.

docker run -t --rm -v :/tmp/project katalonstudio/katalon katalonc.sh -projectPath=/tmp/project -browserType="Chrome" -testSuiteCollectionPath="테스트 수트 경로" -apiKey="APIKEY"

명령어의 기본 형태는 docker + 커맨드 + 대상 이지만 옵션인자라는 추가정보가 붙어서 길어지는 것입니다.

3. 기본 + 자주 쓰이는 명령어 정리

상위 커맨드

컨테이너를 대상으로: container
이미지를 대상으로: image
볼륨을 대상으로: volume

하위 커맨드

실행: run
중지: stop
docker 내에서 또 다른 작업을 실행: exec
도커는 실행되고 있는 컨테이너에서 컨테이너 관련 명령어를 다시 입력할 수 없기 때문에, 컨테이너 내 리눅스 서버로 들어가 sudo~ 등의 명령어를 입력할 수 있는 상태로 변경해야 한다.
무언가를 받아올 때: pull
생성: create
삭제: rm

자주 사용하는 옵션

백그라운드 실행: -d
키보드로 조작이 필요: -i or -t
볼륨 위치를 지정: -v
포트 번호를 지정: -p
하이픈이 한 개인(-) 명령어 두 가지 이상은 조합해서 사용할 수 있습니다.
예: 백그라운드에서 실행하는데 키보드 입력도 할 것임 -> -dit
컨테이너의 이름을 설정: --name

무언가 실행하고 싶다면 run을 입력.

실행: run
container run

디렉토리를 구분 할 때
콜론(:) 은 로컬 PC 경로와 도커 스토리지 경로를 구분한다.
예: docker run -v /Users/test:/var/jenkins/jenkins_home -> 로컬경로:도커경로
예: docker run -v /var/jenkins/jenkins_home:/Users/test -> 도커경로:로컬경로

커맨드 ~ 옵션 종류는 이렇게나 많고 각 커맨드 별로 사용할 수 있는 옵션이 다르므로 나머지는 필요에 따라 찾아보도록 합시다.

2. 도커 버전 확인

도커를 다운받는 과정은 생략하고 다운 받아진 도커의 버전 및 기타 정보를 확인

docker version

3. 이미지를 받아오기

이 문서의 모든 예시는 공식 아파치 컨테이너와 index.html 파일을 다룹니다.

컨테이너를 생성하기 위한 이미지를 받아올 때 사용

docker pull 이미지 이름
docker pull httpd

4. 받아온 이미지로 컨테이너를 생성하기

컨테이너를 생성 할 때 사용

docker run --name 내가 지정 할 컨테이너명 -d 이미지 이름:버전명
가장 최신 버전인 latest 버전을 자동으로 설치 -> docker run --name apache_test -d httpd
버전을 지정해서 설치 -> docker run --name apache_test -d httpd:2.2

5. 컨테이너가 생성 되었는지 확인

docker ps
docker ps -a
docker container ls
셋 중 어느것이든 가능

docker ps가 알려주는 정보

CONTAINER ID : 컨테이너 식별자
IMAGE : 컨테이너를 만들 때 사용한 이미지 이름
COMMAND : 컨테이너 실행 시 실행하도록 설정된 프로그램 이름
CREATED : 컨테이너 생성 후 경과된 시간
STATUS : 컨테이너의 현재 상태. 실행중이라면 Up, 종료된 상태라면 Exited
PORTS : 컨테이너에 할당된 포트 번호 호스트 포트 번호/컨테이너 포트 번호 형식으로 출력
NAMES : 컨테이너 이름

6. 실행 된 컨테이너 중지

docker stop 컨테이너명

docker stop apache_test

7. 중지 한 컨테이너를 삭제

docker rm 컨테이너명
docker rm apache_test

8. 포트를 지정해서 컨테이너를 생성

같은 포트로 여러개 생성할 수 있으나 실행 시 포트가 겹치면 안됩니다.

docker run --name 컨테이너명 -d -p 지정포트:80 이미지명
docker run --name apache_test -d -p 8085:80 httpd


9. 이미지를 삭제

삭제하려는 이미지와 관련된 컨테이너를 중지 -> 삭제 후 이미지를 삭제하는 것이 좋습니다.

docker image rm 이미지명1 (공백한칸) 이미지명2...
한 가지 이미지를 삭제 -> docker image rm httpd
n개의 이미지를 삭제 -> docker image rm httpd jenkins

10. 도커 <-> 내 PC로 파일을 복사

도커와 호스트 사이에서 파일을 복사 할 경우 사용

컨테이너에서 호스트로 파일을 복사
docker cp 컨테이너명:복사할 파일 대상 경로 (공백한칸) 붙여넣을 호스트 디렉토리 경로
docker cp apavolume:/usr/local/apache2/htdocs/index.html /Users/~
반대 -> 호스트에서 컨테이너로 파일을 복사
docker cp 호스트 디렉토리에서 복사할 파일 대상 경로 (공백한칸) 붙여넣을 도커 경로
docker cp /Users/~ apaVolume:/usr/local/apache2/htdocs

11. 볼륨 생성과 정보 확인

볼륨을 생성하고 마운트를 통해 정보를 영구 저장할 때 사용

docker volume create/inspect 볼륨명
생성 -> docker volume create apaVolumeStroage
정보확인 -> docker volume inspect apaVolumeStorage

12. 스토리지 마운트

스토리지 마운트란 호스트 <-> 도커 간 볼륨 정보를 서로 연결 ~ 저장하는 것을 말한다.

기본적으로 도커 컨테이너는 호스트 디렉토리에 볼륨 마운트를 하지 않으면 컨테이너가 중지 될 때 모든 정보가 삭제되므로 주의가 필요하다.

스토리지 마운트에는 두 가지가 존재한다.

1. 볼륨 마운트

도커 엔진이 관리하는 도커 컨테이너 내 저장소에 데이터를 저장

2. 바인드 마운트

호스트 디렉토리(바탕화면의 폴더 라던지)에 도커 파일을 저장

아래 예시는 실수로 컨테이너명과 볼륨명을 동일하게 생성해 혼란이 있습니다. 죄송합니다.

스토리지 마운트 절차

볼륨 생성후 -> docker run --name 컨테이너명 -d -p 지정포트:80 -v /루트경로:도커경로 (공백한칸) 이미지명
docker run --name apaVolumeStorage -d -p 8999:80 -v /Users/~:/usr/local/~ (공백) httpd


마운트 정보 확인 - 볼륨

docker volume inspect 볼륨명 -> MountPoint 확인
docker volume instpect apaVolumeStotage

마운트 정보 확인 - 컨테이너

docker container inspect 컨테이너명 -> Mounts 확인
docker container inspect apaVolumeStorage


13. 컨테이너로 이미지를 생성

컨테이너를 이미지로 만든 다음 다른 환경에 똑같이 복제하고 싶을 때 사용한다.

두 가지 방법이 존재하는데

  • commit 커맨드로 기존 컨테이너를 이미지로 변환하는 방법
  • Dockerfile 스크립트로 이미지를 생성하는 방법
1. commit 커맨드로 이미지를 생성

docker commit 컨테이너명 생성 할 이미지 명
docker commit apaVolumeStorage creiamge

2. Dockerfile을 이용해 이미지를 생성

<Dockerfile>

FROM 이미지 이름
COPY 복사할 파일명 (공백한칸) 파일 경로
RUN 무언가 추가하고 싶은 리눅스 명령어
...

FROM httpd
COPY index.html /usr/local/apache2/htdocsx

<CMD>

docker build -t 생성할 이미지 명 /저장 할 디렉토리 경로
docker build -t creimage /Users/user/image_folder

새로 추가 된 이미지는 도커허브에 비공개로 등록해 다른 장소나 환경에서 그대로 받아 사용할 수 있습니다. OpenSSL 인증을 통해 접근 할 수 있습니다 .

이미지를 비공개로 업로드하고 받는 방법 👉🏻 여기

참고
도커마스터 sorzzzzy님 감사합니다.
비공개 도커 허브 구축 하는 방법

profile
웹 개발자(FE / BE) anna입니다.

0개의 댓글