Docker

EEEFFEE·2024년 1월 17일
0

docker

목록 보기
2/6

24.01.16 최초 작성

1. docker 명령어

1.1 컨테이너 패키징 (이미지 생성)


#기본 명령어
docker build

#이미지 구분
docker build -t <사용자 이름>/<이미지 이름>:<버전 태그>

docker build -t yoon/ubuntu:1.0

#도커 파일 경로 지정
docker build -f /<경로>/<도커파일>

1.2 패키징된 이미지 실행 (애플리케이션 실행)

  • run : 배포 및 실행

#기본 명령어
docker run [run 옵션] <이미지이름> [컨테이너 실행 옵션 or 명령어]

docker run ~ yoon/ubuntu:1.0 ~

#-d : 백그라운드 실행, -P : 이미지에서 지정한 포트 open, -p 8080:80 : 8080번 포트를 통해 80번 포트에 접근 가능앷
docker run -d -P nginx

#일시 중지/다시 시작 (메모리에서 unload/load)
docker pause <컨테이너 ID/식별이름>
docker start <컨테이너 ID/식별이름>

#실행중인(중지 포함시 -a) 컨테이너 확인
docker ps (-a)

1.3 컨테이너 종료


#컨테이너 종료/강제종료
docker stop <컨테이너 ID/식별이름>


docker kill <컨테이너 ID/식별이름>

1.4 종료된 컨테이너 환경 보관


#종료된 컨테이너 환경 이미지 형식으로 보관
docker commit <컨테이너 ID/식별이름> [새로운 태그]

#지정한 이미지에 이름 부여
docker tag <이미지 hash값> <부여할 이름>

#이미지를 파일로 내보내기
docker save

#이미지파일을 Daemon으로 load
docker load

컨테이너 조작


# 컨테이너에 접근
docker exec [옵션] [컨테이너 명령 + 인수]
			-t : 터미널 열기
            -i : 표준 입출력 허용

#myweb 컨테이너에 bin/bash 실행
docker exec -it myweb /bin/bash		            

# 컨테이너의 로그 표시
docker log 

# 컨테이너/이미지의 상세정보 표시
docker inspect [옵션] <대상 이름> [옵션]

# docker hub에서 이미지 검색
docker search <검색 키워드>
docker search nginx

이미지 조작


#이미지 표시
docker images

#이미지 삭제
docker rmi

docker proxyserver


sudo vi /etc/docker/registry/config.yml

docker start registry
docker rm -f registry

docker run -d\
		-v /etc/docker/registry:/etc/docker/registry \
        -p 5000:5000 \
        --name registry \
        registry:2


#해당 레지스트리 사용해 pull
docker pull localhost:5000/ubuntu:latest



2. docker 사용처

  1. 기반 이미지 공유

    • 애플리케이션을 실행하기 위한 공통된 환경을 위해 구성
    • 런타임 환경 구성)
  2. 공유 볼륨

    • 도커는 파일 시스템을 볼륨단위로 컨테이너에 추가 가능하다
    • 호스트 수준에서 볼륨은 여러 컨테이너에서 공유 가능하며 컨테이너와 다른 라이프사이클을 가짐
  3. 개발 도구 컨테이너

    • 개발 환경과 서비스 환경이 다를때 컨테이너를 활용해 두 환경을 구분해 개발 및 운영 가능
  4. 테스트 환경 컨테이너

    • 테스트를 위한 환경
  5. 빌드 컨테이너

    • 애플리케이션 빌드가 복잡할 때 빌드 환경 의존성을 구성한 환경
    • 빌드 결과물을 볼륨에 사용
  6. 설치 컨테이너

    • 소프트웨어 설치 및 전개를 위한 컨테이너 (설치 자동화)
  7. 서비스 박스 컨테이너

    • 특정 서비스를 제공하기 위한 컨테이너
  8. INFRASTRUCTURE 컨테이너

    • 서비스/시스템 운영을 위한 컨테이너

Uni kernel

  • 불필요한 코드를 제거한 OS
  • 특정 애플리케이션 동작에 필요한 기능만 포함함

3. Docker 구문


#기반 이미지 지정
FROM <이미지 이름>
FROM <이미지 이름>:[태그]
FROM <이미지 이름>@<다이제스트>

FROM ubuntu:20.04

#이미지 제작자 정보 저장
MAINTAINER <이름 이메일>

MAINTAINER Minsu Choi <abcd@gmail.com>

#환경변수 지정
ENV <환경변수 이름> <>

ENV PYTHON3 python3.6
ENV PYTHON3=python3.6 PIP3=pip3.6
ENV PYTHON3=python3.6\
	PIP3=pip3.6
    
#컨테이너 빌드 시 실행되는 구문(변경 시 새로운 컨테이너 생성)
RUN <명령>
RUN <["실행파일", "매개변수1", "매개변수2"...]>
RUN <명령1>; <명령2>; ...

RUN apt-get update
RUN ["/bin/bash", "-c", "apt-get update"]
RUN apt-get update; install gcc g++

#컨테이너 생성하지 않고 파일시스템에 파일 추가(압축파일 압축해제해서 처리)
ADD <원본> <목적지>
ADD <원본1> <원본2> .. <목적지>

ADD lab2-1.c /data/

#원본 파일을 컨테이너의 위치로 복사(압축파일 그대로, 다른 이미지로부터 복사 가능)
COPY <원본> <목적지>

4. django 서버 이미지 빌드

4.1 mysite

4.2 Dockerfile

  • Dockerfile 작성

FROM    python:3.8-bullseye
RUN     mkdir -p /data
WORKDIR /data/
RUN     pip install Django==3.2.5
RUN     python -m django startproject mysite
WORKDIR /data/mysite/
RUN     python manage.py startapp polls
RUN     python manage.py migrate --noinput
CMD     python manage.py runserver 0.0.0.0:8000
EXPOSE  8000

  • 빌드 : docker build -t django/mysite:1.0 .

  • 실행
    • docker run -d -P django/mysite:1.0
    • docker run -it -P django/mysite:1.0

  • 포트포워딩
    • 서버의 포트 번호와 가상머신의 ip주소를 찾은 뒤 localhost와 포트포워딩을 진행한 후 접속


0개의 댓글

관련 채용 정보