r잡초처럼
바른 프로그래밍
r잡초처럼
전체 방문자
오늘
어제
  • 분류 전체보기 (124)
    • FastAPI (7)
    • 끄적끄적 (2)
    • Python (17)
    • Django (31)
    • Database (2)
    • Docker (7)
    • 디자인패턴 (2)
    • CS 공부 (12)
      • 알고리즘 (2)
      • 자료 구조 (1)
      • 네트워크 (7)
      • IT 지식 (1)
      • 운영체제 (1)
    • 기타 팁들 (10)
    • Aws (2)
    • 독서 (1)
    • 코딩테스트 공부 (1)
      • 백준 (0)
      • 프로그래머스 (1)
    • DevOps (13)
    • TIL (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • cp949
  • pytest
  • 상속과 컴포지션
  • 상속 안티 패턴
  • 컴퓨터 기본 지식
  • 랜과 왠
  • dotenv
  • 물리 계층
  • docker
  • preonboarding
  • 케이블의 종류
  • 네트워크
  • 책 리뷰
  • 모두의 네트워크
  • 완벽한 IT 인프라 구축을 위한 Docker
  • 6장
  • validate
  • poetry
  • CS 지식
  • fastapi
  • depends
  • 파이썬 클린 코드
  • pycharm
  • 5장 회사에서 하는 랜 구성
  • 전기 신호
  • query param
  • Batch
  • 랜 카드
  • 7장
  • encoding

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
r잡초처럼

바른 프로그래밍

Docker

Docker 명령어 정리 - 2

2023. 1. 26. 20:35

2023.01.23 - [Docker] - DockerFile 작성하기 - 구성과 명령어 정리 - 1에 이어 명령어를 정리해 보자.

1. EXPOSE (deprecated)

EXPOSE  명령은 컨테이너가 런타임에 지정된 네트워크 포트에서 수신 대기함을 Docker에 알린다. 포트가 TCP 또는 UDP에서 수신하는지 여부를 지정할 수 있으며 프로토콜이 지정되지 않은 경우 기본 값은 TCP이다. EXPOSE 명령은 실제로 포트를 게시하지 않는다(주의!). 이미지를 빌드하는 사용자와 컨테이너를 실행하는 사용자 간에 게시할 포트에 대한 일종의 문서로 기능한다. 컨테이너를 실행할 때 실제로 포트를 게시하려면 도커 실행 시 -p 플래그를 사용하여 하나 이상의 포트를 게시 및 매핑하거나 -P 플래그를 사용하여 노출된 모든 포트를 게시하여 상위 포트에 매핑한다.

EXPOSE 80/udp

2. ENV

ENV <key>=<value> ...

ENV 명령은 환경 변수 Key를 값 value로 설정한다. 이 값은 인라인으로 대체할 수도 있다. 값은 다른 환경 변수에 대해 해석되므로 따옴표 문자는 이스케이프 되지 않으면 제거된다. 명령줄 구문 분석과 마찬가지로 따옴표와 백 슬래시를 사용하여 값 내에 공백을 포함할 수 있다.

ENV MY_NAME="John Doe"
ENV MY_DOG=Rex\ The\ Dog
ENV MY_CAT=fluffy

ENV 명령을 사용하면 한 번에 여러 개의 key = value 변수를 설정할 수 있으며, 아래 예제에서는 위와 동일한 결과를 얻을 수 있다.

ENV MY_NAME="John Doe" MY_DOG=Rex\ The\ Dog \
    MY_CAT=fluffy

ENV를 사용하여 설정된 환경 변수는 결과 이미지에서 컨테이너를 실행할 때 계속 사용된다.  docker inspect를 사용하여 값을 볼 수 있으며 docker run -env <key>=<value>를 사용하여 값을 변경할 수 있다. 스테이지는 부모 스테이지에 의해 ENV를 사용하여 설정된 모든 환경 변수를 상속한다. 

3. ADD

두 가지 form이 있다.

ADD [--chown=<user>:<group>] [--checksum=<checksum>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]

공백을 포함하는 경로에는 후자의 형식이 필요하다.

Note!
--chown 기능은 Linux 컨테이너를 빌드하는 데 사용되는 Dockerfiles에서만 지원되며 Windows 컨테이너에서는 작동하지 않는다. 사용자 및 그룹 소유권 개념은 Linux와 Windows 간에 변환되지 않으므로 사용자 그룹 및 이름을 ID로 변환하기 위해   /etc/passwd 및 /etc/group을 사용하면 Linux OS 기반 컨테이너에서만 기능을 사용할 수 있다.

ADD 명령은 <src>에서 새 파일, 디렉터리 또는 원격 파일 URL을 복사하여 <dest> 경로에 있는 이미지의 파일 시스템에 추가한다.

 

여러 <src> 리소스를 지정할 수 있지만 파일 또는 디렉터리인 경우 해당 경로는 build context source와 관련하여 해석된다. 각 <src>에는 와일드카드가 포함될 수 있다. 예를 들면 {hom}으로 시작하는 모든 파일을 추가하려면 아래와 같다.

ADD hom* /mydir/

아래 예제에서 "?"는 "home.txt"와 같은 단일 문자로 대체된다.

ADD hom?.txt /mydir/

<dest>는 source가 대상 컨테이너 내부에서 복사되는 절대 경로 또는 WORKDIR과 관련된 경로이다. 아래 예제로는 상대 경로를 사용하고 <WORKDIR>/relativeDir/에 {test.txt}를 추가한다.

ADD test.txt relativeDir/

다음은 절대 경로이다.

ADD test.txt /absoluteDir/
  • 선택적 --chown 플래그가 지정된 사용자 이름, 그룹 이름 또는 UID/GID 조합을 지정하여 추가된 콘텐츠의 특정 소유권을 요청하지 않는 한 모든 새 파일과 디렉터리는 UID와 GID가 0인 상태로 생성된다.
  • --chown 플래그의 형식은 사용자 이름 및 그룹 이름 문자열 또는 직접 정수 UID 및 GID를 임의로 조합할 수 있다.
  • 그룹 이름이 없는 사용자 이름 또는 GID가 없는 UID를 제공하면 GID와 동일한 숫자 UID가 사용된다. 
ADD --chown=55:mygroup files* /somedir/
ADD --chown=bin files* /somedir/
ADD --chown=1 files* /somedir/
ADD --chown=10:11 files* /somedir/

URL 파일이 인증을 사용하여 보호되는 경우 ADD 명령이 인증을 지원하지 않으므로 컨테이너 내에서 RUN wget, RUN curl 또는 다른 도구를 사용해야 한다.

3.1 ADD git repo ADD <gir ref> <dir>

이 양식을 사용하면 이미지 내부에서 git 명령을 사용하지 않고 직접 이미지에 git 저장소를 추가할 수 있다.

ADD [--keep-git-dir=<boolean>] <git ref> <dir>
# syntax=docker/dockerfile-upstream:master-labs
FROM alpine
ADD --keep-git-dir=true https://github.com/moby/buildkit.git#v0.10.1 /buildkit

--keep-git-dir=true 플래그는. git 디렉터리를 추가한다. 이 플래그는 false로 기본 설정 한다.

3.2 Adding a private git repo

ssh를 통해 개인 레포를 추가하려면 다음 형식의 Dockerfile을 생성해라.

# syntax = docker/dockerfile-upstream:master-labs
FROM alpine
ADD git@git.example.com:foo/bar.git /bar

이 Dockerfile은 docker build --ssh or buildctl buid --ssh로 빌드할 수 있다.

docker build --ssh default
buildctl build --frontend=dockerfile.v0 --local context=. --local dockerfile=. --ssh default

4. COPY

기본적으로 ADD와 비슷하다. 다만 COPY는 압축 파일을 추가할 때 압축을 해제하지 않고, 파일 URL도 사용할 수 없다.

COPY는 두 가지 형태를 가진다.

COPY [--chown=<user>:<group>] <src>... <dest>
COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]

