반응형
반응형

설치 / 초기화 / flannel 까지 세팅을 했는데, kubectl get nodes에서 계속해서 NotReady라고 나온다.

$ kubectl get nodes
NAME     STATUS     ROLES    AGE   VERSION
u16-01   NotReady   master   62m   v1.13.3


시간이 지났는데도 Ready로 바뀌지 않는 경우, 뭐 때문에 NotReady라고 나오는 지 알고 싶다면, 아래와 같은 키워드를 이용하여, Condition 부분을 살펴보면 됨.

$ kubectl describe node 노드이름


(예시)

...
Conditions:
  Type             Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----             ------  -----------------                 ------------------                ------                       -------
  MemoryPressure   False   Wed, 20 Feb 2019 07:50:16 +0000   Wed, 20 Feb 2019 06:47:37 +0000   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure     False   Wed, 20 Feb 2019 07:50:16 +0000   Wed, 20 Feb 2019 06:47:37 +0000   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure      False   Wed, 20 Feb 2019 07:50:16 +0000   Wed, 20 Feb 2019 06:47:37 +0000   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready            False   Wed, 20 Feb 2019 07:50:16 +0000   Wed, 20 Feb 2019 06:47:37 +0000   KubeletNotReady              runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
...


network plugin이 없다는 에러인데, 이런 경우 /etc/cni/net.d/10-flannel.conflist 파일을 찾아서, 복사 후 /etc/cni/net.d/10-flannel.conf로 만들어주면, 재시작 등 별도의 작업 없이 바로 해결 가능.



반응형
,
반응형

docker-compose.yml 파일을 구성할 때, 특별한 이유가 없는 한 도커 이미지 버전을 latest로 구성하게 된다.


latest로 해놨다고 지속적으로 업데이트 해주는게 아니라, 컨테이너를 구성할 당시의 지정된 image의 latest버전이기 때문에, 새롭게 latest버전이 release되면 수동으로 업데이트를 해주어야 하는데, 이 방법에 대해 알아보자.


1. 이미지 pull

$ docker-compose pull


2. 컨테이너 다시 만들기

$ docker-compose up --force-recreate --build -d


3. (선택) 기존 이미지 제거 (사용되지 않는 이미지를 한 번에 날리게 되니, 임시로 내려둔 컨테이너가 있다면 주의한다.)

$ docker image prune -f



반응형
,
반응형

Docker image나 pull을 private registry에서 이용하는 경우, private registry에서 https 프로토콜을 지원하지 않거나 사설인증서를 사용하는 경우 아래와 같은 에러가 발생할 수 있다.

root@u-01:~# docker pull abc.iptime.org:5000/helloWorld
Using default tag: latest
Error response from daemon: Get https://abc.iptime.org:5000/v1/_ping: http: server gave HTTP response to HTTPS client


기본적으로 registry와의 통신은 https 프로토콜을 이용하기 때문인데, 이를 무시하고 http프로토콜을 사용하게 하려면, /etc/default/docker 파일에서 DOCKER_OPTS 항목을 아래와 같이 수정하면 된다.

# /etc/default/docker
...
DOCKER_OPTS="--insecure-registry abc.iptime.org:5000"
...


수정 후 docker 서비스를 재시작해준다.

service docker restart


반응형
,
반응형

/etc/default/docker 파일을 열어서 아래와 같이 DOCKER_OPTS 항목을 추가해준다.

### /etc/default/docker
# Docker Upstart and SysVinit configuration file

#
# THIS FILE DOES NOT APPLY TO SYSTEMD
#
#   Please see the documentation for "systemd drop-ins":
#   https://docs.docker.com/engine/admin/systemd/
#

# Customize location of Docker binary (especially for development testing).
#DOCKERD="/usr/local/bin/dockerd"

# Use DOCKER_OPTS to modify the daemon startup options.
#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"

# If you need Docker to use an HTTP proxy, it can also be specified here.
#export http_proxy="http://127.0.0.1:3128/"

# This is also a handy place to tweak where Docker's temporary files go.
#export DOCKER_TMPDIR="/mnt/bigdrive/docker-tmp"
DOCKER_OPTS="-g /data/docker"

docker daemon을 재시작 하면 반영된다.

반응형
,
반응형

docker-compose를 사용했다는 가정하에, Version2의 compose파일을 이용하는 경우는 아래와 같이 확인 (브릿지어댑터를 이용해서 네트워크 할당을 한다고 한다.)

$ docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'  container_name


그외의 경우는 아래와 같이 확인

$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name


반응형
,
반응형

environment 속성에다가 TZ라는 환경변수만 추가해주면 된다.

abc:
  environment:
    TZ: "Asia/Seoul"


반응형
,
반응형

docker-compose 같은경우 기준이 되는 image를 선택할 때, image라는 속성을 사용할 수도 있지만,

build라는 속성을 이용하여, Dockerfile을 지정해줄 수가 있다.


예) docker-compose.yml (image)

