[Docker] Docker 사용해 보기 (기본 명령어 · docker-compose · Dockerfile)

손은실·2024년 4월 11일
0

DevOps

목록 보기
4/6
post-thumbnail

Docker란?

  • 프로세스 격리 기술을 이용한 컨테이너 기반의 오픈소스 가상화 플랫폼
  • 리눅스 커널 기술 활용
  • 하드웨어 가상화 기술보다 가벼움
  • 이미지 단위로 프로세스 실행 환경 구성

Docker 설치 하기

  • Docker는 기본적으로 Linux를 지원해 MaxOS와 Windows에 설치되는 Docker는 가상머신에 설치된다
  • 사용하고 있던 Ubuntu 운영체제의 클라우드 서버를 이용했다

실습 환경 : Ubuntu 20.04.6 LTS
Ubuntu 버전 확인 lsb_release -a


  1. Ubuntu 시스템 패키지 업데이트
sudo apt-get update
  1. 필요한 패키지 설치
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  1. Docker의 공식 GPG키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  1. Docker의 공식 apt 저장소 추가
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  1. 시스템 패키지 업데이트
sudo apt-get update
  1. Docker 설치
sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. Docker 실행 상태 확인
sudo systemctl status docker

기본 명령어

run

  • 컨테이너 실행하기
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...

ubuntu 20.04

docker run ubuntu:20.04


컨테이너 실행 시 이미지가 없다면 설치 후 컨테이너를 실행한다.

docker run --rm -it ubuntu:20.04 /bin/sh


-it 옵션으로 /bin/sh 에 접속해 컨테이너로 실행시킨 ubuntu의 쉘에 접속할 수 있다.
--rm 옵션으로 프로세스 종료 시 컨테이너가 자동 삭제되도록 한다.


웹 애플리케이션

docker run --rm -p 5678:5678 hashicorp/http-echo -text="hello world"


-p 옵션으로 내 PC의 5678번 포트와 hashicorp의 5678번 포트가 연결되어 명령을 보내면 "hello world" 을 반환해주는 웹 서버를 띄웠다.


MySQL

docker run -d -p 3306:3306 \
-e MYSQL_ALLOW_EMPTY_PASSWORD=true \
--name mysql \
mysql:5.7

3306번 포트를 열고, MySQL을 비밀번호 없이 접속하며, 컨테이너 이름은 mysql이고, 사용 할 이미지는 mysql:5.7

docker exec -it mysql mysql

띄운 mysql 컨테이너를 접속해서

DB를 만들고 접근 권한을 설정해준다.


ps

  • 컨테이너 목록 및 상태 출력
docker ps
docker ps -a

-a 옵션을 붙이면 중지된 컨테이너도 볼 수 있다.
컨테이너 실행 시 이름을 따로 정해주지 않으면 랜덤으로 이름이 정해진다.


stop

  • 컨테이너 중지
docker stop [OPTIONS] CONTAINER [CONTAINER...]

rm

  • 컨테이너 삭제
docker rm [OPTIONS] CONTAINER [CONTAINER...]

logs

  • 로그 출력
docker logs [OPTIONS] CONTAINER

docker ps 로 확인한 컨테이너 아이디로 해당 컨테이너의 로그를 볼 수 있다.


images

  • 이미지 목록 출력
docker images

rmi

  • 이미지 삭제
docker rmi 이미지 이름

pull

  • 이미지 설치
docker pull [OPTIONS] NAME[:TAG|@DIGEST]

network

  • Docker 컨테이너끼리 이름으로 통신할 수 있는 가상 네트워크 생성

  1. app-network 라는 이름의 네트워크를 만들고

  2. mysql 컨테이너를 app-network에 연결시키고

  3. wordpress 컨테이너를 app-network로 띄우면

  4. 접속 성공

  5. wordpress와 같은 가상 네트워크 상에 있는 mysql에 wordpress 관련 테이블들이 생성된 것을 볼 수 있음


volume

  • 컨테이너 내부 데이터를 외부로 링크를 걸어주는 기능
  • 컨테이너를 삭제하면 내부 데이터도 모두 삭제되기 때문에 외부 스토리지와 연결해줘야 함
-v /my/own/datadir:/var/lib/mysql

컨테이너 실행 시 -v 옵션으로 실제 서버의 경로를 연결시켜준다.


docker compose

  • 컨테이너의 환경 설정을 파일로 관리하는 도구

docker compose 설치

  1. Docker 공식 GitHub에서 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
  1. Docker Compose 실행 권한 부여
sudo chmod +x /usr/local/bin/docker-compose
  1. 설치 확인
docker-compose --version

yml 파일 작성


docker compose 실행

docker-compose up

없는 이미지는 pull 받고, DB가 올라오고, wordpress가 올라오고 있는 로그들을 직관적으로 볼 수 있다.


docker-compose down

도커 컴포즈로 띄운 mysql과 wordpress를 종료한다.


이미지

  • Docker는 레이어드 파일 시스템 기반
  • 이미지는 프로세스가 실행되는 파일들의 환경
  • 서버 환경을 저장해 새로운 이미지를 생성

Dockerfile

  • Docker 이미지를 빌드할 때 사용하는 텍스트 파일
  • 이미지의 구성과 빌드에 대한 명령어의 집합
  • 특정 프로그램의 최초 초기 설정을 모두 기록할 수 있어 일관성을 유지하고 유지보수가 용이해짐

.dockerignore
.gitignore과 비슷한 역할로, 도커 이미지를 만들 때 민감한 정보가 든 파일을 제외시킴


Dockerfile 작성

ubuntu:latest 이미지를 사용하고, git을 설치하라는 명령을 Dockerfile로 작성한다.


Dockerfile로 이미지 생성

docker build -t [이름]/[이미지 이름]:[tag] .

docker images 를 입력하면 생성된 이미지를 확인할 수 있다.

만든 이미지로 컨테이너 실행


reference

인프런 - 초보를 위한 도커 안내서

0개의 댓글