분류 전체보기 101

컨테이너 내부 파일 ⇔ 로컬 PC 파일 복사 (docker cp)

docker cp 컨테이너와 로컬 PC 사이에서 파일 또는 폴더를 복사하는 명령어 사용법 docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH 정리하면 docker cp [OPTION] 저장할파일또는폴더 저장위치예시 ex1) 로컬 파일(./some_file_in_loca)을 컨테이너의 work 폴더에 복사 docker cp ./some_file_in_local CONTAINER:/workex2) 컨테이너에 있는 /var/logs 폴더에 있는 모든 파일을 로컬 PC의 /tmp/app_logs 폴더에 복사 docker cp CONTAINER:/var/logs/ /tmp/app_lo..

Docker 2023.10.11

[Docker] Docker References - EXPOSE

EXPORT 명령어 기본 문법 EXPOSE [/...] EXPOSE 명령어(instruction)는 Docker에게 container가 동작하는 동안 특정 포트를 사용한다는 것을 알려준다. 포트의 프로토콜은 TCP 또는 UDP이고 기본값으로는 TCP가 적용된다. EXPOSE 명령어가 실제로 포트 번호를 publish하는 건 아니다. 단지 이미지를 빌드하는 사람과 컨테이너를 동작시키는 사람 사이에 어떤 포트를 publish하도록 의도되었는지를 문서의 형태로 제공된다. 진짜로 container에서 port 번호를 publish하고 싶다면 docker run을 할 때 컨테이너의 -p 옵션값을 설정해줘야 한다. ex) EXPOSE 80/udp # UDP의 80번 포트를 열도록 하고 싶음 EXPOSE 80/tcp..

Docker 2023.09.18

[Docker] Docker References - LABEL

기본적인 LABEL 명령어(instruction) 문법LABEL = = = ... LABEL 명령어는 image에 메타데이터를 추가하는 기능을 갖고 있다. 위와 같이 LABEL은 key-value 쌍이다. 만약 LABEL 값에 공백을 추가하고 싶다면 큰 따옴표와 \를 사용하면 된다. ex) LABEL "com.example.vendor"="ACME Incorporated" # 공백을 포함할 때 큰 따옴표를 사용함 LABEL com.example.label-with-value="foo" LABEL version="1.0" LABEL description="This text illustrates \ that label-values can span multiple lines." # 공백을 포함할 때 백슬래시랑..

Docker 2023.09.18

[Docker] Docker References - CMD

CMD 명령어(instruction) 형식CMD ["executable","param1","param2"] (exec 형식, 이 형식을 더 선호된다) CMD ["param1","param2"] (ENTRYPOINT에 대한 기본 파라미터) CMD command param1 param2 (shell 형식) Dockerfile에는 오직 하나의 `CMD 명령어`만 존재할 수 있다. 만약, 1개 이상의 CMD 가 있다면, 가장 마지막에 있는 CMD가 동작한다. `CMD의 주요 목적`은 실행하고 있는 컨테이너에 기본값을 제공하는 것이다. 이 기본값들은 `executable`을 포함하거나 생략할 수 있다. (물론, 생략하는 경우에는 ENTRYPOINT instruction을 확정해야 한다) 만약에 CMD가 ENTRY..

Docker 2023.09.15

[Docker] Docker References - RUN

RUN 명령어는 2개의 형태를 가진다. RUN ⇒ 여기서의 command는 shell 형식의 명령어다. Linux에서는 /bin/sh -c, Windows 에서는 cmd /S /C가 생략된 거라 보면 된다. RUN ["executable", "param1", "param2"] ⇒ 이를 exec form 이라고 함 RUN 명령어(instruction)는 현재의 이미지 위에 새로운 층(layer)에서 명령을 실행하고 결과를 커밋한다. 커밋된 결과 이미지는 Dockerfile의 다음 단계에서 사용된다. 이렇게 층층이 쌓이는 RUN 명령어와 커밋들은 커밋이 간편하고 컨테이너가 Docker의 핵심적인 개념을 준수한다. exec form을 통해 shell string을 처리해야 하는 작업을 피할 수 있고 shell..

Docker 2023.09.13

