이전 글에 이어서 작성한다.
1. 실행한 Container에서 user 생성하고 sudo 권한 주기
기본적으로 image를 통해 container를 실행하면 root 계정으로 들어가게 되어있다.
root 계정일 경우에는 프로그램을 마음대로 설치할 수 있는 모든 권한을 가지고 있다. 그러나 보안을 위해서 + 다른 일반적인 유저를 고려하기 위해 user를 생성해서 그 user에게 sudo 권한을 줄 수도 있다.
또한 나중 가서는 permssion문제도 있어서 유저를 결국 생성하는 게 맞다는 결론이 나왔다.
유저의 UID(유저아이디)와 GID(그룹아이디)는 나중에 Docker container의 저장 장소를 mount하는 문제 때문에 지정을 해주게 된다. 당장은 필요없으면 굳이 안해도 된다.
useradd -u (번호) (유저이름) # 유저 추가
groupadd -g (번호) (그룹이름) # 그룹 추가
usermod -g (그룹이름) (유저이름) # 유저를 그룹에 추가
usermod -aG sudo (유저이름) # 유저에게 sudo 권한 부여
useradd 말고 adduser를 쓰라고 하는 경우가 있는데 그러면 문제가 많이 생기므로 useradd를 쓰는 걸 권한다.
처음에는 sudo 권한을 주는 프로그램 조차 없을 수도 있다. 이런 경우에는 sudo program을 설치하는 작업이 필요하다.
이런 경우에는 다음처럼 sudo를 설치하고 user1을 추가해준다.
apt-get install sudo
usermod -aG sudo user1
grep sudo /etc/group
2. 아나콘다 설치
아나콘다 설치는 홈페이지에 설치법이 잘 나와있다.
사실 아나콘다 자체는 용량이 큰 편이라서 miniconda를 설치하는 걸 선호한다. 따라서 miniconda 설치로 가서 설치하도록 한다.
https://docs.anaconda.com/miniconda/install/
Installing Miniconda — Anaconda documentation
These three commands quickly and quietly download the latest 64-bit Windows installer, rename it to a shorter file name, silently install, and then delete the installer: curl https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe -o minic
docs.anaconda.com
미니콘다 설치 후에 바로 base environment가 안 보일 수 있는데 이 경우는 내가 사용하는 shell program에서 콘다 경로를 사용하지 않아서 발생하는 문제이다.
conda init
source .bashrc # 경로는 home directory
를 이용해서 base environment가 인식되는지 확인한다.
3. 환경 세팅
아나콘다 가상 환경에서 환경 세팅하는 법은 사람마다 다르지만 이미 다른 곳에서 세팅한 환경이 있다면 yaml 파일로 export한 다음에 docker에서 가져와서 import하는 게 간단하다. 그런데 도커 container를 만들고 파일을 가져오고 싶은데 그걸 어떻게 하는지가 궁금할 수 있다. 이 경우는 다음 4번 항목을 참고한다.
4. 실행할 때 volume mount 고려해서 실행하기
다음과 같이 container를 실행한다고 하자.
docker run -it --rm -u (유저이름) -v (호스트경로):(컨테이너경로) --name=(컨테이너이름) (이미지이름:태그)
-it 옵션
--rm 옵션
-u : 특정 유저 계정으로 들어가기
-v : 특정 호스트 경로와 컨테이너 경로 연결하기 - 이렇게 해야 코드 공유도 가능하고 결과 저장도 가능하다.
이렇게 호스트 경로와 컨테이너 경로를 연결해서 파일을 쉐어할 때 나는 permission denied 문제가 발생했다. 이는 내 호스트 시스템이 컨테이너 시스템에도 적용되면서 발생하는 문제이다.
** Permission denied에 대한 문제
내가 워크스테이션에서 user1라는 계정으로 접속해있고 그 위에 docker를 사용하고 있다고 하자. 그 docker 안에서 container를 만들어서 user1의 홈디렉토리에 있는 경로를 마운트하면 user1만이 접근할 수 있는 경로를 container에 있는 user2가 접속해야하는 상황인 것이다. 그러면 권한이 없다고 하면서 접근이 불가능해진다. 따라서 user2를 만들 때는 user1과 동일한 UID와 GID를 설정해서 권한에 문제가 없도록 해야 한다.
자세한 내용은 다음 링크를 확인하자.
https://mydeveloperplanet.com/2022/10/19/docker-files-and-volumes-permission-denied/
Docker Files and Volumes: Permission Denied
Encountered a ‘Permission Denied’ error on a file copied to a Docker image or when accessing a file on a mounted volume within a Docker container? In this blog, you will learn why you g…
mydeveloperplanet.com
https://medium.com/@nielssj/docker-volumes-and-file-system-permissions-772c1aee23ca
Docker volumes and file system permissions
The docker volume feature offers a way to support persistent storage, but it comes with some gotchas regarding file system permissions.
medium.com