코딩마을방범대

Docker 내에서 Docker 사용하기 본문

💡 백엔드/우분투

Docker 내에서 Docker 사용하기

신짱구 5세 2023. 9. 7. 17:32

 

 

 

Docker 내에서 Docker를 사용하기 위해선 우분투를 베이스로 깔고, Docker을 설치하게 되는데

enable 등록을 해주지 않으면 이미지를 실행시켜도 도커가 자동으로 실행되지 않는다.

그렇지만 enable은 systemctl 권한이 필요하고, Dockerfile에선 systemctl 사용이 불가능하다.

 

따라서 우분투를 privileged 권한으로 실행 후 docker 등을 설치한 뒤 해당 컨테이너를 이미지화시키고,

그 뒤에 Dockerfile을 통해 필요한 명령어를 적은 뒤 이미지화 시키면 된다.

 

 

 


 

 

 

 

 

1. 우분투 이미지 파일 다운

 

$ docker pull ubuntu

 

 


 

 

2. 우분투 이미지 실행

 

※ 원래 여기서 bash로 시작하는게 아닌 /sbin/init으로 시작해야 privileged 권한을 가질 수 있지만,

나의 경우 오류가 발생해서 여기선 bash로 시작했다..

$ docker run -it -d --privileged=true --restart=always --name <생성할 컨테이너명> ubuntu bash

 

 


 

 

3. 컨테이너 내에서 docker 설치 및 필요한 컨테이너 실행

 

 

우분투에서 Docker 사용하기

이전포스트 참고하여 Docker가 뭔지 알아봤고, 우분투에 Docker를 설치하여 사용 예정이다. https://sweet-rain-kim.tistory.com/146 컨테이너와 Docker란? 컨테이너(Container)란? 애플리케이션을 환경에 구애받지

sweet-rain-kim.tistory.com

 

 

 

※ docker 설치 후 아래 명령어를 실행해야 Docker가 동작할 수 있음!

# apt update && apt-get install -y systemd
# systemctl enable docker
# /etc/init.d/docker start

 

Docker 설치 후 이미지를 실행시킬 때(run) 꼭 '-d --restart=always' 옵션을 넣어줘야 한다.

 

 

 

 

컨테이너에 접속하면 기본적으로 root 권한으로 접속이 되지만,

최종적으로 이미지 생성 후 컨테이너 접속하게 되면 로그인이 필요하므로 계정을 생성해 주거나 root 비밀번호를 설정하면 된다.

 

 

 

1. root 비밀번호 설정하기

$ passwd root

 

 

 

2. 계정 생성하기

※ 아래 방법 말고 adduser <계정이름>으로 진행 시 간단하지만 초기에 비밀번호를 설정하지 않는다.

# 계정 생성
$ useradd <계정이름>

# 비밀번호 설정
$ passwd <계정이름>

# 홈디렉터리 생성
$ mkdir -p /home/<계정이름>

# 홈 디렉터리에 권한 부여하기
$ chown -R <계정이름>:<계정이름> <홈디렉터리 경로>

# 그룹 생성
$ groupadd <그룹명>

# 그룹 지정
$ usermod -G <그룹명> <계정이름>

# 쉘 경로 (bash 쉘일 경우)
$ usermod -s /bin/bash <계정이름>

 

root 권한이 필요하므로 sudo 설치를 위해 아래 명령어도 순차적으로 실행한다.

sudoers 파일은 아래를 참고하여 추가해 주면 된다.

# apt-get update && apt-get install sudo vim
# vi /etc/sudoers

# 특정 사용자에게 sudo 사용 권한 부여 
username    ALL=(ALL)    ALL
<계정이름>  ALL=(ALL)    ALL

# 그룹에 포함된 모든 사용자에게 sudo 사용 권한 부여
%<그룹명>    ALL=(ALL)    ALL

# 패스워드 생략 설정
username    ALL=(ALL)    NOPASSWD: ALL
%<그룹명>  ALL=(ALL)    NOPASSWD: ALL

 

 

 


 

 

4. 실행 중인 컨테이너 이미지화 시키기

 

# 컨테이너 접속 후 종료 안했다면 exit 명령어 실행
$ docker commit <이미지화 시킬 컨테이너명> <레포지토리>:<태그명>

 

 

 


 

 

5. 만든 이미지를 바탕으로 Dockerfile 만들기

 

 

Docker 이미지 생성하기

Docker에 대한 기본 상식과 기초 사용 방법은 아래 포스트를 참고! 컨테이너와 Docker란? 컨테이너와 Docker란? 컨테이너(Container)란? 애플리케이션을 환경에 구애받지 않고 실행하는 기술이다. 운영체

sweet-rain-kim.tistory.com

 

$ vi Dockerfile
FROM <이미지명>:<태그명>

USER root
RUN su

RUN systemctl enable docker
RUN /etc/init.d/docker start

 

 

 


 

 

6. Dockerfile 이미지로 생성 후 실행 테스트

 

1. 이미지 생성

$ docker build -t <이미지명>:<태그명> .
빌드 시도 후 수정하고 재빌드할 경우 기존 빌드 이력을 따라갈 수 있으니
build 캐시 삭제가 필요하므로 아래 명령어 실행
$ docker builder prune

 

 

 

2. 실행 테스트

$ docker run -it -d --privileged=true --restart=always --name <컨테이너명> <레포지토리>:<태그명> /sbin/init

# docker ps
실행 테스트 시 로그인을 해야 하므로 3번에서 설정한 계정 정보가 필요하다.
컨테이너 내에서 컨테이너가 제대로 동작하고 있는지 확인 필요!
만약, 도커가 작동 중이지 않다는 오류가 발생할 경우 Dockerfile 명령어가 제대로 수행되지 않았을 가능성이 있다.

 

 

 

 


 

 

7. 만든 이미지 tar 파일로 변경

 

$ sudo docker save -o <저장할 파일명.tar> <이미지명>:<태그명>

 

 


 

 

 

💡 이미지 불러올 땐 아래 명령어 사용

 

$ sudo docker load -i 파일명.tar

 

 

 


 

 

8. 이미지 실행시키기

 

※ 만약 docker 내에서 포트를 사용할 일이 있다면 '-p <포트번호>' 옵션을 줘야한다.

$ docker run -it -d --privileged=true --restart=always --name <컨테이너명> <레포지토리>:<태그명> /sbin/init

 

 

 

 

 


참고사이트

일반 사용자에게 sudo 권한 부여

 

 

SMALL