Docker 19

[Docker] Dockerfile

Dockerfile Docker 이미지가 어떤 단계를 거쳐 빌드돼야 하는지를 담고 있는 텍스트 파일 Docker는 Dockerfile에 나열된 명령문을 차례대로 수행하여 이미지를 생성한다. 형식 INSTRUCTION arguments # 주석 각 명령문은 명령어(Instruction)으로 시작하며, 여러 개의 인자(Arguments)가 나열될 수 있다. 관례적으로 명령어는 대문자로 작성한다. 명령문 FROM FROM FROM : # 예시 FROM ubuntu FROM python:3.6​ Docker 이미지는 base 이미지 위에 새로운 층을 쌓아 새 이미지를 생성한다. FROM 명령문은 base 이미지를 지정하기 위해 사용하며, Dockerfile 최상단에 위치한다. 일반적으로 base 이미지는 Doc..

Docker 2021.12.21

[Docker] 컨테이너에 권한 부여

Docker는 컨테이너 내 root 사용자의 기능을 제한하는 기능을 제공한다. 컨테이너 내부의 프로세스가 호스트의 root 사용자가 할 수 있는 작업을 수행하면 시스템에 영향을 미칠 수 있기 때문이다. 따라서 Docker는 Linux의 Capabilities를 이용하여 리눅스의 호스트의 root 사용자와 컨테이너 내 root 사용자에게 권한 차이를 둔다. Capabilities Super User의 권한을 능력으로서 독립적으로 허용하거나 허용하지 않도록 설정하기 위한 단위 Super User의 권한을 조각으로 나눈 것 종류 CAP_SYS_ADMIN : sysadmin 작업 수행 CAP_SYS_TIME : 시스템 시간 변경 CAP_CHOWN : 파일의 uid/gid 변경 등등……. 프로세스는 root 권한..

Docker 2021.07.11

[Docker] 컨테이너 내 프로세스를 일반 사용자로 실행

일반적으로 Docker는 컨테이너 내에서 root로 프로세스를 실행한다. 컨테이너 내에서 일반 사용자로 프로세스를 실행하려면 --user 옵션으로 uid를 지정하거나 Dockerfile에 정의하면 된다. --user 옵션 docker run -it --user ubuntu bash username이 없는 이유는 컨테이너 내에 uid 1000으로 지정된 사용자가 없기 때문이다. Dockerfile 없는 사용자를 지정하지 않도록 Dockerfile 정의에 사용자를 먼저 생성한 뒤, 로그인 사용자를 지정해본다. FROM ubuntu RUN useradd docker_user -u 1000 -m -s /bin/bash USER 1000 위 Dockerfile로 빌드한 이미지를 이용하여 --user 옵션 없이 컨..

Docker 2021.07.10

[Docker] 컨테이너 실행 시 매개변수 지정

Docker는 VM과 다르게 운영 체제를 호스팅 하지 않고, 특정 task나 프로세스를 실행한다. 따라서 프로세스가 종료되면 도커로 실행한 Container도 종료된다. 예시로, 아래의 명령어를 실행하면 우분투 이미지를 이용한 컨테이너가 실행되고 즉시 종료된다. docker run ubuntu bash Bash는 프로세스가 아니라 단말기 입력을 수신하는 Shell로, 터미널을 찾지 못하면 종료되는데 도커는 기본적으로 컨테이너 실행 때 터미널을 연결하지 않는다. 따라서 bash는 터미널을 찾지 못해 종료되며 컨테이너도 함께 종료된다. CMD 컨테이너 실행 명령 지정은 명령어를 통해서도 할 수 있지만 아래와 같이 Dockerfile에서 정의할 수도 있다. FROM ubuntu # 쉘 형식 CMD comman..

Docker 2021.07.05

[Docker] 기본 개념