[OS] 3-3. 프로세스에 대한 연산

대부분의 시스템에서 프로세스들은 병행 실행되면서 동적으로 생성되고 제거되야 한다. 때문에 OS는 프로세스 생성 및 종료를 위한 기능을 제공해야한다. 이번 페이지에서는 프로세스 생성 방법에 대해 살펴보도록 하겠다 . 1. 프로세스 생성 프로세스가 실행되는 동안 하나의 프로세스는 여러 개의 새로운 프로세스들을 생성할 수 있다. 이때, 프로세스를 생성한 프로세스를 부모 프로세스라고 하고 생성된 프로세스를 자식 프로세스라고 한다. 마찬가지로 자식 프로세스들도 프로세스를 생성할 수 있다. 이 결과들을 그림으로 표현하면 하나의 트리가 완성된다. 대부분의 현대 OS들은 프로세스 식별자(pid)를 사용해서 프로세스를 구분한다. 당연히 pid는 시스템의 각 프로세스에 고유한 값을 가지도록 할당된다. 이 식별자는 프로세스..

OS Concepts 10th 2023.09.06

[Network] 3-1. 전송계층 서비스 및 개요

전송 계층(transport layer)에 대해서 다뤘던 내용을 간략하게 살펴보도록 하자. 전송계층 프로토콜은 서로 다른 host에서 동작하는 애플리케이션 프로세스간에 논리적 통신(logical communication)을 제공한다. 논리적 통신이란 애플리케이션 관점에서 보면 프로세스들이 동작하고 있는 호스트들이 직접 연결된 것 처럼 보인다는 것을 의미한다. 실제로 host 들은 서로 다른 지역에 있기 때문에 물리적으로는 직접적으로 연결 될 수 없다. 애플리케이션 프로세스는 메시지 운반에 사용되는 물리적 인프라의 세부사항에 관계없이 서로 메시지를 송/수신하기 위해 전송 계층에서 제공하는 논리적 통신을 사용한다. 논리적 통신의 개념 그림 위 그림과 같이 전송 계층 프로토콜은 종단 시스템(end system..

[Docker] Dockerfile References - FROM

기본적인 문법 FROM [--platform=] [AS ] 또는 FROM [--platform=] [:] [AS ] 또는 FROM [--platform=] [@] [AS ]FROM 명령어는 새로운 빌드 stage를 초기화하고 뒤이어 나오는 명령어들에 대해 Base Image를 설정한다. 제대로 된 Dockerfile은 반드시 FROM 명령어 부터 시작해야 한다. 공식적으로 배포되는 이미지를 pull하면서 시작해야 편하다. FROM 명령어에서 사용하는 변수들 ARG : Dockerfile에서 FROM보다 앞에 위치하는 유일한 명령어다. 관련 내용은 잠시 후에 살펴본다. 'FROM' : 하나의 Dockerfile에 여러 번 FROM 명렁어를 사용할 수 있다. 그러면 여러 개의 이미지를 만들 수..

Docker 2023.09.05

[OS] 3-2. 프로세스 스케쥴링

다중 프로그래밍의 목적은 CPU 이용을 최대화하기 위해 항상 어떤 프로세스를 실행되도록 하는데 있다. 시분할(time sharing)의 목적은 각 프로그램이 실행되는 동안 사용자가 상호작용할 수 있도록 프로세스들 사이에서 CPU 코어를 빈번하게 교체하는 것이다. 때문에, 어떤 프로세스를 선택해야 하는지 결정해주는 프로세스 스케쥴러가 필요하다. 각 CPU 코어는 한 번에 하나의 프로세스를 실행할 수 있다. 단일 CPU 코어 ⇒ 한 번에 하나의 프로세스를 실행할 수 있다. 다중 CPU 코어 ⇒ 한 번에 여러 개의 프로세스를 실행할 수 있다. 코어보다 많은 프로세스가 있다면 남아있는 프로세스는 코어를 사용할 수 있는 상태에서 다시 스케쥴 될 때 까지 대기해야 한다. 이때, 현재 메모리에 있는 프로세스의 개수를..

OS Concepts 10th 2023.09.05