어쩌다 IT
article thumbnail
반응형

리뷰 (Review)

더보기
Docker Image 명령
  • Docker Image를 tar 파일로 저장
    • docker image save [옵션] <image 이름> <파일 이름>
  • Docker Image를 저장한 파일 내용으로 Image 복원
    • docker image load [옵션] <파일 이름>

 

Container 생성 과정 (생명 주기)

  1. Docker Image 다운로드 (pull) / Docker Image 생성 (build)
  2. Docker Container 생성 (create) - 격리된 프로세스 생성
  3. Docker Container 실행 (start) - Application 실행
  4. Docker Container 중지 (stop) - 필요에 따라 재시작 가능 (restart)
  5. Docker Container 삭제 (remove) - Application 종료

 

Docker Conatiner 명령

  • Container 생성
    • docker create <image 이름> [옵션]
    • Application 실행을 의미하는 것은 아니다.
  • Container 실행
    • docker start <container ID / 이름>
  • [이미지 다운로드], 생성, 실행을 일괄적으로 수행하는 명령
    • docker run [옵션] <image 이름> <container에서 동작 명령>
    • -i : 대화식 모드 사용
    • -t : tty (단말 디바이스) 사용
    • -d : 백그라운드에서 Container 실행, Container를 daemon process로 생성
    • --name <container에 부여할 이름> : Container에 이름 부여
    • -h <host 이름> : Container의 hostname 설정
    • -p <host port>:<container port> : host port와 container port 연결 (포트 포워딩)
    • -e <환경변수이름>=<값> : Container 내의 환경 변수 등록
  • 실행중인 Container 목록 출력
    • docker ps [옵션]
  • Container 중지
    • docker stop <container ID / 이름>
  • Container 삭제
    • docker container rm <container ID / 이름>
    • docker rm <container ID / 이름>
    • -f : 실행 중이라도 container 강제 삭제

 

Container 모니터링 도구

  • cAdvisor 사용
  • Container 리소스 상태 실시간 확인
    • docker stats <container ID / 이름>
  • Container의 실행 중인 프로세스 상태 확인
    • docker top <container ID / 이름>

Docker Container 명령어

 

Docker Container 생성 실습

 

docker run -it --rm --name ubuntu1804 ubuntu:18.04 /bin/bash
  • ubuntu 18.04 ver image로 container 생성 및 실행
  • -it : 터미널 상태에서 사용자와 상호 작용이 가능한 container 실행
  • --rm : container가 종료될 때 자동으로 container 삭제
  • --name : container 이름 지정
  • /bin/bash : container가 생성된 후 해당 명령 실행

 

docker run -dit -p 80:80 --name webserver nginx
  • nginx image로 webserver container 실행
  • -dit : 백그라운드로 터미널 상태에서 사용자 상호 작용 가능
  • -p 80:80 : host port 80을 container port 80으로 

 

docker exec -it webserver /bin/bash
  • webserver container에 /bin/bash 실행

 

docker run -dit --name linuxserver -e VAR1=Ubuntu18.04 -e VAR2=LinuxServer ubuntu:18.04
  • -e : container 내에 환경 변수 설정
  • container 생성 시 환경 변수 등록이 필요하면 -e 옵션을 통해 개별적으로 환경 변수 설정하거나
    --env-file <파일명> 옵션을 통해 환경 변수를 저장한 파일을 통해 설정할 수 있다.

 

docker run -dit -m 1g --rm --name linuxserver ubuntu:18.04
  • -m <메모리 크기> : 메모리 사용량을 제한하여 container 생성, 단위 b, k, m, g 중 선택

 

docker run -dit --cpu-shares 512 --rm --name linuxserver ubuntu:18:04
  • --cpu-shares <CPU 사용량> : CPU 사용 비율을 제한하여 container 생성

Python Application을 Container로 실행

  • 실습용 python Application 준비
from random import shuffle
from time import sleep

gamenum = input("Input Lotto Game Number : ")
for i in range(int(gamenum)):
    balls = [x+1 for x in range(45)]
    ret = []
    for j in range (6):
        shuffle(balls)
        number = balls.pop()
        ret.append(number)
    ret.sort()

    print(f"lotto number {i + 1:2} : ", end = " ")
    print(ret)
    sleep(1)

 

  • 파이썬 인터프리터 환경의 container 실행
docker run -it -d --name python-run python

 

  • python-run container에 진입하여 shell 실행
docker exec -it python-run bash

 

  • host에 있는 lotto.py 파일을 python-run container의 /home 디렉토리에 복사
docker cp lotto.py python-run:/home

 

  • lotto.py 프로그램 실행
docker exec -it python-run python /home/lotto.py

두근두근

 


 

JavaScript 프로그램을 Node.js Container를 이용하여 실행

  • 실습용 Node.js Application 작성
var http = require("http");
var content = function(req, res) {
	res.writeHead(200);
	res.end("Docker Container - Node.js app");
};

var web = http.createServer(content);
web.listen(8080);

 

  • Node.js 실행 환경의 container 실행
docker run -dit -p 80:8080 --name node-run node:16.17

 

  • app.js 파일을 node-run container의 / 디렉토리에 복사
docker cp app.js node-run:/

 

  • node-run container에 bash를 실행하여 동작 확인
docker exec -it node-run bash

 

  • app.js 프로그램 실행
docker exec -it node-run node app

 


 