도커; Docker 컨테이너 기반의 오픈소스 가상화 플랫폼 다양한 프로그램과 실행환경을 컨테이너로 추상화하여 동일한 인터페이스를 제공한다. 프로그램 배포 및 관리를 단순화할 수 있다. 컨테이너; Container 격리된 공간에서 프로세스가 동작하는 기술 추가적인 OS를 설치하는 가상화의 성능을 개선하기 위해 등장한 프로세스 격리(리눅스) 컨테이너 이용 컨테이너를 이용하면 가벼운 가상 머신을 사용하는 것과 비슷하다고 느낄 수 있다. 이미지; Image 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것 상태 값은 가지고 있지 않으며 변하지 않는다(immutable). 컨테이너는 이미지를 실행한 상태라고 할 수 있다. 이미지는 도커 허브와 같은 도커 이미지 레지스트리 저장소에 저장하여 관리한다. 레..

Docker 2021.06.18

docker tag - 이미지 이름/태그 변경

Docker Hub 도커 공식 이미지 레지스트리 https://hub.docker.com/ Dockerfile 또는 docker commit 명령으로 만들어진 이미지는 도커 허브에 업로드할 수 있다. GitHub와 비슷하게 생각할 수 있는데, 만든 이미지를 도커 허브로 푸시하기 위해서는 이름과 같은 레포지터리가 있어야 한다. 그런데 이미지 이름에 오타를 냈다. 그러면 이미지를 새로 빌드하거나 다시 저장해야 할까? 아니다. 다행히 이미지 이름을 수정할 수 있는 명령어가 있기 때문이다. Ubuntu 공식 이미지 최신 버전에 개인적으로 사용하는 설정을 추가한 이미지를 생성했다. 근데 실수로 이미지 이름을 우분투가 아니라 부분투라고 만들어버렸다. 아래 명령으로 이미지 이름을 고쳐보도록 한다. docker tag..

Docker 2021.06.17

일반 사용자에 docker 실행 권한 부여

docker 실행에는 root 권한이 필요하다. 보통 일반 사용자가 root 권한이 필요한 명령어를 실행할 수 있도록 하려면 sudo 권한을 부여하는데, 여러 사용자에게 서버 관리 권한을 부여하는 건 위험하기 때문에 권장하지 않는다. 다행히 docker는 사용자가 docker 그룹 멤버인 경우, root 권한 없이도 docker 실행 권한을 가질 수 있다. usermod 명령을 이용하거나 그룹의 멤버 정보를 수정하여 일반 사용자가 docker를 실행할 수 있도록 해본다. 방법 usermod; user modification 사용자 정보 수정 명령어 usermod -aG docker # -a : --append; 사용자를 서브 그룹에 추가한다. -G 옵션과 함께 사용한다. # -G : --groups; 사..

Docker 2021.06.16

Docker 중지 시 Warning : Stopping docker.service, but it cat still be activated by: docker.socket

도커 서비스 중지를 시도하면 사진처럼 경고가 나올 때가 있다. 경고 의미 docker 서비스가 실행되지 않는 동안 docker 소켓에 연결을 시도하면 systemd가 자동으로 docker 시작할 수 있다. 만약 경고를 확인했다면 아래 명령어 등으로 docker 서비스가 여전히 동작 중인지 확인해본다. docker ps systemctl status docker 도커가 동작하고 있지 않으면 docker ps 명령어도 정상적으로 동작하지 않는다. 만약 여전히 도커 서비스가 동작하고 있으면 docker.socket 중지 후 docker를 다시 중지한다. systemctl stop docker.socket systemctl stop docker

Docker 2021.06.07

[Docker] 기본 명령어

도커 실행부터 컨테이너 생성 및 실행, 조회 등처럼 아주 기본적인 명령어를 정리해둔다. 도커 버전 확인 docker version 도커 실행 systemctl start docker root 권한이 필요하다. 컨테이너 생성 및 실행 docker run # -i : interactive; 사용자가 입출력을 할 수 있는 상태 # -t : pseudo tty; 가상 터미널 에뮬레이션 # --rm : 프로세스 종료 시 컨테이너 자동 종료 # -d : background 실행 # -p HOST_PORT:CONTAINER_PORT : 포트 포워딩 # -e : 환경 변수 설정 # --name : 컨테이너 이름 설정 # 예시 # python 3.6 이미지로 컨테이너 생성 후 /etc/issue 파일 내용 출력 dock..

Docker 2021.05.31
1 2