db:
  image: mysql/mysql-server:latest         # dockerhub에 있는 image를 가져오는 경우


예) docker-compose.yml (Dockerfile이 abcd/Dockerfile 경로에 있는 경우)

db:
  build: ./abcd


docker-compose가 아직 Dockerfile이 가지고 있는 기능 전체를 지원하진 않기 때문에,

디테일한 기능들도 컨트롤 하기 위해서는, build 속성을 많이 사용하는 것 같다.


다만, 이 방식의 경우 volume을 컨트롤하는 데 문제가 하나 있다.


docker-compose의 volumes 속성을 이용해서, 폴더 단위로 link를 걸었을 때는 문제가 없지만,

docker-compose가 build 속성에 명시되어 있는 Dockerfile을 참조하는 과정에서 Dockerfile에 ADD나 COPY 구문이 들어있는 경우에 문제가 발생한다.


문제가 되는 케이스는 아래와 같다. (Nginx webroot에 파일을 추가하는 경우)


1. docker-compose를 이용하여, 최초에 image, container를 생성한다. (정상적으로 파일 ADD, COPY가 이루어짐)


2. 수정사항이 발생하여 파일을 수정 및 추가하여, docker-compose를 통해 container를 재배포한다. (반영되지 않음)


3. docker-compose를 통해 생긴 image, container를 삭제하고, 재생성 후 다시 배포한다. (정상적으로 반영)


아마 docker image를 docker-compose가 자체적으로 caching하고 있어서 발생하는 문제가 아닐까한다.


이런 경우 아래 예시 처럼 docker-compose에 volumes 속성을 사용하여, 폴더째로 link 시켜버리는 게 편한 것 같다.

예) docker-compose.yml (volumes)

db:
  build: ./abcd
  volumes: ./nginx_files:/var/www/html


이런식으로 링크를 걸어두면 host 머신에 있는 nginx_files 경로에 어떤 파일을 넣고, 빼면 container 안에 있는 /var/www/html 에도 즉시 반영이 되게 되어,

파일 배포 시에 docker-compose build라던지 할 필요가 없어지게 된다.


단, .dockerignore파일을 이용하여 메타정보 등의 파일을 빼고 배포시키는 등의 기능은 아직 docker-compose에서는 미지원하는 것 같다.

적절하게 잘 섞어서 쓰면 좋을듯..

반응형
,
반응형

upstart는 /etc/init 이하에 있는 설정 파일들을 자동으로 읽어들일 수 있게끔 구성이 되어 있기 때문에,

서비스로 구동 시킬 서비스의 configuration 파일을 /etc/init/{서비스명}.conf 형태로 작성을 하면 된다.


docker-compose를 이용해 구성한 컨테이너들도 서비스로 등록이 가능하다.


설정파일 예시 (ex: /etc/init/docker-registry.conf)

description "Docker Registry"  

# 아래 start, stop의 runlevel은 왠만해선 바꿀일이 없기 때문에, 그냥 사용하면 된다.
start on runlevel [2345]  
stop on runlevel [016]

# 자동 재시작을 설정한다. (아래에 있는 limit 설정만 있으면 기능 동작이 안됨)
respawn   

# 자동 재시작 (뒤에 두개의 argument는 COUNT, INTERVAL이다. 제한을 없애려면 unlimited만 적어준다.)
# 즉, 5초동안 10번 재시작해도 재시작에 실패하면 그냥 재시작하지 않겠다는 의미
respawn limit 10 5 

# 디렉토리 변경
chdir /root/docker-registry

# 명령어 실행 (가급적이면 절대경로)
exec /usr/local/bin/docker-compose up


upstart로 띄운 서비스의 로그 확인은 /var/log/upstart/{서비스명}.log 에서 확인이 가능함.

반응형
,
반응형

모든 설치방법은 Docker 공식홈 (https://docs.docker.com/installation/centos/) 을 참고했음.


CentOS 6.5는 일반적으로 Epel Repo를 포함하지 않기 때문에,

CentOS 7버전대와는 다르게 yum install docker-io 명령어를 쳐도 찾을 수 없다고 나온다.


해결방법은 Epel Repo를 Yum repository에 추가해주면 된다.


먼저 Epel Repo가 OS에 설치되어 있는지 확인한다.

$ rpm -qa | grep epel-release


아무것도 나오지 않으면, Epel Repo가 없는 것이고, 뭔가 나오면 추가로 설치할 필요가 없다.


CentOS 6.x 버전에서 지원하는 최신버전의  Epel Repo를 설치해준다.

$ sudo rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm


아래 명령어를 입력하여 yum repo에 포함이 되었는지도 확인 후,

$ yum repolist


Docker-io를 설치해준다.

$ yum install docker-io


Docker service를 올려준다

$ sudo service docker start


이제 CentOS 6.5버전에서 Docker를 사용할 수 있게 되었다!

참고로 Docker를 사용할 때 모든 명령어는 sudo 권한을 필요로 하는 것 같다.

반응형
,
반응형