Docker Container 관련 명령

  • container 일시 중지
    • docker container pause <container ID / 이름>
    • docker pause <container ID / 이름>

  • container 일시 중지 해제
    • docker container unpause <container ID / 이름>
    • docker unpause <container ID / 이름>

  • container 세부 정보 확인
    • docker container inspect <container ID / 이름>
      • ex) docker container inspect webserver | grep Pid
        • inspect 결과에 대하여 pipe와 grep을 활용하여 검색
      • ex) docker container inspect webserver --format "{{.State.Pid}}"
        • --format 옵션을 이용하여 원하는 내용 검색

  • container log 정보 출력
    • docker container logs <container ID / 이름>
    • -t : 시간 흐름에 따른 log 정보

Docker Image 생성

 

  • Docker image는 container를 생성하기 위한 목적으로 사용
  • Docker hub를 통해 미리 작성된 Docker image를 다운로드하여 사용하는 것이 일반적이며
    Docker hub에서 제공하는 Docker image는 기본이 되는 Image를 제공한다.
  • 사용자가 원하는 형태의 Image를 별도로 생성할 수 있으며 필요하다면 registry를 통해 배포할 수 있다.

 

Dokcer Image 생성 방법

  • docker commit 명령 이용
    • 현재 동작중인 container를 활용하여 image 생성
    • docker commit <현재 동작중인 container ID / 이름> <생성할 image 이름>
      • 현재 동작중인 container를 이용하여 image 생성
      • 명령이 성공하면 docker images 명령으로 image 확인
더보기
  • 위의 실습에서 진행한 python lotto.py 파일 실행하는 Docker image 파일 생성
docker commit python-run lotto-python:0.1

 

  • lotto.py 프로그램 실행 container 생성
docker run -it --rm lotto-python:0.1 python lotto.py

 

  • Dockerfile을 통해 직접 생성
    • Dockerfile은 image 생성 내용을 기술한 텍스트 파일
    • Dockerfile을 build 하여 image 생성

 

Dokerfile

  • docker image 생성, 즉 필요로 하는 개발 환경을 제공하기 위한 여러 명령 집합
  • Dockerfile, dockerfile 모두 가능하나 통상 Dockerfile을 많이 사용하며 별도의 형상/버전 관리 툴을 이용하여 관리한다.

 

Dockerfile 중요 명령어

  • FROM
    • 생성하려는 image의 base image 지정
    • hun.docker.com에서 제공하는 공식 image 사용 권장
    • 크기가 작은 base image 사용
    • tag를 지정하지 않으면 latest 버전으로 지정
  • RUN
    • 설정된 기본 이미지에 패키지 업데이트, 각종 패키지 설치, 명령 실행 등을 작성
    • 1개 이상 작성 가능
  • CMD
    • 생성된 Docker image를 container로 생성하여 실행할 때 실행되는 명령 기술
    • ENTRYPOINT 명령문으로 지정된 명령에 default로 넘길 파라미터 지정할 때 사용
    • 여러 개의 CMD 명령을 사용해도 마지막 한 개의 CMD 명령만 처리
    • 일반적으로 image의 container 실행 시 Application daemon이 실행되도록 하는 경우 유용
  • ENTRYPOINT
    • 생성된 Docker image를 container로 실행할 때 실행되는 명령
    • container 실행 시 명령 및 인자 값 전달하여 실행한다는 점이 CMD와의 차이점
    • 여러 CMD를 사용하는 경우 ENTRYPOINT 명령과 함께 사용
  • COPY
    • Host에 있는 파일을 Docker image에 복사하는 명령
    • 통상 Dockerfile과 같은 디렉토리에 있는 파일을 Docker image에 복사할 때 사용
  • EXPOSE
    • container가 host 네트워크를 통해 들어오는 트래픽을 listening 하는 포트와 프로토콜 지정
  • WORKDIR
    • container 상에서 작업할 경로 전환을 위해 사용
    • WORKDIR을 지정하면 RUN, CMD, ENTRYPOINT, COPY 명령은 해당 디렉토리를 기준으로 실행

 

Dockerfile을 이용하여 Docker image 생성

  • docker build <Dockerfile 위치> -t [<사용자 ID>/]<docker image 이름>:<버전 번호>
    • -t : docker image에 tag 추가 허용 옵션
    • <사용자 ID> : docker image를 docker registry에 upload 할 때 해당 사용자 ID repository에 upload

 

Dockerfile 생성 실습

더보기
  • ubuntu 배포판에 apache web server를 설치하고 계산기 web Application을 실행하는 image 생성

 

  • image 생성을 위해 필요한 파일 저장 디렉토리 생성
  • image 생성 시 필요한 파일을 생성한 디렉토리에 복사
  • Dockerfile 작성
# base image
FROM ubuntu:18.04

# Apache web server setup
RUN apt-get update && \
	apt-get install -y apache2

# Application COPY
COPY ./index.html /var/www/html
COPY ./calc.js /var/www/html

# EXPOSE setting
EXPOSE 80

# Command start
CMD ["/usr/sbin/apache2ctl", "-DFOREGROUND"]

 

  • Image 생성
docker build . -t calc-ubuntu:0.1

 

  • 생성된 image로 container를 생성하여 실행 확인
docker run -dit -p 80:80 --name calc-web calc-ubuntu:0.1

TIF

전체를 바라보는 시각이 필요하다.

 

 

2022. 09. 30 에 작성된 글입니다.

반응형
profile

어쩌다 IT

@jwlish

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!