CI/CD 편에서 도커를 다루긴 했지만 당시 제대로 알아보지 못하고 급하게 빌드 ~ 배포한 경험이 있어서 이번엔 시간을 조금 내어 도커 주요 명령어 몇 가지를 직접 알아보고 실습 해 보는 시간을 가졌습니다.
명령어와 사용사례를 많이 알아두지 못하니 다른 컨테이너를 실행하거나 볼륨에 마운트 하는 등 과정에서 애로사항이 많아서요😂
도커는 데이터 또는 프로그램을 격리시키는 기능을 제공하는 소프트웨어 입나다.
우리의 PC나 서버 환경은 여러가지 기능이 함께 동작하고 있는데, 도커는 다양한 프로그램이나 데이터를 각각 독립된 환경에 격리 해 주는 기능을 제공합니다.
이미지를 기반으로 여러 컨테이너를 각각 독립된 환경에 분리해 저장시키므로, 이미지는 한 개여도 컨테이너는 여러가지를 생성할 수 있습니다.
다만 이미지는 틀 같은 것이어서 이미지 자체로는 어떤 작업을 할 수 없고 반드시 컨테이너를 생성해야 합니다. 반대로 컨테이너로 이미지를 만들 수 도 있습니다.
모든 도커 명령어의 시작은 docker
입니다.
명령어 뒤에 오는 부분을 커맨드 라고 합니다.
커맨드는 상위 커맨드와 하위 커맨드로 나뉩니다.
하위 커맨드 다음에는 대상이 지정됩니다.
정리하자면 docker + 커맨드 + 대상
순으로 입력하면 됩니다.
구글링을 하다보면 엄청나게 긴 도커 명령어를 발견 할 때가 있습니다.
대충 이정도도 짧은 편.. 아래는 Docker에서 테스트 자동화 도구인 카탈론 스튜디오(Katalon Studio)의 스크립트를 실행하는 명령어입니다.
docker run -t --rm -v :/tmp/project katalonstudio/katalon katalonc.sh -projectPath=/tmp/project -browserType="Chrome" -testSuiteCollectionPath="테스트 수트 경로" -apiKey="APIKEY"
명령어의 기본 형태는 docker + 커맨드 + 대상
이지만 옵션과 인자라는 추가정보가 붙어서 길어지는 것입니다.
상위 커맨드
컨테이너를 대상으로: 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 -> 도커경로:로컬경로
커맨드 ~ 옵션 종류는 이렇게나 많고 각 커맨드 별로 사용할 수 있는 옵션이 다르므로 나머지는 필요에 따라 찾아보도록 합시다.
도커를 다운받는 과정은 생략하고 다운 받아진 도커의 버전 및 기타 정보를 확인
docker version
이 문서의 모든 예시는 공식 아파치 컨테이너와 index.html 파일을 다룹니다.
컨테이너를 생성하기 위한 이미지를 받아올 때 사용
docker pull 이미지 이름 docker pull httpd
컨테이너를 생성 할 때 사용
docker run --name 내가 지정 할 컨테이너명 -d 이미지 이름:버전명 가장 최신 버전인 latest 버전을 자동으로 설치 -> docker run --name apache_test -d httpd 버전을 지정해서 설치 -> docker run --name apache_test -d httpd:2.2
docker ps
docker ps -a
docker container ls
셋 중 어느것이든 가능
docker ps가 알려주는 정보
CONTAINER ID : 컨테이너 식별자 IMAGE : 컨테이너를 만들 때 사용한 이미지 이름 COMMAND : 컨테이너 실행 시 실행하도록 설정된 프로그램 이름 CREATED : 컨테이너 생성 후 경과된 시간 STATUS : 컨테이너의 현재 상태. 실행중이라면 Up, 종료된 상태라면 Exited PORTS : 컨테이너에 할당된 포트 번호 호스트 포트 번호/컨테이너 포트 번호 형식으로 출력 NAMES : 컨테이너 이름
docker stop 컨테이너명
docker stop apache_test
docker rm 컨테이너명
docker rm apache_test
같은 포트로 여러개 생성할 수 있으나 실행 시 포트가 겹치면 안됩니다.
docker run --name 컨테이너명 -d -p 지정포트:80 이미지명 docker run --name apache_test -d -p 8085:80 httpd
삭제하려는 이미지와 관련된 컨테이너를 중지 -> 삭제 후 이미지를 삭제하는 것이 좋습니다.
docker image rm 이미지명1 (공백한칸) 이미지명2... 한 가지 이미지를 삭제 -> docker image rm httpd n개의 이미지를 삭제 -> docker image rm httpd jenkins
도커와 호스트 사이에서 파일을 복사 할 경우 사용
컨테이너에서 호스트로 파일을 복사 docker cp 컨테이너명:복사할 파일 대상 경로 (공백한칸) 붙여넣을 호스트 디렉토리 경로 docker cp apavolume:/usr/local/apache2/htdocs/index.html /Users/~ 반대 -> 호스트에서 컨테이너로 파일을 복사 docker cp 호스트 디렉토리에서 복사할 파일 대상 경로 (공백한칸) 붙여넣을 도커 경로 docker cp /Users/~ apaVolume:/usr/local/apache2/htdocs
볼륨을 생성하고 마운트를 통해 정보를 영구 저장할 때 사용
docker volume create/inspect 볼륨명 생성 -> docker volume create apaVolumeStroage 정보확인 -> docker volume inspect apaVolumeStorage
스토리지 마운트란 호스트 <-> 도커 간 볼륨 정보를 서로 연결 ~ 저장하는 것을 말한다.
기본적으로 도커 컨테이너는 호스트 디렉토리에 볼륨 마운트를 하지 않으면 컨테이너가 중지 될 때 모든 정보가 삭제되므로 주의가 필요하다.
스토리지 마운트에는 두 가지가 존재한다.
도커 엔진이 관리하는 도커 컨테이너 내 저장소에 데이터를 저장
호스트 디렉토리(바탕화면의 폴더 라던지)에 도커 파일을 저장
아래 예시는 실수로 컨테이너명과 볼륨명을 동일하게 생성해 혼란이 있습니다. 죄송합니다.
스토리지 마운트 절차
볼륨 생성후 -> 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
컨테이너를 이미지로 만든 다음 다른 환경에 똑같이 복제하고 싶을 때 사용한다.
두 가지 방법이 존재하는데
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 인증을 통해 접근 할 수 있습니다 .
이미지를 비공개로 업로드하고 받는 방법 👉🏻 여기