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
현재 실행중인 모든 컨테이너 목록 출력
사용자에게 도커 소켓에 접근 권한이 없어 실행되지 않음
- sudo docker ps
확인 가능 - 사용자 계정에서도 도커 사용 가능하도록 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) 입문편: 컨테이너 기초부터 서버 배포까지
'Engineering > Configuring' 카테고리의 다른 글
Kafka 구성 요소 (0) | 2023.09.13 |
---|---|
Kafka 동작 원리 (0) | 2023.09.13 |
MQTT & Kafka Test (0) | 2023.09.13 |
WSL2 CUDA, CUDNN 설정 (0) | 2023.09.13 |
WSL2 외부 접속 설정 (0) | 2023.09.13 |