Docker

[Docker] 이미지 빌드와 컨테이너 실행

nang. 2020. 3. 24. 22:11
반응형
SMALL

IMAGE (이미지)

1. 이미지 생성하는 2가지 방법

1.1 Docker hub 에서 이미지 가져오기

$ docker (image) pull <이미지명>:<버전>
$ docker (image) pull gihyodocker/echo:latest
  • gihyodocker/echo라는 이미지를 최신 버전으로 받아오겠다.

1.2 Dockerfile 이용하여 이미지 만들기

2. 이미지 빌드하기(이미지 만들기)

이미지를 만들어서 생성한 경우 빌드가 필요

Dockerfile에 기술된 구성을 따라 도커 이미지 생성

Dockerfile이 있는 폴더에서 빌드해주면 편함

$ docker (image) build -t (Docker계정아이디/)<이미지명>:<버전or태그명> <Dockerfile가 있는 곳의 경로>
  • () : 생략가능
  • <> : 괄호없이 내용만 작성
  • Docker 계정 아이디/ : 네임스페이스
    • 이걸 써주면 Docker에 업로드 가능
    • 이미지명 충돌 방지
  • 옵션
    • -t 옵션
      • 이미지명 과 태그명을 지정
      • 반드시 지정해줄 것
    • -f 옵션
      • Dockerfile이 아닌 다른 파일명을 찾을 때

$ docker build -t ninizz/simpleweb:latest .

빌드 후 생성된 이미지 정보 확인

$ docker image ls

가지고있는 이미지 리스트 확인

$ docker images

3. 컨테이너 생성하기

$ docker (container) run
=
$ docker run
  • docker run = create + run
  • run하면 컨테이너 ID 출력
    • 컨테이너를 특정하기 위한 값이 출력 됨
  • 옵션
    • -d 옵션
      • 서버 프로그램을 run 시키면 해당 셸이 서버 로그창으로 바뀜
      • 그러지않게하기위해 백그라운드로 컨테이너를 실행시킨다는 옵션
    • -p 옵션
      • 포트 포워딩 지정
        • <호스트포트>:<컨테이너포트>
        • 호스트포트는 중복되면 안됨
    • -i 옵션
      • 컨테이너쪽 셸에 들어가서 명령 실행할 수 있는 입력이 되게끔 함
    • -t 옵션
      • 터미널 기능 활성화
    • -it 옵션
      • 주로 함께 자주 쓰임
    • -v 옵션
      • 볼륨 마운트 이용 시 사용
    • --name 옵션
      • 컨테이너의 이름을 지정해줌
      • --name <이름> 옵션과 붙여서 사용
    • --rm 옵션
      • 컨테이너를 stop 시키는 동시에 삭제까지 한번에 실행

$ docker container run -d -t -p 9000:8080 gihyodocker/echo:latest

현재 실행 중인 컨테이너 목록 확인

$ docker container ls
or
$ docker ps

종료된 컨테이너까지 모두 목록 확인

$ docker ps -a
  • 컨테이너의 ID 확인 가능
    • ID의 앞부분만 보여짐
    • 앞부분으로 식별 가능

4. 이미지 외부에 공개하기

$ docker image push <repository명>

5. 도커 컨테이너 생애주기

5.1 실행 중 상태

$ docker run

5.2 정지 상태

$ docker (container) stop <컨테이너ID>

5.2 재시작

$ docker (container) restart <컨테이너ID>

5.3 파기 상태 (삭제하기)

$ docker (container) rm -f <컨테이너ID>
  • 정지 상태여도 디스크에 남아 있다.
  • 디스크에서 완전히 삭제하려면 파기 상태로 만든다.
  • 현재 실행 중인 컨테이너는 그냥 파기할 수 없다.
    • -f 옵션을 사용한다.
      • -f 옵션
        • 강제 파기

5.4 필요없는 이미지나 컨테이너 일괄 삭제

  • 비활성화 된 리스트 확인

    $ docker ps -a
  • 비활성화 이미지 & 컨테이너 삭제

    $ docker system prune
  • 비활성화 이미지 삭제

    $ docker image prune
  • 비활성화 컨테이너 삭제

    $ docker container prune

6. 해당 컨테이너 실행하기

$ docker exec -it <컨테이너ID>
#
프롬프트 뜨면 명령치는 방법

or

$ docker exec -it <컨테이너ID> <실행할 명령>
커맨드 한줄에서 명령치는 방법
  • 셸 접속안하고 바로 셸에서 칠 명령을 한줄에 쳐도 됨

7. 컨테이너 로그 보기

$ docker logs <컨테이너ID>

8. 포트 포워딩

공개적인 공인 아이피를 통해 들어온 연결에 포트번호를 부여하여 그 포트 번호를 가진 아이피 주소로 접속하게 하는 것

  • 컨테이너 밖에서 온 요청(예를들면 호스트로부터 온 요청)을 컨테이너 안에 있는 애플리케이션에 해당 컨테이너 포트를 통해 전달해줘야한다.

    • 컨테이너마다 호스트의 포트가 다르게 부여된다.
    • <호스트포트>:<컨테이너포트>
    • <호스트포트:> 를 생략하면 자동 할당
  • run 명령 시 -p 옵션을 사용한다.

    $ docker container run -p 27017:27017 ninizz/mongo
    
    $ docker ps
    27017 -> 27017
    ## 호스트의 27017 포트에서 컨테이너의 27017 포트로 연결시키겠다.
  • 요청보내는 명령어

    $ curl <주소>
반응형
LIST