Docker, Docker Compose 및 권한
소개
Docker와 Docker Compose는 훌륭합니다. 어제 저는 소프트웨어의 API 위에 사용자 인터페이스를 생성하기 위해 소프트웨어를 설치해야 했습니다. Dockerfile을 다운로드하고, Docker Compose를 사용하여 일부 구성을 추가하고, 이미지를 빌드하고, 컨테이너를 실행하는 데 몇 분 밖에 걸리지 않았습니다. 나는 매우 행복한 Docker와 Docker Compose가 존재하지만 일부improvements on macOS를 보고 싶습니다.
사용자, 그룹 및 파일 권한의 개념도 훌륭합니다. 처음 사용하는 경우 모든 기본 사항을 다루는 this article 을 권장합니다.
문제
작년에 몇 가지 성능 문제로 인해. 스위치는 Docker 볼륨의 속도와 안정성을 확실히 개선했지만 macOS에서는 발생하지 않은 문제가 계속해서 발생했습니다. 파일 권한이 손상되었습니다.
macOS에서 Docker를 사용할 때 파일 권한은 로컬 시스템과 Docker 컨테이너 간에 동기화되지 않습니다. Linux에서는 파일 권한이 동기화됩니다. 제 생각에는 이는 실제로 모든 운영 체제에 적용되어야 하는 방식입니다.
이것은 큰 문제였습니다.
로컬에서 파일을 변경하면 컨테이너 내부에도 존재하지 않는 사용자 및 그룹으로 파일 권한이 컨테이너 내부에서 변경됩니다.
유일한 기존 루트 사용자를 사용하여 컨테이너 내부의 파일을 변경한 경우 파일 권한도 내 로컬 시스템에서
root:root
로 변경됩니다.당시 구성은 대략 다음과 같았습니다.
클릭하여 Dockerfile 열기
# Define base image
FROM php:8.0-cli-buster
클릭하여 docker-compose.yml을 엽니다.
version: '3.3'
networks:
web:
external: true
services:
application:
container_name: application
build:
context: .
dockerfile: ./Dockerfile
networks:
- web
volumes:
- ./:/var/www/html/
restart: always
우리는 다음과 같은 명령을 실행하곤 했습니다.
docker-compose exec application bash
해결책
로컬에서 사용하는 것과 동일한 ID로 Docker 컨테이너 내부에 사용자 및 그룹을 생성합니다. 이 작업이 완료되면 동일한 사용자 및 그룹이 사용되므로 파일 권한을 동기화할 수 있습니다.
처음에는 셸 구성에서 사용자 및 그룹 ID를 내보내야 합니다(예:
~/.zshrc
또는 ~/.bashrc
).# Export variables for Docker and Docker Compose
export USER_ID=$(id -u)
export GROUP_ID=$(id -g)
이제 구성은 대략 다음과 같습니다.
클릭하여 Dockerfile 열기
# Define base image
FROM php:8.0-cli-buster
# Define build arguments
ARG USER_ID
ARG GROUP_ID
# Define environment variables
ENV USER_ID=$USER_ID
ENV GROUP_ID=$GROUP_ID
ENV USER_ID=${USER_ID:-1001}
ENV GROUP_ID=${GROUP_ID:-1001}
# Add group and user based on build arguments
RUN addgroup --gid ${GROUP_ID} alice
RUN adduser --disabled-password --gecos '' --uid ${USER_ID} --gid ${GROUP_ID} alice
# Set user and group of working directory
RUN chown -R alice:alice /var/www/html
클릭하여 docker-compose.yml을 엽니다.
version: '3.3'
networks:
web:
external: true
services:
application:
container_name: application
build:
context: .
dockerfile: ./Dockerfile
args:
USER_ID: $USER_ID
GROUP_ID: $GROUP_ID
networks:
- web
volumes:
- ./:/var/www/html/
restart: always
이제부터는 새로 생성된 사용자를 사용하여 컨테이너 내부에서 명령을 실행해야 합니다. 이제 다음과 같은 명령을 실행합니다.
docker-compose exec --user alice application bash
추가 읽기
Docker 및 Docker Compose를 사용하는 로컬 개발 환경에 대해 자세히 알아보려면 얼마 전에 동료가 쓴 글을 참조하세요.
Reference
이 문제에 관하여(Docker, Docker Compose 및 권한), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/visuellverstehen/docker-docker-compose-and-permissions-2fih텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)