반응형

Docker Compose 사용 에러

Docker compose Error

docker compose를 통해 docker hub에 올라가 있는 리액트 빌드 이미지를 다운받고 해당 이미지를 실행시켜주는 명령어를 구성하였다.

docker-compose.yml

version: '3.6'

services:
  my_app:
    image: myHubName/my_app:ver1.0.0
    container_name: my_app
    restart: always
    ports:
      - 80:80
    environment:
      TZ: Asia/Seoul

서버의 환경이 mac mini로 구성되어 있었는데,
docker-compose up명령어를 통해 실행 후 아래와 같은 오류를 만났다.

security -v unlock-keychain ~/Library/Keychains/login.keychain-db  
unlock-keychain "/Users/dawin-server/Library/Keychains/login.keychain-db"  
password to unlock /Users/dawin-server/Library/Keychains/login.keychain-db:  
security: SecKeychainUnlock /Users/dawin-server/Library/Keychains/login.keychain-db: The user name or passphrase you entered is not correct.

Mac 환경 서버 Security에러 해결

서버에서 보안관련 설정을 직접해줘도 되지만, ssh를 통해 작업을 하고 있었기때문에, 아래와 같이 허용 명령어를 입력하고 계정 비밀번호를 한번 더 입력해서 해결하였다.

security -v unlock-keychain ~/Library/Keychains/login.keychain-db

반응형
반응형

Docker Platform 오류

🚫 오류 현상

새로운 네이버 클라우드 서버 환경에 리액트 어플리케이션을 임시로 구성해야 하는 상황이 발생했다.
리액트 배포 관리도 도커 허브를 통해 관리를 하고 있었기때문에, 몇가지 설정값만 바꾸고 빌드하여 서버쪽에서 허브를 통해 PULL처리 후 run을 해보니 아래와 같은 오류를 만났다.

WARNING: The requested image's platform (linux/arm64) does not match the detected host platform (linux/amd64/v3) and no specific platform was requested

개발 PC의 경우 맥북 m1과 네이버클라우드 서버의 CPU 아키텍처 달라서 발생한 오류였다.

✅ 오류 해결

도커 허브에 이미지를 올리기전에 CPU 아키텍처를 맞춰서 빌드하여 올려주면 해결이 된다.
(멀티플랫폼을 적용하는 방식도 있다고 하는데, 이 방법은 차차 확인해보고 적용방법을 포스팅해보겠다.)

🔹 빌드 옵션에 platform키워드 사용하기

빌드 옵션에서 --platform 아키텍처를 통해 이미지를 재업로드를 진행했다.

// 예시의 경우 오류 메시지 아키텍처로 맞췄습니다.
// docker build --platform linux/amd64 -t [DockerHubName/Repository/TagName] --push .
docker build --platform linux/amd64 -t myHub/reactPrj/ver1.0.0 --push .

정상적으로 동작이되면 이미지를 생성해서 도커허브로 바로 올라가는걸 볼 수 있다.

🟢 동작 결과

서버로 다시 돌아와서 생성한 이미지를 다운받고 실행시키면 정상적으로 동작하는걸 볼 수 있다.

반응형
반응형

🐳 Docker

Docker는 컨테이너화된 어플리케이션을 개발하고 배포, 실행시키는 오픈 소스 플랫폼이다.
Docker의 실행 동작은 격리된 환경에서 어플리케이션을 패키징하고 실행하는 기능을 제공하는데, 서버의 OS에 영향을 받지 않고 도커 내부의 별도의 환경에서 구동되기에 Docker를 사용하게 되면 어떤 인프라 환경에서 분리되어 빠르게 배포하고 구동시킬 수 있게된다.

📝 Docker Architecture

Docker는 서버-클라이언트 아키텍처를 사용하는데, Docker Client는 컨테이너를 구축, 실행 및 배포하는 무거운 작업을 수행하는 Docker Daemon과 통신한다. 도커 클라이언트와 데몬은 동일한 시스템에서 구동될수도 있고 원격으로 연결될 수도 있으며 소켓 또는 Rest API를 통해 통신한다. Docker Compose로 어플리케이션을 구성하여 컨테이너를 작업할 수도 있다.

