본문 바로가기
DevOps

Docker 설치 및 명령어 정리

by WhoamixZerOne 2022. 7. 24.

자동 설치 스크립트(리눅스)

Docker는 리눅스 배포판 종류를 자동으로 인식하여 패키지를 설치해주는 스크립트를 제공

$ sudo wget -qO- https://get.docker.com/ | sh

Ubuntu 패키지 설치

/usr/bin/docker.io 실행파일을 /usr/local/bin/docker로 링크해서 사용

$ sudo apt-get update
$ sudo apt-get install docker.io
$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker

docker-compose 설치

curl을 사용해서 github에서 docker-compose 바이너리 설치

터미널에서 사용할 수 있도록 심볼릭 링크 생성, 실행 권한 부여
마지막으로 version 출력으로 정상적으로 설치되었는지 확인

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

$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
$ chmod +x /usr/bin/docker-compose

$ sudo docker-compose -v

Docker 관리자 권한(로그아웃 or 재부팅해야 적용)

$ sudo usermod -aG docker ${USER}

이미지(image) 검색(search)

Docker Hub를 통해 이미지를 공유하는 생태계가 구축

$ docker search {이미지명}
ex) $ docker search ubuntu

이미지 내려받기(pull)

docker pull {이미지 이름}:{태그} 형식. latest를 설정하면 최신 버전 pull

$ docker pull ubuntu:latest

이미지 목록 출력

$ docker images

이미지 빌드(build)

Dockerfile을 빌드할 경우 Dockerfile 파일과 같은 디렉터리에서 진행

$ docker build -t {이미지명:태그 or ID}

컨테이너(container) 실행

-i (Interactive), -t (Pseudo-tty) 옵션 사용하면 실행된 Bash Shell에 입력 및 출력

$ docker run -it --name {컨테이너명 or ID} -p 3306:3306 {이미지명 or ID}

지정 이미지로 컨테이너 이름을 지정해서 포트번호를 3306으로 지정하여 컨테이너를 실행한다.

포트는 외부의 포트번호(3306):컨테이너 내부 포트번호(3306)로 포워딩된다.

 

-V (Volume) 호스트와 공유할 디렉터리 목록

ex) -v /root/data:/data 호스트의  /root/data 디렉터리를 Docker 컨테이너의 /data 디렉터리에 연결

$ docker run --name {컨테이너명 or ID} -v $(pwd):/home/node/app -p 8080:8080 {이미지명 or ID}

exit(또는 Ctrl+D)를 입력하여 Bash Shell에서 빠져나오면 컨테이너가 정지된다.

Ctrl+p, Ctrl+q를 차례대로 입력하여 컨테이너를 정지하지 않고, 컨테이너에서 빠져나올 수 있다.

컨테이너 실행(데몬 demon으로 실행)

-d (Detached) 백그라운드로 실행

$ docker run -d --name {컨테이너명 or ID} -p 3306:3306 {이미지명 or ID}

컨테이너 시작

실행과 차이점은 정지된 컨테이너를 시작만 해주고 Bash Shell에 접속은 하지 않음

run의 경우는 컨테이너가 안 만들어져 있을 경우 사용할 수 있음

$ docker start {컨테이너명 or ID}

컨테이너 재시작

$ docker restart {컨테이너명 or ID}

컨테이너 접속

실행되어 있는 컨테이너에 접속(Bash Shell 표시)

$ docker attach {컨테이너명 or ID}

컨테이너 명령 실행

외부에서 컨테이너 안의 명령을 실행

$ docker exec {컨테이너명 or ID} {명령} {매개 변수}
ex) docker exec {컨테이너명 or ID} echo "Hello World"
Hello World // 컨테이너 bash에서 실행한 결과

컨테이너 목록 출력

-a 옵션을 사용하면 정지된 컨테이너까지 모두 출력, 옵션을 사용하지 않으면 실행되고 있는 컨테이너만 출력

$ docker ps
$ docker ps -a

컨테이너 로그 확인

로그 종료 - Ctrl+c

$ docker logs -f {컨테이너명 or ID}

컨테이너 연결

웹 서버 컨테이너, DB 컨테이너가 있다고 가정할 때, 접근할 수 있어야 하는데 이때 --link 옵션으로 컨테이너를 연결

먼저 DB 이미지를 컨테이너로 실행

$ docker run -d --name {컨테이너명 or ID} {이미지명 or ID}

이제 Web 컨테이너를 생성하면서  DB 컨테이너와 연결

--link {컨테이너명 or ID}:{별칭}

$ docker run -d --name {컨테이너명 or ID} -p 8080:8080 --link {컨테이너명 or ID}:{별칭} {이미지명 or ID}

MySQL 시

$ docker run -d --name {컨테이너명} -e MYSQL_ROOT_PASSWORD={password} -p 3306:3306 {이미지명}:{별칭}

Postgresql 시

$ docker run -d --name {컨테이너명} -e POSTGRES_PASSWORD={password} -p 5432:5432 {이미지명}:{별칭}

컨테이너 정보 확인

docker inspect 명령으로 컨테이너의 세부 정보 확인
$ docker inspect {컨테이너명 or ID}

컨테이너 정지

$ docker stop {컨테이너명 or ID}

컨테이너 삭제

삭제할 컨테이너는 구동이 중지되어 있어야 한다

$ docker rm {컨테이너명 or ID}

이미지 삭제

$ docker rmi {이미지명 or ID}

기존의 모든 Volume 삭제

$ docker volume rm $(docker volume ls -q)

컨테이너 전체 중지, 삭제

$ docker stop $(docker ps -aq)
$ docker rm $(docker ps -aq)

컨테이너 전체 강제 중지 삭제

$ docker rm -f $(docker ps -aq)

이미지 전체 삭제

이미지 삭제는 2가지 방법이 존재한다. 첫 번째 "docker image prune -a" 명령어로 삭제할 경우 y/n으로 한 번 더 확인한다.

그리고 이미지명이 지정이 안되어 있을 경우 삭제가 안된다.

$ docker image prune -a
$ docker rmi $(docker images -q)

 

 

 

🔗 Reference

 

Docker Hub Container Image Library | App Containerization

We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy

hub.docker.com

 

Docker 기본 사용법

Docker는 리눅스 서버를 손쉽게 패키징하고, 배포할 수 있도록 해주는 플랫폼입니다. 이 문서는 Docker 기본 사용법 강좌입니다.

pyrasis.com

 

'DevOps' 카테고리의 다른 글

[Docker] Redis 설치  (0) 2023.06.28
Dockerfile & docker-compose 작성  (0) 2022.07.31

댓글