Docker 사용 관련

AIVILLAIN·2022년 12월 16일
0

Docker Engine 설치

과거 버전 삭제

sudo apt-get remove docker docker-engine docker.io containerd runc

repository 설정

sudo apt-get update
sudo apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release

sudo apt install curl

Docker Official GPG Key 등록

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

stable repository 등록

echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

docker engine 설치

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

설치된 도커 버전 확인

docker -v

dpkg —get-selections | grep docker
docker 이름 들어간 패키지 확인

docker ps
현재 실행중인 모든 컨테이너 목록 출력
사용자에게 도커 소켓에 접근 권한이 없어 실행되지 않음
1. sudo docker ps
확인 가능
2. 사용자 계정에서도 도커 사용 가능하도록 docker그룹에 사용자 추가 (관리자 권한 사용)
sudo usermod -aG docker $USER
sudo su - $USER

sudo와 su, su - root 그리고 admin, user 의 차이

Docker Compose 설치

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

실행 권한 부여

sudo chmod +x /usr/local/bin/docker-compose

설치 확인

docker-compose --version

이미지 예제

docker images
이미지 확인

docker pull centos
도커 레지스트리 상에서 centos 받아오기
이미지 이름은 :를 구분자로 이미지 이름, 태그로 구분
태그 지정하지 않으면 기본값으로 latest가 사용됨

docker images

도커에서는 하나의 이미지를 저장소(repository)라고 부름
TAG는 임의로 붙여진 추가적인 이름
일반적으로 버저닝 하기 위해 사용
태그를 생략하면 기본 latest
도커가 제공하는 공식 이미지는 네임스페이스가 없음
네임스페이스는 이미지 이름에서 슬래시로 구분
도커 공식 저장소에서는 사용자 이름을 네임스페이스로 사용
user/imagename

도커 이미지는 어떤 환경이 구성되어 있는 상태를 저장해놓은 파일의 집합
이 이미지 환경 위에서 특정한 프로세스를 격리시켜 실행한 것이 컨테이너
이미지는 파일들의 집합, 컨테이너는 파일들의 집합 위에서 실행된 프로세스
docker run 으로 컨테이너 실행 가능

docker run -it centos:latest bash
-it는 셸을 실행하기 위해 추가한 옵션
cent os 환경 접속
SSH처럼 서버로 접속한게 아닌 호스트OS와 격리된 환경에서 bash 프로그램을 실행했다고 이해하는 것이 맞음

docker ps
실행중인 컨테이너 목록 출력
컨테이너 아이디는 도커에서 컨테이너 조작 시 사용하기 때문에 알아둘 필요 있음
아이디 사용도 가능하고 이름도 사용 가능
이름은 docker run 할 때 —name옵션으로 지정 가능, 지정 안하면 임의 지정
—rm 플래그는 컨테이너 종료 상태가 될 시 자동 삭제

보편적인 이미지들은 명령어 기본값이 지정되어 있음
컨테이너의 기본적인 역할은 이미지 위에서 미리 규정된 명령어를 실행하는 일
명령어가 종료되면 컨테이너도 종료 상태에 들어감
죽은 컨테이너까지 보려면 docker ps -a

exit로 cent os bash 종료

docker restart 이름 or ID
컨테이너 되살리기

docker attach 이름 or ID
컨테이너로 실행된 프로세스와 터미널 상 입출력 주고 받기

docker stop 이름 or ID
컨테이너 강제 종료

docker rm 이름 or ID
종료된 컨테이너 삭제

컨테이너는 가상머신이 아닌 프로세스

이미지는 불변하나, 이미지 위에 무언가를 더해 새로운 이미지를 만들 수 있음
이미지를 기반으로 만들어진 컨테이너는 변경 가능하기 때문
계층화된 파일 시스템 사용

이미지 생성 예시

docker pull ubuntu:bionic

docker run -it ubuntu:bionic bash

git —version

docker ps

docker diff
부모 이미지와 파생된 컨테이너의 파일 시스템 간 변경사항 확인

apt update

apt install -y git

git —version

docker commit 컨테이너이름orID 이름:태그

docker rm : 컨테이너 삭제
docker rmi : 이미지 삭제

Dockerfile로 Git이 설치된 우분투 이미지 정의

mkdir git-from-dockerfile

cd git-from-dockerfile

Dockerfile 작성
FROM ubuntu:bionic
RUN apt-get update
RUN apt-get install -y git

Dockerfile로 이미지 빌드
docker build -t ubuntu:git-from-dockerfile .

Dockerfile 작성법

FROM : 어떤 이미지로부터 새로운 이미지를 생성할 지 지정
RUN : 직접 명령어를 실행하는 지시자
WORKDIR : 실행 디렉터리 변경
ENV : 컨테이너 실행 환경에 적용되는 환경변수의 기본값을 지정
EXPOSE : 가상머신에 오픈할 포트 지정
CMD : 컨테이너에서 실행될 명령어

docker run -d
백그라운드에서 컨테이너 실행
-p
포트포워딩
외부:내부

도커 허브에 이미지 올리기

docker info | grep Registry

docker.io/library/ubuntu:bionic

도커 레지스트리 서버 주소, 네임스페이스, 이미지 이름, 이미지 구분 태그

docker tag nacyot/moniwiki:latest wjsrjsdn12/moniwiki:latest

docker push wjsrjsdn12/moniwiki:latest

ps현재 실행주인 컨테이너 확인
-a 옵션은 Stop 상태의 컨테이너도 확인 가능
stop 옵션 컨테이너이름실행중인 컨테이너 중지
rm 옵션 컨테이너이름컨테이너 제거
logs 옵션 컨테이너이름컨테이너에 기록된 로그 확인
-r 옵션 사용 시 끝내지 않고 기다리며 새롭게 발생한 로그도 출력
images설치된 이미지 리스트 출력
rmi 옵션 이미지이름설치된 이미지 제거
pull 옵션 이미지이름:태그이미지를 도커 레지스트리로부터 다운로드
exec 컨테이너이름구동중인 컨테이너에 명령
run 이미지이름컨테이너 구동, 명령이 끝나면 종료됨

Ref

이론과 실습을 통해 이해하는 Docker 기초

도커(Docker) 입문편: 컨테이너 기초부터 서버 배포까지

초보를 위한 도커 안내서 - 설치하고 컨테이너 실행하기

[Docker 이해하기] 7. 여러 컨테이너의 운용 관리

profile
소신있는 오픈마인드

0개의 댓글