COPY 명령어는  <src>에서 새 파일이나 디렉터리를 복사하고 <dest> 경로에서 컨테이너의 파일 시스템에 추가한다. 여러 <src> 리소스를 지정할 수 있지만 파일 및 디렉터리의 경로는 build context의 source와 관련하여 해석된다. 각 <src>에는 와일드카드(*)가 포함될 수 있다.

COPY hom* /mydir/

4.1 COPY --link

COPY 또는 ADD명령에서 이 플래그를 사용하면 파일이 자체 계층에서 독립적으로 유지되고 이전 계층의 명령이 변경될 때 무효화되지 않는다. --link를 사용하면 원본 파일이 빈 대상 디렉터리에 복사된다. 해당 디렉터리가 이전 상태 위에 연결된 계층으로 변환된다.

# syntax=docker/dockerfile:1
FROM alpine
COPY --link /foo /bar

이것은 두 가지 빌드를 수행하는 것과 같다.

FROM alpine

그리고 

FROM scratch
COPY /foo /bar

 

두 이미지의 모든 레이어를 병합한다.


참고

https://docs.docker.com/engine/reference/builder

'Docker' 카테고리의 다른 글

Docker Multi-Stage  (1) 2023.04.21
Docker Compose - 1  (0) 2023.02.23
DockerFile 작성하기 - 구성과 명령어 정리 - 1  (0) 2023.01.23
Docker에 대해 알아보자 - 정의, 작동 방식, 사용 이유  (0) 2023.01.22
[Docker] 1. WSL2 에 Docker 개발 환경 구축하기  (0) 2022.11.28
    'Docker' 카테고리의 다른 글
    • Docker Multi-Stage
    • Docker Compose - 1
    • DockerFile 작성하기 - 구성과 명령어 정리 - 1
    • Docker에 대해 알아보자 - 정의, 작동 방식, 사용 이유
    r잡초처럼
    r잡초처럼
    오늘보다 내일 더 나은 개발자가 되기 위한 노력을 기록하는 블로그 입니다.

    티스토리툴바