본문 바로가기

개발

Docker 정리

설치

  • brew install —cask docker
  • brew install docker로 실행 할 경우 daemon이 떠있지 않다는 이슈다 있어 —cask로 GUI 프로그램까지 설치 후 GUI 프로그램 실행 후 문제 해결

how to install docker on the ubuntu

// Run the following command to uninstall all conflicting packages
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

// Add Docker's official GPG key
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

// Add the repository to Apt sources
echo \\
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] <https://download.docker.com/linux/ubuntu> \\
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \\
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

// Install
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Permission Issue

Solution

  • sudo chmod 666 /var/run/docker.sock

명령어

  • docker pull “image name”
    • 원하는 도커 이미지 다운로드
  • docker image ls
    • 설치되어 있는 이미지 목록 보기
  • docker run —name “container name” -d -p 80:80 nginx
    • nginx 이미지로 컨테이너 만들어서 80포트 을 열어두는 실행 명령어
  • docker image rm “image id”
    • 도커 이미지 삭제 아이디로 삭제해야 한다
  • docker image rm -f “image id”
    • 도커 이미지 강제 삭제
  • docker image rm $(docker images -q)
    • 컨테이너에서 사용하고 있지 않은 이미지 모두 삭제
  • docker create nginx
    • 이미지 있으면 해당 이미지로 생성, 없으면 다운받아서 생성한다.
    • container 이름은 랜덤으로 지어진다
  • docker ps -a
    • 모든 컨테이너 상태 확인
  • docker stop “container id”
    • 해당하는 컨테이너 실행 중지
  • docker rm “container id”
    • 해당하는 컨테이너 삭제
  • docker run “image name”
    • 이미지로 컨테이너를 생성하고 실행시키는 명령어
    • 포그라운드에서 실행
  • docker run -d nginx
    • 백그라운드에서 실행
  • docker run -d —name “container name” nginx
    • 백그라운드로 이름 작성해서 컨테이너 생성 및 실행
  • docker run -d —name “container name” -p “host port”:” container port” nginx
    • 호스트 포트와 도커 포트 를 연결해서 생성 및 실행
    • -p 4000:80 이면 브라우저로 localhost:4000 접속시 도커 컨테이너 80으로 연결됨
  • docker kill “container id”
    • 컨테이너 강제 종료
  • docker logs “container id”
    • 컨테이너 로그 확인
  • docker logs —tail 10 “container id”
    • 컨테이너 로그 마지막 10줄만 출력
  • docker logs -f “container id”
    • 실시간으로 생성되는 로그 확인
  • docker logs —tail 0 -f “container id”
    • 마지막 줄부터 지금 부터 생성되는 로그만 실시간으로 보는 명령어
  • docker exec -it “container id” bash
    • 실행 중인 컨테이너에 bash로 접속하기

도커 볼륨

  • 도커 이미지로 컨테이너를 생성하고, 새로운 변경된 부분이 있으면 기존 컨테이너를 삭제하고 새로운 컨테이터를 띄우는 방식이 도커 컨테이너 방식이다.
  • 데이터 베이스의 경우 데이터가 유지되어야 하는데, 이럴 때 사용하는 것이 볼륨(Volume)이라는 개념이다.

명령어

  • docker run -v “호스트 디렉토리 절대경록”:”컨테이너 디렉토리 절대경로” “이미지명”:”태그명”
  • lsof -i:”port”
    • 특정 포트에 어떤 프로그램이 떠있는지 확인 하는 명령어

이미지 별 사용법

  • 이미지 별로 사용 방법은 dockerhub에 적혀있다.
  • mysql의 경우 초기 루트 비밀번호를 설정해 주지 않으면 mysql 사용이 불가능하다.
  • https://hub.docker.com/_/mysql
  • $ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

볼륨 연결

  • docker run -e MYSQL_ROOT_PASSWORD=1234 -d -p 3306:3306 -v /Users/jiwonyoon/Documents/Develop/docker-mysql/mysql_data:/var/lib/mysql mysql
  • /var/lib/mysql 컨테이너 값을 host 경로 /Users/jiwonyoon/Documents/Develop/docker-mysql/mysql_data 에 세팅하도록 연결
  • 컨테이너의 볼륨 값을 호스트 값에 복사해서 동일한 값을 공유해서 사용한다.

DockerFile

  • Docker Image를 만들기 위한 파일

FROM

  • 베이스 이미지 생성
  • 특정 초기 이미지

문법

FROM 이미지명
FROM 이미지명:태그명
  • 이미지 생성 명령어 docker build -t my-jdk17-server .
    • 경로는 Dockerfile이 있는 경로에서 상대 경로로 처리
  • docker build -t my-jdk17-server:beta .
    • 태그명 작성한 버전
  • openjdk가 포함된 container를 실행 시키면, 모든 명령어를 완료하고 컨테이너가 종료된다.
    • 종료를 막기위한 명령어
      • ENTRYPOINT [”/bin/bash”, “-c”, “sleep 500”]
      • 500 초 동안 시스템을 일시정지 시키는 명령어

COPY

  • 파일 복사(이동)
  • 호스트 컴퓨터에 있는 파일을 복사해서 컨테이너로 전달

문법

COPY 호스트파일경로 컨테이너파일경로
  • 디렉토리를 복사할떄는
    • COPY mydir /mydir/
    • 경로 뒤에 / 까지 넣어주어야 한다.
  • 특정 확장자만 복사
    • COPY *.txt /text-files/
  • 전체 파일 복사
    • COPY ./ /
  • 복사할 파일 중 무시할 파일이 필요한 경우
    • .dockerignore 파일을 만들어서 내부에 값을 지정
    • 지정된 파일들은 copy 되지 않는다.

ENTRYPOINT

  • 컨테이너 시작할 때 실행되는 명령어
  • 컨테이너가 생성되고 최초로 실행할 때 수행되는 명령어

문법

ENTRYPOINT [명령문]

ENTRYPOINT ["node", "dist/main.js"]

'개발' 카테고리의 다른 글

인증 및 세션 관리를 위한 방법  (0) 2024.05.27
Fastlane  (0) 2024.05.12
PostgreSQL 커맨드  (0) 2024.05.08
PostgreSQL  (0) 2024.05.08
Content-Type  (0) 2024.05.08