일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 깃
- jupyter lab
- 플러터
- c# 추상 클래스
- C++
- C언어 포인터
- git
- Houdini
- jupyter
- 포인터
- Python
- gitlab
- 도커
- C# delegate
- vim
- HTML
- 구조체
- 다트 언어
- github
- docker
- Unity
- dart 언어
- c#
- 유니티
- c언어
- Flutter
- c# 윈폼
- Algorithm
- Data Structure
- c# winform
- Today
- Total
목록DevOps/Docker (34)
nomad-programmer
nvidia 도커 컨테이너 사용을 위한 패키지와 설정도 모두 하였는데... 다음과 같은 에러가 발생했다.도커가 nvidia 설정이 잘 되었는지 테스트할 겸 아래와 같이 명령을 실행했다. docker run --gpus all nvidia/cuda:11.5.2-base-ubuntu20.04 nvidia-smi그러나 "Failed to initialize NVML: Unknown Error" 에러가 나타났다... 어쩐지... ai가 응답하는 것이 영... 시원찮았다. GPU가 아닌 CPU로만 응답을 했었구나...아...Solutionsudo vim /etc/nvidia-container-runtime/config.toml위의 명령을 통해 config.toml 파일에 접근한다. 그 후 다음과 같이 변경해주자...
Docker Hub (https://app.docker.com/) 에 push & pull 을 하려면, 먼저 로그인을 해야 한다. 따라서 다음과 같이 로그인을 진행할 것이다.$ docker login위의 명령을 실행하면 ID & Password를 입력하라고 나온다. 계정 정보가 맞다면 로그인이 될텐데.. 그러면, `$HOME/.docker/config.json` 파일에 해당 비밀번호가 base64로 인코딩 돼어 다음과 같이 입력된다. { "auths" { "https://index.docker.io/v1/: { "author": "" } }}이곳에 비밀번호가 자동으로 들어가는 이유는, 다음 login할 때 조금 더 편하게 로그인하기 위함이다. 이것이 장점이 될 수 있지만 단점이 될..
메일 서버를 운용하려면 DNS부터 설정해야 한다. DNS 설정은 아래의 블로그에 잘 정리되어 있어서 링크를 걸었다. https://gumu.kr/blog/185/mailplus2/ 시놀로지 NAS, 메일서버 구현하기 2탄(도메인DNS, SPF, DKIM, DMARC 설정) - Gumu's treasure box Read in: English 1탄에서는 Synology NAS내에 Mail Plus (1) 패키지 설치 (2) 패키지 설정을 다루었다. 2탄에서는 Mail Plus를 사용하기 위한 도메인 설정을 해보도록 한다. 먼저, 도메인과 연결할 실제 NAS의 외 gumu.kr 아래의 블로그가 더 잘 되어있는 듯! https://www.wsgvet.com/home/677 mail server https://..
Portainer는 Docker와 Kubernetes 관리를 WEB GUI에서 쉽게 관리할 수 있도록 도와주는 오픈 소스이다. https://github.com/portainer/portainer GitHub - portainer/portainer: Making Docker and Kubernetes management easy. Making Docker and Kubernetes management easy. Contribute to portainer/portainer development by creating an account on GitHub. github.com Portainer를 설치하기 앞서, Docker를 설치해야 한다. Docker 설치 개발사에서 알려주는 설치법이 가장 안정하니 아래의 ..
Docker Daemon의 옵션 및 기본 옵션 docker [옵션] --api-enable-cors=false : API를 사용할 때 CORS(Cross-origin resource sharing)를 활성화한다. -b, --bridge="" : 미리 만들어 놓은 네트워크 브릿지 인터페이스를 사용한다. none을 설정하면 컨테이너에서 네트워크를 사용하지 않는다. --bip="" : CIDR 표시법으로 docker0의 IP 대역을 설정한다. -b 옵션과는 함께 사용할 수 없다. --bit="192.168.0.1/24" -D, --debug=false : 디버그 모드를 활성화한다. -d, --daemon=false : 데몬 모드로 실행한다. --dns=[ ] : docker가 사용할 DNS 서버를 설정한다. ..
docker 컨테이너는 개발 환경과 같이 한 대의 머신에서 가동시킬 때는 간편히 도입할 수 있다. 하지만 멀티-호스트로 구성된 실제 환경을 클러스터 구성으로 가동시키려면 컨테이너의 시작 및 정지와 같은 조작뿐만 아니라 호스트 간의 네트워크 연결이나 소토리지 관리, 컨테이너를 어떤 호스트에서 가동시킬지와 같은 스케줄링 기능이 필요하다. 더욱이 컨테이너가 정상적으로 작동하고 있는지의 대한 여부를 감시할 장치도 필요하다. 이러한 기능을 갖추고 컨테이너를 통합 관리할 수 있는 툴을 컨테이너 오케스트레이션 툴이라고 한다. 대표적인 컨테이너 오케스트레이션 툴이 무엇이 있는지 알아보자. Kubernetes kubernetes는 Google의 엔지니어를 중심으로 하는 커뮤니티에서 개발이 진행되고 있는 오픈소스 컨테이너..
Docker Machine의 기본 명령 docker-machine은 Docker for Mac 또는 Docker for Windows에 미리 설치되어 있다. Linux에서는 별로도 설치해야 한다. 2020/12/06 - [DevOps/Docker] - [Docker] 멀티호스트 환경에서 컨테이너 관리 다음의 명령을 실행하면 docker-machine의 버전 정보를 확인할 수 있다. $ docker-machine --version docker-machine 명령의 주요 서브 명령은 다음과 같다. 서브 명령 설명 create 실행 환경 작성 ls 실행 환경 목록 표시 status 실행 환경 상태 표시 url 실행 환경 URL 표시 ssh 실행 환경에 대한 SSH 연결 start 실행 환경 시작 stop 실행..
Django 서버와 DB 서버가 있다고 가정해보자. 이 서버들의 의존성은 다음과 같다. Django 서버는 DB 서버를 내부적으로 사용하기 때문에 DB 서버가 온전하게 구동된 후 Django 서버에서 DB서버를 사용해야 한다. 그런데 docker-compose 위의 서버 구성을 작성하여 실행하게되면 DB서버가 빨리 구동되면 문제가 없겠지만 DB서버가 구동되고 있는데 Django서버가 구동되면 문제가 발생한다. 그렇다고 DB서버를 먼저 실행한 후 온전히 구동되기를 기다렸다가 Django 서버를 구동시키는 수작업은 너무 귀찮을 일이다. 이것을 해결할 수 있는 방법이 있다. 그것은 아래의 스크립트를 이용하는 것이다. github.com/vishnubob/wait-for-it vishnubob/wait-for-..
버전 관리 서버를 private 하게 내부에서 관리할 필요가 있다는 판단하여 docker를 가지고 GitLab 서버를 구축하였다. 구축 과정을 블로그에 남긴다. DB서버를 사용하는 내부 서버가 있다. 그곳에다 GitLab서버를 구축하려고하였다. 그래서 다른것 하나 생각치않고 docker부터 떠올렸다. 이유는 해당 서버에 DB서버가 구축되어 있기 때문에 GitLab서버를 그대로 설치해버리면 기존에 사용하던 시스템이 망가질 우려가 있었기 때문이다. 따라서 기존의 시스템에 전혀 영향이 가지 않게끔 도커를 이용하여 GitLab 서버를 설치하였다. hub.docker.com/r/gitlab/gitlab-ce Docker Hub hub.docker.com GitLab 서버 설치 gitlab 서버 설치에 사용한 이미..
Docker에서 작동하는 웹 애플리케이션을 제품 환경에서 운용할 때는 애플리케이션이 사양대로 올바르게 작동할 뿐만 아니라 서비스 이용자가 항상 이용할 수 있도록 운용 관리를 해야 한다. 이러한 컨테이너 기반은 보통 멀티호스트 환경으로 구축한다. 멀티호스트 환경에서 컨테이너 관리의 개요 웹 시스템의 실행 환경은 웹 서버, 프록시 서버, 데이터 스토어 등 역할이 다른 여러 개의 서버 기능이 연계되어 작동한다. 제품 환경에서 이용자에게 서비스를 제공할 때는 여러 개의 물리 서버나 여러 개의 가상 머신(VM)으로 구성된 멀티호스트 환경으로 서비스를 제공하는 것이 일반적이다. 멀티호스트 환경과 클러스터링 하나의 호스트 머신에서 Docker를 설치하고 그 위에서 몇 개의 컨테이너를 가동시켜 서버를 작동시켰다고 가정..
Docker Compose의 버전 확인 Docker Compose는 Docker for Mac 또는 Docker for Windows에 미리 설치되어 있다. Linux는 아래의 링크를 통해 설치할 수 있다. docs.docker.com/compose/install/ Install Docker Compose docs.docker.com // Docker Compose 버전 확인 $ docker-compose --version compose 정의 파일의 지정 현재 디렉토리 안에 docker-compose.yml 파일이 없는 상태에서 docker-compose up 명령을 실행하면 다음과 같은 에러를 확인할 수 있다. $ docker-compose up ERROR: Can't find a suitable co..
여러 컨테이너를 실행시킬 때 컨테이너마다 구성이나 시작/정지를 관리하자면 운용이 번잡해진다. 여러 컨테이너를 일괄적으로 관리할 수 있는 'Docker Compose' 의 구성 관리 파일인 'docker-compose.yml' 을 작성하는 방법에 대해 알아보자. docker-compose.yml 파일의 개요 docker-compose는 'docker-compose.yml' 이라는 Compose 정의 파일에 시스템 안에서 가동하는 여러 서버들의 구성을 모아서 정의한다. 이 정의 파일은 YAML 형식으로 기술한다. YAML YAML은 구조화된 데이터를 표현하기 위한 데이터 포맷이다. YAML은 Python과 같이 들여쓰기로 데이터의 계층 구조를 나타낸다. 들여쓰기는 탭이 아닌 스페이스를 사용한다. 누가 써도 ..
Docker에서 움직이는 웹 애플리케이션을 제품 환경에서 운용할 때는 애플리케이션 서버, 로그 서버, 프록시 서버 등과 같이 여러 개의 컨테이너들을 연계하여 작동시킨다. 여러 컨테이너 관리 웹 시스템의 실행 환경은 웹 서버, 프록시 서버 등과 같이 역할이 다른 여러 개의 서버를 연계하여 작동시키는 것이 일반적이다. 그래서 Docker에서 여러 개의 컨테이너를 연계시켜 운용 관리할 때 알아두어야 할 기초 지식에 대해 설명한다. 웹 3계층 시스템 아키텍처 애플리케이션을 가동시키려면 여러 개의 서버에 기능과 역할을 분할하여 인프라의 전체 구성을 정한다. 이것을 인프라 아키텍처라고 한다. 아키텍처는 우리말로 '설계 사상' 이라는 뜻이다. 대규모 웹 시스템의 경우 몇 개의 서브 시스템/기능으로 나누어 시스템을 개..
Docker 이미지는 인프라 구성 요소에서 래플리케이션의 개발 환경 및 실행 모듈도 포함하기 때문에 용량이 큰 것도 있다. 이런 이미지를 모두 개발용 클라이언트 PC나 온프레미스 환경에서 관리하려면 비용과 시간이 많이 든다. 퍼블릭 클라우드에는 Docker 이미지를 프라이빗으로 관리할 수 있는 매니지드 서비스가 제공되므로 이것을 이용하는 것이 좋다. Google Cloud Platform (GCP) 은 Docker 이미지를 프라이빗으로 관리할 수 있는 'Google Container Registry' 를 제공하고 있다. 이 서비스는 GCP의 오브젝트 스토리지 서비스인 'Google Cloud Storage' 를 데이터 저장 장소로 사용하고 있다. Google Container Registry 를 사용하여..
Docker 이미지에는 인터넷상에 공개하고 싶지 않은 정보가 포함되는 경우도 있다. 이럴 때 하나의 방법으로 Docker 이미지 관리를 위한 저장소를 로컬 환경에 구축할 수 있다. Docker 데이터 저장 경로 변경 (선택 사항) docker 로컬 저장소 주의할 점 private 도커 저장소에서는 Docker 이미지를 영구 데이터로 관리할 필요가 있다는 점이다. Docker에서는 호스트 머신에 볼륨을 공유함으로써 영구 데이터를 일원 관리할 수 있다. 하지만 이 데이터를 관리하려면 신뢰성이 높고 용량이 충분한 스토리지를 마련해야 한다. 또한 만일의 장애에 대비해 다중화 구성을 검토할 필요가 있으며, 정기적으로 데이터 백업이나 서버 감시 등과 같은 운용도 필요하다. 로컬 환경에 Docker 저장소를 구축하기..
Docker에서 빌드를 하면 빌드를 실행한 디렉토리 아래에 있는 모든 파일이 Docker 데몬으로 전송된다. 그렇기 때문에 빌드에서 제외하고 싶은 파일이 있는경우는 '.dockerignore' 라는 이름의 파일 안에 해당 파일명을 기술해야 한다. 여러개의 파일을 지정할 때는 줄 바꿈을 하여 파일명을 나열한다. 예를 들어 다음과 같이 빌드 컨텍스트상에 Dockerfile과 Dummyfile을 저장하고, '.dockerignore' 안에 Dummyfile을 지정해보자. $ ls -al -rw-rw-r-- 1 scii scii 9 12월 2 00:56 .dockerignore -rw-rw-r-- 1 scii scii 79 12월 2 00:30 Dockerfile -rw-rw-r-- 1 scii scii 0 1..
컨테이너를 종료할 때에 송신하는 시그널을 설정하려면 STOPSIGNAL 명령을 사용한다. STOPSIGNAL [시그널] STOPSIGNAL 명령에는 시그널 번호 또는 시그널명을 지정할 수 있다. 컨테이너의 헬스 체크 명령 (HEALTHCHECK 명령) 컨테이너 안의 프로세스가 정상적으로 작동하고 있는지를 체크하고 싶을 때는 HEALTHCHECK 명령을 사용한다. HEALTHCHECK [옵션] CMD 실행할 명령 지정할 수 있는 옵션 옵션 설명 기본값 --interval=n 헬스 체크 간격 30s --timeout=n 헬스 체크 타임아웃 30s --retries=N 타임아웃 횟수 3 HEALTHCHECK 명령에서는 Docker에 대해 컨테이너의 상태를 어떻게 확인할지를 설정한다. 예를 들어 5분마다 가동 ..
Docker 이미지를 만들려면 필요한 미들웨어를 설치하고 사용자 계정이나 디렉토리를 작성하는 등의 명령을 실행할 필요가 있다. 또한 이미지로부터 컨테이너를 생성했을 때, 서버 프로세스 등을 데몬으로서 작동시킬 필요도 있다. 명령 실행 (RUN 명령) 컨테이너에는 FROM 명령에서 지정한 베이스 이미지에 대해 '애플리케이션/미들웨어를 설치 및 설정한다' 라는 의미를 갖는다. '환경 구축을 위한 명령을 실행한다' 등과 같은 명령을 실행할 때는 RUN 명령을 사용한다. Dockerfile을 작성할 때는 이 RUN 명령을 가장 많이 사용한다. RUN 명령으로 지정한 명령은 Docker 이미지를 생성할 때 실행된다. RUN [실행하고 싶은 명령] RUN 명령에는 다음 두 가지 기술 방법이 있다. 1. Shell ..
Docker에서는 인프라 구성을 기술한 파일을 'Dockerfile' 이라고 한다. Dockerfile 이란? 베이스가 될 Docker 이미지 Docker 컨테이너 안에서 수행한 명령 환경변수 등의 설정 Docker 컨테이너 안에서 작동시켜둘 데몬 실행 Dockerfile은 이와 같이 Docker 상에서 작동시킬 컨테이너의 구성 정보를 기술하기 위한 파일이다. docker build 명령은 Dockerfile에 기술된 구성 정보를 바탕으로 Docker 이미지를 작성한다. Dockerfile의 기본 구문 Dockerfile은 텍스트 형식의 파일로, 에디터 등을 사용하여 작성한다. 확장자는 필요 없으며, 'Dockerfile' 이라는 이름의 파일에 인프라의 구성 정보를 기술한다. 또한 Dockerfile 이..
Docker가 제품 환경에서 실제 가동되는 시스템의 대부분은 글로벌하게 전개하는 대규모 웹 시스템으로, 컨테이너 오케스트레이션 툴인 Kubernetes를 사용하여 운용되는 경우가 많다. 하지만 Docker가 갖고 있는 높은 이식성을 살려 기계학습 등에서도 자주 이용되고 있다. 특히 딥러닝(심층학습)에서는 프레임워크나 다양한 라이브러리를 이용하여 개발이 이루어지는 경우가 일반적인데, Docker를 사용하면 그러한 버전의 차이나 환경을 의식하지 않고 개발할 수 있다는 장점이 있다. 예를 들어 기계학습에서 널리 이용되는 개발 툴인 Jupyter Notebook이나 딥러닝이 특기인 프레임워크 TensorFlow는 Docker Hub에서 공식 Docker 이미지를 제공하고 있다. 게다가 Kubernetes에서 T..