[Docker] Docker 기본 명령어

in_ho_·2023년 10월 22일
0

Docker

목록 보기
2/3
post-thumbnail

1. 실무에서의 Docker 사용

  1. 개발자 컴퓨터에서 개발한 후 소스를 커밋한다.
  2. 빌드와 배포를 요청한다.
  3. CI/CD 서버가 커밋된 소스를 내려 받고 테스트와 빌드 한 후 war 또는 jar 같은 배포 단위의 파일 압축파일을 만든다.
  4. 원하는 환경의 서버에 이동시킨 후 실행한다.

2. Docker Image

  • 도커 이미지는 도커를 실행하기 위해 필요한 컨테이너의 기초입니다.
  • 이미지는 컨테이너 런타임 내에서 사용하기 위해 정렬된 루트 파일 시스템의 변경 사항 및 해당 실행 매개변수의 모음입니다.
  • 이미지는 일반적으로 계층화된 파일 시스템을 포함합니다.
  • 이미지에는 상태가 없으며, 변경되지 않습니다.
  • 위에 복잡한 말들이 적혀있지만 간단하게 말하면 이미지는 컨테이너의 스냅샷(스크린샷)이라고 볼 수 있습니다.

2-1. 이미지 목록을 보는 함수

docker images
  • 해당 환경에 존재하는 모든 도커 이미지를 보여주는 명령어

2-2. 이미지 다운로드

docker pull [이미지명]
  • 위의 명령어를 수행할 경우 Docker Hub라는 곳에서 이미지명과 일치하는 이미지를 다운로드 받습니다.
  • 이미지를 다운로드 받으면 확인할 수 있습니다.

2-3. 이미지 컨테이너화

docker run --name [컨테이너명] -p [호스트 포트 : 도커 내부 포트] -d [이미지명]
  • run명려어는 이미지가 없을 경우 다운로드를 진행한 다음 명령어가 실행됩니다.
  • --name이라는 옵션으로 컨테이너의 이름을 지정할 수 있습니다.
  • -p라는 옵션으로 호스트에서 실행되는 포트와 도커에서 실행되는 포트를 연결시킨 것입니다.
  • -d 옵션은 detached mode, 즉 백그라운드로 실행하겠다는 의미입니다.

2-4. 컨테이너 상태 확인

docker ps [-a]
  • 도커 컨테이너의 정보를 확인할 수 있습니다.

2-5. 이미지를 만드는 방법

  • 앞서 말했듯이 이미지는 컨테이너의 스냅샷(스크린샷)이다.
  • 이미지는 변경이 불가능한 파일인 반면, 컨테이너의 파일은 수정이 가능하다.
  • 그러므로 컨테이너의 파일을 수정하고 나서 이미지를 만들면 될 것이다.
  • 연습을 위해 nginx 이미지를 다운로드 받은 후 8080 포트로 열어주는 작업을 진행한다.

2-5-1. 호스트 PC에서 컨테이너 내부 쉘 접근 방법

  • 호스트 PC에서 컨테이너로 연결하는 명령어로 attach가 있습니다.
docker exec -it [컨테이너명] /bin/bash

docker exec -it nginx-container /bin/bash
  • -i 옵션은 표준입력을 활성화 시키면 attach가 안되어 있더라도 명령어를 입력할 수 있도록 해줌.
  • -t 옵션은 리눅스 쉘이 표시됩니다.

2-5-2. nginx 폴더에서 index.html 파일 찾기

find / -name index.html /dev/null
  • 위의 명령어의 반환 결과로 /usr/share/nginx/html/index.html이 나올 것입니다.

2-5-3. 컨테이너 내의 index.html을 호스트로 복사

  • 쉘에서 exit를 입력하여 나온 후 컨테이너 내의 index.html을 로컬로 복사하겠습니다.
docker cp [컨테이너명:내부 경로] [호스트 경로]
docker cp nginx-container:/usr/share/nginx/html/index.html index.html
  • 로컬로 옮긴 파일을 수정한 후 다시 컨테이너이 복사한 후 그 순간을 스냅샷으로 남겨 이미지를 만들 것입니다.
  • 파일을 수정하는 방법은 여러가지가 있지만 각자의 방식으로 사용하면 됩니다.(저는 Vim을 사용했습니다.)

2-5-4. 수정한 호스트의 index.html 파일을 컨테이너내로 복사

docker cp [호스트 경로] [컨테이너명:내부 경로]
docker cp index.html nginx-container:/usr/share/nginx/html/index.html

2-5-5. 컨테이너 스냅샷 찍기(이미지 생성)

docker commit [컨테이너명] [등록할 이미지명]

docker coomit [nginx-container] [modified-nginx]
  • 위처럼 스냅샷을 남기게 되면 아래처럼 생성된 것을 확인할 수 있습니다.

2-5-6. 기존 이미지 삭제

  • 우리가 새롭게 만든 이미지를 동작하기 위해 기존에 Docker Hub에서 다운로드 받은 이미지를 삭제하겠습니다.
  1. 컨테이너 중단(stop)
docker stop [컨테이너명]

docker stop nginx-container
  1. 컨테이너 삭제
docker rm [컨테이너명]

docker rm nginx-container

2-5-7. index.html 파일을 수정한 이미지 컨테이너화

docker run --name modified-nginx-container -p 8080:80 -d modified-nginx

  • 아까 복사한 파일이 스냅샷으로 이미지에 남아 새로운 컨테이너에서 확인할 수 있었습니다.

2-6. DockerFile

  • 실제로 도커 이미지를 만들 때는 스냅샷 방식보다는 도커파일을 더 많이 이용합니다.

2-6-1. 도커파일이란?

  • 이미지를 명령어 묶음으로 만들 수 있는 텍스트 파일

2-6-2. 도커파일로 이미지 만드는법

  1. Dockerfile이라는 명칭의 파일을 만들도록 합니다.
  2. Dockerfile 내부에 이처럼 작성합니다.
FROM nginx
COPY index.html /usr/share/nginx/html
  1. 이미지 생성
docker build -t [이미지명] .

docker build -t dockerfile_nginx .
  • 마지막에 .을 사용하지 않는다면 에러가 발생할 수 있습니다.
  • 정상적으로 이미지가 생성된 것을 확인할 수 있습니다.
  1. 새로운 포트로 오픈
docker run --name dockerfile-nginx-container -p 8000:80 -d dockerfile_nginx
  • 위의 코드가 정상적으로 실행되면 8000번 포트에서 실행된 것을 확인할 수 있습니다.

0개의 댓글