Docker - 2 [개념 - 조작]

최정환·2022년 5월 5일
0

Docker

목록 보기
2/8

🧰 container

운영체계를 기반으로 만들어진 대부분의 Software는 그 실행을 위하여 OS와 Software가 사용하는 동적 Library에 대하여 의존성을 갖게되는데 Software의 실행을 위해선 OS, Library, Software가 필요로 하는 파일 등으로 구성된 실행환경이 필요한데, 하나의 시스템 위에서 둘 이상의 Software를 동시에 실행하려고 한다면 문제가 발생할 수 있다.
컨테이너를 사용한다면 이 문제를 회피하며 사용할 수 있다.

기존 OS를 가상화 시키던 것과 달리 컨테이너는 OS레벨의 가상화로 프로세스를 격리시켜 동작하는 방식으로 이루어진다.
process의 작업이 종료된다면 컨테이너도 종료된다.

컨테이너(Container)는 개별 Software의 실행에 필요한 실행환경을 독립적으로 운용할 수 있도록 기반환경 또는 다른 실행환경과의 간섭을 막고 실행의 독립성을 확보해주는 운영체계 수준의 격리 기술을 말한다.
컨테이너는 애플리케이션을 실제 구동 환경으로부터 추상화할 수 있는 논리 패키징 메커니즘을 제공한다.

ex)
환경(라이브러리, 언어 버젼,...)을 여러 개로 분리하여 다른 서버인 것처럼 사용이 가능하다.

docker image를 Daemon(api 요청수신, 이미지, 컨테이너, 네트워크 및 볼륨 같은 Docker 객체 관리)에서 동작하고 그로 인해 나오는 결과물이 컨테이너

컨테이너는 image layer에 read-write Layer를 추가하는 것으로 생성/실행된다.


container 조작

  1. 생성
    이미지를 기반으로한 단순 생성
    docker create <option> image-name <command> <arg..>
    docker container create <option> image-name <command> <arg..>

  2. 생성 후 실행
    docker run <option> image-name <command> <arg..>
    docker container run <option> image-name <command> <arg..>

  3. 실행
    두개의 image를 실행한다.
    docker start <option> container-name <container-name>

  4. 중지
    docker stop <option> 컨테이너명 <container-name>
    docker container stop <option> 컨테이너명 <container-name>

  5. 삭제
    docker rm <option> 컨테이너명 <container-name>
    docker container rm <option> 컨테이너명 <container-name>

명령어 모음 참고



📷 image

특정 프로세스를 실행하기 휘한 모든 파일과 설정값을 지닌 것
사용할 컨테이너에 대한 청사진으로 변동이 불가능하다.

image는 class가 하는 동작과 유사하다.
동작하고 있는 app을 snap-shot한 후 이것들을 이용해 실제로 동작하는 각각의 컨테이너를 만들 수 있다.
컨테이너는 수정이 가능하지만 이미지에 영향을 끼치지 않는다.

layer

레이어는 기존 이미지에 추가적인 파일이 필요할 때 해당 파일을 기존 이미지에 추가하기 위한 개념이다.

image는 read-only layer로 구성되어있고 파일이 추가된다면 새로운 layer가 생성된다.
docker는 여러 개의 layer를 묶어서 하나의 파일 시스템으로 사용할 수 있게 해준다.

이 layer는 Dockerfile로 관리된다.
이 file에서 한 줄 = 1layer 이며 layer의 순서에 따라 업데이트 | 다운 된다.

ex) 1,2,3,4 layer가 있고 3을 바꾼다면 3,4만 다운하면 된다.



📄 Dockerfile

참고

Dockerfile는 사용자가 이미지를 조합하기 위해 명령줄에서 호출할 수 있는 모든 명령을 포함하는 텍스트 문서


  • FROM

베이스(base) image를 지정하는 명령 (ex. FROM httpd:alpine)

  • LABEL

버전 정보 및 작성자 등의 image 설명을 작성하기 위한 명령 (ex. LABEL version="1.0.0")

  • CMD

docker container가 시작할 때, 실행되는 쉘 명령을 지정하는 명령

  • RUN

쉘 명령을 실행하는 명령 (단, RUN 명령은 image 작성 시 실행됨 : 일종의 새로운 image layer를 만드는 역할)

  • ENTRYPOINT

docker container가 시작할 때, 실행되는

  • EXPOSE

docker container 외부에 오픈할 포트를 설정하는 명령 (ex. EXPORT 8080)

  • ENV

docker container 내부에서 사용할 환경 변수를 지정하는 명령 (ex. ENV PATH/usr/bin:$PATH)

  • WORKDIR

docker container의 작업 디렉토리를 설정하는 명령

  • COPY

파일 또는 디렉토리를 docker container에 복사하는 명령
빈번히 바뀔 파일은 맨 마지막에 두는게 좋다

  • ADD

파일과 디렉토리 또는 특정 URL의 데이터를 docker image에 추가하는 명령 (ADD 명령은 COPY 명령과 유사하며, COPY 명령이 ADD 명령보다 명시적이므로 주로 COPY 명령을 사용함 : ADD 명령은 참고용)

  • SHELL

쉘 프로그램을 지정하는 명령 (CMD 명령으로 대체 가능하므로 참고로만 알아둘 것)

  • ARG

dockerfile 내에서 필요한 변수를 설정하는 명령 (docker image와 container에서 사용하는 환경 변수를 설정하는 ENV 명령과 달리, ARG 명령은 dockerfile 스크립트 작성을 위해 필요한 변수를 설정하는 명령임)

  • USER

docker image 및 container에서 작업하는 사용자 ID를 지정하는 명령 (ex. USER kim)

  • ONBUILD

생성한 docker image를 기반으로, 새로운 image를 생성할 때 실행되는 명령을 지정하는 명령

  • VOLUME

docker image를 위한 볼륨을 생성하는 명령

  • #

dockerfile에서도 주석을 사용할 수 있음 (#를 사용하면 해당 라인은 주석이 됨)






참고
https://hoon93.tistory.com/48
https://cultivo-hy.github.io/docker/image/usage/2019/03/14/Docker%EC%A0%95%EB%A6%AC/
https://medium.com/@i01029407043/docker-aws-ec2%EC%97%90-docker-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EB%B0%B0%ED%8F%AC-d8251f27368c

0개의 댓글