🖊️ Docker Daemon

도커 데몬은 Docker API요청을 수신하고 이미지, 컨테이너, 네트워크와 같은 도커 객체를 관리한다.

🖊️ Docker Client

도커 명령을 보내는 사용자들로 docker run과 같은 명령을 보내면 dockerd가 수행한다. docker명령은 Docker API를 사용하며 도커 클라이언트는 2개 이상의 데몬과 통신할수 있다.

🖥️ Docker Desktop

Mac, Windows, Linux환경에서 컨테이너화된 어플리케이션을 구축하고 공유할 수 있도록 도와주는 GUI어플리케이션으로 Docker Daemon, Docker Compose, Kubernetes등이 포함되어 있다.

🛠️ Docker Object

Docker를 사용하게 되면 컨테이너, 이미지, 네트워크, 볼륨, 플러그인 등의 객체들을 사용하게 되는데, 해당 객체들에 대한 내용을 확인해본다.

📦 Container

실행 가능한 이미지 인스턴스를 말하며, 어플리케이션을 실행하거나 생성, 중지, 이동 등을 할 수 있다.
도커 컨테이너는 자체 파일 시스템과 환경을 가지고 있으며 다른 컨테이너로부터 독립적인 환경으로 동작하는데, 각각의 어플리케이션이 서로에게 영향을 주지 않고 독립적으로 실행할 수 있다.

🏞️ Image

도커 이미지는 도커 컨테이너를 생성하기 위한 읽기 전용 템플릿이다. 한마디로 생성하고자 하는 어플리케이션을 뜻한다. Apache Tomcat이 될 수도 있고 Java Nginx 등등 어플리케이션을 이미지로 생성하고 사용할 수 있는데, 자신만의 이미지도 생성이 가능해서 사용하고자 하는 어플리케이션의 설정을 미리 처리해둔 상태로 이미지를 생성해서 사용할 수도 있다.
예를 들면, 기본 Tomcat의 기본포트를 처음부터 80으로 세팅해두어서 매번 배포시마다 굳이 포트부분의 설정을 바꿀필요가 없어진다.
이런 경우에는 Dockerfile을 통해 이미지를 빌드하고 생성할 수 있다.


참고 url: https://docs.docker.com/get-started/overview/

반응형
반응형

이번에 개발이 완료된 제품들을 윈도우 OS인 서버에 도커를 통해 처리하였다.
문제없이 셋업은 되었지만 혹시 모를 상황으로 서버가 재기동되면 알아서 컨테이너가 구동되도록 설정하고 싶어졌다.

🐳 서버 재기동시 도커 컨테이너 자동 시작처리하기

⭐️ docker-compose를 사용하는 경우

restart: always옵션을 도커 컴포즈에 추가한다.

docker-compose.yml

version: "3"

services:
  product_name:
    image: 제품명
    container_name: 컨테이너명
    ports:
      - 8080:8080
    volumes:
      - ./logs:/code/logs
    environment:
      TZ: Asia/Seoul
    depends_on:
      - maria_db
    command:
      - "sh"
      - "-c"
      - >
        python server/init/init_data.py &
        gunicorn -c /code/server/app/config/gunicorn_config.py server.app.main:app
    restart: always

  maria_db:
    image: mariadb
    container_name: maria_db
    ports:
      - 3306:3306
    volumes:
      - ./mariadb/conf.d:/etc/mysql/conf.d
      - ./mariadb/data:/var/lib/mysql
      - ./mariadb/initdb.d:/docker-entrypoint-initdb.d
    env_file: mariadb/.env
    environment:
      TZ: Asia/Seoul
    restart: always

⭐️ 명령어를 통한 설정

이미 컨테이너 설정이 끝나고 사용중이라면 아래 명령어를 통해 처리가 가능하다.

C:\Users\cloud> docker update --restart=always 컨테이너ID값

컨테이너 ID값은 Docker Desktop이 있다면 해당 프로그램을 실행시키고 컨테이너의 각 ID값을 가져오거나 아래 명령을 통해서도 확인이 가능하다.

C:\Users\cloud> docker ps -a

반응형