Redis를 Docker Compose 로 띄우기

01. docker image 다운로드

>> docker pull redis:alpine

위와 같이 pull 커맨드를 이용해서 redis:alpine 이미지를 다운로드 받습니다.

alpine 은 태그를 의미하며 redis의 버전 등의 값을 줄수 있습니다. (생략하면 latest 를 받음)

alpine 태그의 특징은 이미지를 경량화 시켜서 용량이 적습니다.

이미지 용량 차이를 확인해보니 아래와 같네요.

>> docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
redis        alpine    c678242f9116   5 weeks ago    31.6MB
redis        6.0.6     1319b1eaa0b7   5 months ago   104MB

 

 

 

02. docker로 실행

>> docker run --name redis_boot -d -p 6379:6379 reids:alpine

위와 같이 run 커맨드를 통해 docker container를 띄우면 됩니다.

  • name : container명을 지정합니다.
  • d, —detach : 백그라운드로 실행합니다.
  • p : host의 port와 container port 설정합니다.

그리고 마지막에 이미지명:태그명 해주면 됩니다.

 

근데 매번 저 명령어를 쳐주기 귀찮을겁니다.

docker-compose 를 사용하면 yml 파일로 컨테이너를 띄울 수 있습니다.

 

 

03. yml 파일 작성

# redis-server.yml
version: '3.7'
services:
    redis:
      image: redis:alpine
      command: redis-server --port 6379
      container_name: redis_boot
      hostname: redis_boot
      labels:
        - "name=redis"
        - "mode=standalone"
      ports:
        - 6379:6379

위와 같이 작성해줍니다.

yml 파일 작성할 때는 띄어쓰기 잘하셔야됩니다.

key: value 이런식으로…

 

 

04. docker-compose up (시작)

>> docker-compose -f ./redis_server.yml up -d

위와 같이 up 커맨드를 이용해서 띄울수 있습니다.

  • -d  옵션을 줘서 백그라운드 실행했구요.
  • -f 는 yml 파일 경로를 지정하여 해당 yml파일을 실행하도록 합니다.(default는 docker-compose.yml 이고, 이 경우 따로 지정할 필요가 없습니다.
>> docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                    NAMES
1b7d82a59165   redis:alpine   "docker-entrypoint.s…"   3 seconds ago   Up 2 seconds   0.0.0.0:6379->6379/tcp   redis_boot

잘 뜨네요.

 

 

05. redis-cli 사용

컨테이너에 접속하여

redis 커맨드 라인 명령어 도구인 redis-cli 를 이용해 봅시다.

>> docker exec -it redis_boot redis-cli
127.0.0.1:6379> PING
PONG
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> SET abc 123
OK
127.0.0.1:6379> GET abc
"123"
127.0.0.1:6379> 

exec 커맨드를 사용해 docker container 내부에 명령어를 실행 해볼수 있습니다.

  • 현재 터미널에서 상호작용하기 위해 -i, -t 옵션을 줬습니다.
  • 컨테이너명인 redis_boot 인자로 주고.
  • 마지막으로 redis-cli 커맨드를 줍니다.
  • redis 명령어 테스트 해보니 잘되네요.

 

 

06. docker-compose down (종료)

>> docker-compose -f ./redis_server.yml down 
Stopping redis_boot ... done
Removing redis_boot ... done
Removing network redis_server_default

종료는 down 커맨드를 사용하면 됩니다.

Docker build 로 Elasticsearch docker image 만들기

특정 이미지를 기반으로 하여 새로운 이미지를 만들 수 있는 Docker build에 대해 공부와 함께 이전에 ubuntu 14.04 위에 서비스로 elasticsearch 를 설치했던 내용들을 정리하기 위해 Dockerfile을 만듬.

해당 elasticsearch는 x-pack을 사용하여, 인증받지 않은 임의의 유저는 특정 클러스터에 read 만 할 수 있도록 함.

아래 Dockerfileelasticsearch.ymlroles.yml를 한 폴더에 놓은 뒤, $ docker build 실행.

FROM mcpayment/ubuntu1404-java8
MAINTAINER mail@jungbin.kim
# repository index 업데이트
RUN apt-get -y -qq update
RUN wget -qO – https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add –
# Installing from the APT repository
RUN apt-get -y -qq install apt-transport-https
RUN echo “deb https://artifacts.elastic.co/packages/5.x/apt stable main” | tee -a /etc/apt/sources.list.d/elastic-5.x.list
RUN apt-get -y -qq update && \
apt-get -y -qq install elasticsearch
# Install x-pack & Set super user(as admin)
WORKDIR /usr/share/elasticsearch
RUN bin/elasticsearch-plugin install x-pack –batch && \
bin/x-pack/users useradd admin_user -p testPassword -r superuser
# config 파일 소스
COPY elasticsearch.yml /etc/elasticsearch/
COPY roles.yml /etc/elasticsearch/x-pack/
# 나중에 내부 테스트를 위함
# curl 설치
RUN apt-get -y -qq install curl
# vi option 추가
RUN echo “set autoindent \nset number \nset bs=2 \nset nocp” >> ~/.exrc
# 도커 컨테이너가 실행되었을 때 요청을 기다리고 있는(Listen) 포트를 지정
EXPOSE 9200
# 도커 컨테이너가 실행되었을 때 실행되는 명령어를 정의
CMD service elasticsearch start && bash
view rawDockerfile hosted with ❤ by GitHub
# Set the bind address to a specific IP (IPv4 or IPv6):
# 192.168.1.10 과 같은 ip에 접근하기 위함
network.host: 0.0.0.0
# create an anoynomous user to allow interaction without auth
xpack.security.authc:
# 임의의 유저(유저 이름 anonymous)에 viewer라는 role을 줌.
# (x-pack/roles.yml에서 viewer는 read만 가능하게 설정)
# https://www.elastic.co/guide/en/elasticsearch/reference/5.6/security-settings.html#anonymous-access-settings
anonymous:
username: anonymous
roles: viewer
# Disable default user ‘elastic’
# https://www.elastic.co/guide/en/elasticsearch/reference/5.6/security-settings.html#password-security-settings
accept_default_password: false
view rawelasticsearch.yml hosted with ❤ by GitHub
# The default roles file is empty as the preferred method of defining roles is
# through the API/UI. File based roles are useful in error scenarios when the
# API based roles may not be available.
viewer:
run_as: [ ‘anonymous’ ] # 적용될 유저 이름 여기서는 인증 받지 않은 임의의 유저
cluster: [ “monitor” ] # 적용될 cluster들
indices:
names: [ ‘*’ ] # 허용 index를 패턴을 포함하여 정의 한다.
privileges: [ ‘read’ ] # 권한은 read만 부여한다.
query: {“match_all”: {}} # 권한으로 열어줄 문서 목록을 쿼리로 정의한다.
view rawroles.yml hosted with ❤ by GitHub

위와 같이 dockerfile을 별도로 만들지 않아도, Docker hub에 5.6 버전까지 docker 이미지가 있으며, 최신 버전(현재 6.3)의 elasticsearch docker image는 공식 제공 페이지에 존재.

사용한 docker file 명령어Permalink

  • RUN: 쉘 명령어를 수행
  • WORKDIR: 현재 가리키고 있는 폴더 위치 변경
  • COPY: 특정 파일이나 폴더 docker image에 복사
  • EXPOSE: docker container 내의 port
  • CMD: docker image를 container로 실행할 때 실행되는 명령어 지정

Error HandlingPermalink

apt-get install apt-transport-https 명령어를 실행할 때, Unable to locate package apt-transport-https 에러 발생Permalink

이 글을 참고하여, /etc/apt/sources.list.d/ 경로에 elastic 관련 .list 파일을 삭제하고, 다시 install 명령어 실행.

Increase virtual memory vm.max_map_count in boot2docker

I want to run Elasticsearch 5.0 with my Docker Toolbox. But it requires us to increase the vm.max_map_count to 262144 (https://www.elastic.co/guide/en/elasticsearch/reference/master/vm-max-map-count.html). I can do it by running these commands.

docker-machine ssh default
sysctl -w vm.max_map_count=262144
# Update the vm.max_map_count setting in /etc/sysctl.conf

setting check!.
cat /proc/sys/vm/max_map_count  

But they are reset after I re-boot my host. How to make boot2docker keeps these settings?

 

You can put it in vi /var/lib/boot2docker/bootlocal.sh

# Update the vm.max_map_count setting
sysctl -w vm.max_map_count=262144
chmod +x /var/lib/boot2docker/bootlocal.sh

Docker Toolbox 설치, 메모리 확장, 디스크 확장, timezone변경

Docker Toolbox 기본 설치 과정에서 Docker VM의

– 기본 설정 메모리 크기 확장

– 디스크 확장, 공유 폴더 추가 병행

– Timezone변경

정도로 진행한다.

 

** update :: 교차점 생성, MACHINE_STORAGE_PATH 설정은 

   Kitematic 사용하지 않을 경우에만 하자.

   docker vm ssh접속으로 동작에는 문제 없지만 (= vmware에 linux설치후 그 위에 동작하는 docker)

   host(windowns)에서 docker-machine 명령등에 직접 연결이 안된다.

   ex) 에러 메시지 종류

   Could not determine IP from docker-machine.

   command exit status 255
Error checking TLS connection: Host is not running

   등…

   windows의 OpenSSH와 docker-toolbox의 인증서 위치나 권한 뭐 그런 것들 때문같은데,

   괜히 시간 낭비하지 말자. 그냥 pc검증 환경일 뿐이니…

 

1. 설치 디렉토리 생성 & 링크 (optonal)

– D드라이브에 Docker 디렉토리 생성 (D:\Docker) <– 본인이 희망하는.

– 혹시 모를 일을 대비해서 /Users/MY_NAME/.docker를 D:\Docker로 교차점 생성

C:\Users\MY_NAME> mklink /J .docker "D:\Docker"
.docker <<===>> D:\Docker에 대한 교차점을 만들었습니다.

2. 환경변수 설정 (& 재시작) (optional)

  – Docker 저장소 위치 변경

 

3. Docker Toolbox 다운로드 & 설치

– 다운로드 : https://download.docker.com/win/stable/DockerToolbox.exe

– 설치 진행 : 진행 과정 중 기본 체크 박스 상태 그대로 진행, 설치 완료 후 재시작 불필요
https://docs.docker.com/toolbox/toolbox_install_windows/

 

– 3개의 바로가기 아이콘 생성됨

1) Oracle VM VirtualBox : “C:\Program Files\Oracle\VirtualBox\VirtualBox.exe” deafult VM이 생성되어 있는 상태

2) Kitematic (Alpha) : “C:\Program Files\Docker Toolbox\kitematic\Kitematic.exe”

3) Docker Quickstart Terminal : “C:\Program Files\Git\bin\bash.exe” –login -i “C:\Program Files\Docker Toolbox\start.sh”

 

4. Docker VM 실행 & 상태 확인

– Docker Quickstart Terminal 바로가기 실행

 

 

– IP 확인 (기본 설정대로 라면 NAT구성으로 192.168.99.100) : 위 그림 IP정보 참고

 

5. Oracle VM VirtualBox : Docker VM이미지 메모리 확장, 공유 폴더 추가

 5-0. VM중지 = ‘Docker Quickstart Terminal’에서 아래 명령 실행

$ docker-machine stop

 5-1. Oracle VM VirtualBox실행 & default 우측 클릭 > 닫기 전원 끄기

 5-2. default > 설정 : 기본메모리를 1024MB에서 4096MB로 변경 (컨테이너의 Out-Of-Memory를 덜 보려면…)

 

 

5-3. 공유폴더 추가

– D:\Docker\data 디렉토리 생성

– 이 폴더를 공유 폴더로 추가 & 자동마운트 설정

 

 

 5-4. 디스크 추가

– 저장소 > 새 디스크 만들기 > VMDK 선택 > 동적 할당 > data_disk이름 & 100GB 설정 > 만들기
(경로 : D:\Docker\machines\default\default\data_disk.vmdk)

 

 

– ‘Docker Quickstart Terminal’ 에서 docker-machine start

– Docker쉘 접속 후

1) fdisk /dev/sdb : 파티셔닝

2) mkfs.ext4 /dev/sdb1 : ext4 포맷

3) mount 해보기

docker@default:~$ sudo -i
root@default:~# fdisk -l <----------- 
  ....
  Disk /dev/sdb: 100 GiB, 107374182400 bytes, 209715200 sectors <-----------
  Units: sectors of 1 * 512 = 512 bytes
  Sector size (logical/physical): 512 bytes / 512 bytes
  I/O size (minimum/optimal): 512 bytes / 512 bytes


root@default:~# fdisk /dev/sdb <---------
  ...
  Command (m for help): m <--------
  Command (m for help): g <-------- Linux FileSystem
  Command (m for help): n <-------- 파티션 생성
  Partition type
     p   primary (0 primary, 0 extended, 4 free)
     e   extended (container for logical partitions)
  Select (default p): p <-----------
  Partition number (1-4, default 1): 
  First sector (2048-209715199, default 2048): 
  Last sector, +sectors or +size{K,M,G,T,P} (2048-209715199, default 209715199): 

  Created a new partition 1 of type 'Linux filesystem' and of size 100 GiB.

  Command (m for help): p
  Disk /dev/sdb: 100 GiB, 107374182400 bytes, 209715200 sectors
  Units: sectors of 1 * 512 = 512 bytes
  Sector size (logical/physical): 512 bytes / 512 bytes
  I/O size (minimum/optimal): 512 bytes / 512 bytes
  Disklabel type: gpt
  Disk identifier: 54EDF7CB-5770-47D4-9DF6-0F4CE1F48054

  Device     Start       End   Sectors  Size Type
  /dev/sdb1   2048 209715166 209713119  100G Linux filesystem

  Command (m for help): w <--------------
  The partition table has been altered.
  Calling ioctl() to re-read partition table.
  Syncing disks.

root@default:~# fdisk -l <--------------
  ...
  Device     Start       End   Sectors  Size Type
  /dev/sdb1   2048 209715166 209713119  100G Linux filesystem  <--------------

root@default:~# mkfs.ext4 /dev/sdb1 <--------------
  ...
  Writing superblocks and filesystem accounting information: done   

root@default:~# mkdir -p /mnt/sdb1
root@default:~# mount /dev/sdb1 /mnt/sdb1 <----------- 
root@default:~# df -h
  Filesystem                Size      Used Available Use% Mounted on
  tmpfs                     3.5G    229.6M      3.2G   6% /
  tmpfs                     1.9G         0      1.9G   0% /dev/shm
  /dev/sda1                17.8G     46.5M     16.9G   0% /mnt/sda1
  cgroup                    1.9G         0      1.9G   0% /sys/fs/cgroup
  /c/Users                476.2G    189.5G    286.7G  40% /c/Users
  /data                     3.6T      1.4T      2.2T  39% /data
  /dev/sda1                17.8G     46.5M     16.9G   0% /mnt/sda1/var/lib/docker
  /dev/sdb1                97.9G     59.6M     92.9G   0% /mnt/sdb1 <----------

 

– 자동 마운트 설정 : 아래 경로에 bootlocal.sh 파일 생성(실행 권한부여) 후 mount명령 추가

(이 방법외에 다른 방법 찾기 귀찮아서, 혹시 아는 분은 댓글로…)

root@default:~# cd /var/lib/boot2docker
root@default:/var/lib/boot2docker# vi bootlocal.sh 
  #!/bin/sh
  mount /dev/sdb1 /mnt/sdb1
  :wq (저장)
root@default:/var/lib/boot2docker# chmod u+x bootlocal.sh

– ‘Docker Quickstart Terminal’ 에서 docker-machine restart

– docker vm에 쉘 접속 후 확인 : 메모리 크기 등

 

 

6. Timezone변경

– 현재 시간 확인 : PC의 현재 시간과 동일하면 끝, 아래와 같이 아니라면

docker@default:~$ date
Mon Jun 17 21:50:01 UTC 2019  <— 엉뚱한 시간이 나온다. (9시간 전?)

– 다음과 같이 진행 후 docker-machine restart

docker@default:~$ sudo -i
root@default:~# cd /var/lib/boot2docker

root@default:/var/lib/boot2docker# tce-fetch.sh tzdata.tcz
root@default:/var/lib/boot2docker# mkdir ext
root@default:/var/lib/boot2docker# mount tzdata.tcz ext -t squashfs -o loop,ro,bs=4096
root@default:/var/lib/boot2docker# cp ext/usr/local/share/zoneinfo/Asia/Seoul ./Asia-Seoul.tz

root@default:/var/lib/boot2docker# umount ext
root@default:/var/lib/boot2docker# rm -rf ext tzdata.tcz

root@default:/var/lib/boot2docker# vi bootlocal.sh
    #!/bin/sh
    mount /dev/sdb1 /mnt/sdb1
    cp /var/lib/boot2docker/Asia-Seoul.tz /etc/localtime
    :wq (저장)
root@default:/var/lib/boot2docker# chmod u+x bootlocal.sh

((((( 재시작 후 접속 )))))

docker@default:~$ date
Tue Jun 18 07:04:21 KST 2019 <-- PC시간과 동일

(참고 : https://github.com/boot2docker/boot2docker/issues/476)

 

 

[기타]

– container 이미지 저장 위치 :

$ docker info
  Containers: 3
  ...
  Docker Root Dir: /mnt/sda1/var/lib/docker <------------
  ...
  Product License: Community Engine

$ sudo i
# cd /mnt/sda1/var/lib/docker
# find . -name mysql | cut -f 1,2,3 -d "/" | uniq | xargs du -h -d 0
  40.0K   ./overlay2/331e15e384ea042923fbc7d933359fa89718cc38215d0056ab47bfbba2e445f2
  431.8M  ./overlay2/b7f24200745390db507cca92e2d6b32778d77a71f58d8d776dd04be46912b405
  313.6M  ./overlay2/00a4a9d710111c024838b47c3d1a1ce1457f2cd345e33748e21bac3c92364792

대충 /mnt/sd1/var/lib/docker/overlay쯤인가보네

참고 : https://stackoverflow.com/questions/19234831/where-are-docker-images-stored-on-the-host-machine

Pydio 2G초과하는 대용량 업로드 설정방법

Pydio(구 AjaXplorer) 2G초과하는 대용량 업로드 설정에 있어 해야할 방법을 적으려고한다.
1. PHP 설정

php.ini 파일에서 수정할 것들

 

max_execution_time =120

max_input_time = 60

memory_limit =256M

post_max_size =2G

upload_max_filesize =2G

default_socket_timeout = 60

필자는 최대 6GB 까지 업로드 하려고 하기 때문에 다음과 같이 수정하고 아파치를 재시작하였다.

(각 설정별의 내용을 이해하고 있다면 다르게 해도 괜찮다. 이건 필자의 개인설정이다.)

max_execution_time = 0

max_input_time = -1 

memory_limit =512M

post_max_size =5G

upload_max_filesize =5G

default_socket_timeout = 1800

max_execution_time (무제한 : 0) 

– 최대 실행시간

파일용량이 커지면 그만큼 시간이 길어져야 하지만 적절한 시간을 모르므로 제한을 해제했다.

max_input_time (무제한 : -1)

– php 엔진이 데이터를 업로드 받는 시간

파일용량이 커지면 그만큼 시간이 길어져야 하지만 적절한 시간을 모르므로 제한을 해제했다.

memory_limit

– 파일 용량이 커지면 그만큼 메모리의 용량도 늘어야 한다고 한다.

post_max_size

– Post 방식으로 전송될 최대 데이터 크기

upload_max_filesize

– 업로드할 파일 최대크기 (필자의 서버는 5G가 한계)

default_socket_timeout

 

– 연결시간 유지 (초단위이고 적당히 30분 잡아주었다.)

2. Pydio 설정

여기까지  php.ini 만 수정하면 문제없이 될 것같지만 사실 Pydio 내부에서도 수정이 필요하다.

안그러면 파일업로드 제한에 걸리거나 목록에서 업로드한 파일의 용량이 제대로 표시되지 않거나 v파일이 불완전하게 업로드되는 현상이 발생한다.

 

2.1. 목록에서 파일용량 제대로 표시하기

관리자 아이디로 pydio에 로그인 한 후

“설정 – Application Parameters – Feature plugins – Workspaces Drivers – File System(Stendard) ” 에서

REAL SIZE PROBING 의 설정을 Yes로 바꾸어준후 오른족 상단에 저장버튼클릭

 

2.2 Jumploader 설치 및 활성화

Jumploader를 공식 사이트에 가서 최신버전을 받는다. 필자는 2.27.0 버전을 사용했다.

Jumploader – http://jumploader.com/download.html

다운받은 “jumploader_z.jar” 를 “public_html\plugins\uploader.jumploader” 안에 압축 풀지않고 그대로 넣어둔다.

“설정 – Application Parameters – Feature plugins – Uploaders -java(Big Files)”에서

Install Applet 버튼을 눌러서 설치, 그담에 ENABLED을 Yes로 바꾼 다음 오른족 상단에 저장버튼클릭

그리고 Standard / Remote Server / PLUploader 는 꺼주면 끝.

설치가 다 올바르게되면 업로드 버튼 누를 시에 아래와 같은 창으로 바뀐다.

[참고] 만약 Uploder에서 아무런 리스트가 나타나지 않는다면?

필자에게 발생한 것이고 임시방편으로 찾은 방법을 적어둔다.

서버에서 “public_html\plugins” 에 접근하여 “uploader.flex”의 폴더명을 바꾼다.

uploader.flex → _uploader.flex

“설정 – Application Parameters – Feature plugins” 에서 Refresh plugins cache 를 클릭

“설정 – Application Parameters – Feature plugins – Uploaders” 에 옆에 있는 새로고침 버튼 클릭하면 나온다.

필요한 설정을 다 하고 나면 “_uploader.flex”의 폴더명을 원래대로 바꾸고

_uploader.flex → uploader.flex

“설정 – Application Parameters – Feature plugins” 에서 Refresh plugins cache 를 클릭하면 끝.

flex플러그인이 없으면 업로드를 했는데 업로드가 안되는 현상이 발생하므로 한번 용량작은 파일로 테스트 해봐야한다.

* 포럼을 뒤지고 구글링을 해도 무슨 이유인지는 밝히지를 못했다. 아는이 있으면 덧글로 좀 알려줘요.

[참고] 끝마치기 전에 개인적인 생각

보통 대용량파일은

목록에서 제대로 용량이 표시가 안되고 다운로드가 안되는게 문제지 업로드가 문제인건 아니므로

그냥 “2.1 목록에서 파일용량 제대로표시하기” 까지만 진행한 다음에 업로드는 FTP로 해서 따로 올리는 것이 낫다고 생각한다. 파일을 업로드할 경로는 다음과 같다.

Default Files – “public_html\data\files”

My Files – “public_html\data\personal”

Windows WIFI-AP 목록과 KEY 추출

## backup profile
netsh wlan export profile key=clear folder=C:\wifi_profiles (폴더 없으면 C:\ 에다가)

## restore profile
netsh wlan add profile filename=”c:\wifi_profiles\totoli_AP.xml” user=all (백업된 프로파일 하나씩 복원)

[Docker] docker-compose 를 이용해 ELK 구축하기 ( + mySql, Nori)

1. ELK ?

Elasticsearch, Logstash, Kibana 오픈 소스 프로젝트 3개를 합쳐서 ELK 라고 한다. Elasticsearch 는 검색 및 분석 엔진으로 무료버전으로도 기본적인 기능은 충분히 사용가능하다. Logstash는 여러 소스에서 동시에 데이터를 수집하여 변환한 후 Elasticsearch 와 같은 곳에 ‘stash’로 전송하는 서버 사이드 데이터 처리 파이프라인을 말한다. Kibana 는 사용자가 Elasticsearch 를 시각화하여 사용할수 있는 툴이다.

여기서는 이미 사용하고 있는 docker 기반 mySql 을 Elasticsearch 에 logstash 를 이용해 동기화 하고, 검색하는 부분만 포스팅할 예정이다.

 

2. Nori ?

한글 검색을 올바르게 수행하기 위해서는 형태소 분석기 plug-in 을 Elasticsearch 에 따로 설치해주어야 하는데, 다른 다양한 형태소 분석기들도 많지만 필자는 Elasticsearch 공식문서를 보면서 작업하기 수월하기 위해 Nori 형태소 분석기를 사용하기로 하였다. nori는 elasticsearch 가 실행된 상태에서 해당 bash 에 접속해 설치하면 된다.

$ docker exec -it elasticsearch /bin/bash 
$ bin/elasticsearch-plugin install analysis-nori #elasticsearch container 에서 명령

nori를 이용한 검색을 해야하는 데이터 컬럼에 대해서는 반드시 mapping analyzer 셋팅을 해주어야 한다. 예를들어 ‘name’이라는 column 에 형태소 분석을 이용한 한글검색이 가능하게 하고자 한다면 mapping 은 다음과 같은 형태일 수 있다.

 "name": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          },
          "analyzer":"nori_analyzer"
        }

 

3. docker-compose

version: '3.2'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1 #기본 이미지 사용
    container_name: elasticsearch
    environment:
      ES_JAVA_OPTS: "-Xmx256m -Xms256m"
      discovery.type: single-node #간단한 local 테스트를 위해 single-node로 구성
    volumes:
      - /usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elk
  logstash:
    container_name: logstash
    image: docker.elastic.co/logstash/logstash:7.6.1
    environment:
      LS_JAVA_OPTS: "-Xmx256m -Xms256m"
    volumes:
      - type: bind
        source: ./config/logstash/config/logstash.yml
        target: /usr/share/logstash/config/logstash.yml
        read_only: true
      - type: bind
        source: ./config/logstash/pipeline
        target: /usr/share/logstash/pipeline
        read_only: true
      - ./jar/mysql-connector-java-8.0.18.jar:/usr/share/logstash/logstash-core/lib/jars/mysql-connector-java-8.0.18.jar #mysql 사용을 위한 jdbc-connector 다운
    networks:
      - elk
    depends_on:
      - elasticsearch #elasticsearch 가 실행된 이후 logstash 실행되도록 depends_on 설정
  kibana:
    container_name: kibana
    image: docker.elastic.co/kibana/kibana:7.6.1
    ports:
      - 5601:5601
    networks:
      - elk
    depends_on:
      - elasticsearch #elasticsearch 가 실행된 이후 kibana 실행되도록 depends_on 설정
    
networks:
 elk:
  external:
    name: mysql-network #이미 사용하고 있는 db와 연결을 위해 mysql-docker network 와 연결이 되도록 external 설정을 따로 해주었다. 

volumes:
 elasticsearch: #volume container 사용
    

 

이미 떠있는 mysql container 와의 연결을 위해 external network 설정을 따로 해주었으나, 만약 elk 구축과 함께 database 를 실행한다면 external 연결은 해줄필요가 없다. 기본적인 ELK 설정을 거이 따르고 있으며 여기서는 mysql 연결을 위한 부분과 single-node 사용하는 부분만 수정하였다.

4. mysql 과 동기화 작업 설정

동기화 하고 싶은 데이터가 있다면 logstash.conf 파일에서 설정해주면 된다. 여기서는 crontab 과 수정일을 이용하여 마지막 데이터를 동기화해 가지고 오도록 작업하였다.

input {
  jdbc {
    jdbc_driver_library => "/usr/share/logstash/logstash-core/lib/jars/mysql-connector-java-8.0.18.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://[mysql-container-name]:[mysql-container-host]/allpal?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Seoul&autoReconnect=true"
    jdbc_user => "[mysql-id]"
    jdbc_password => "[mysql-password]"

    columns_charset => {
      "[한글데이터를 가지고 있는 column 명]" => "UTF-8"
    }

    statement => "SELECT *, UNIX_TIMESTAMP(modification_time) as unix_ts_in_secs FROM [table name] WHERE 
    (UNIX_TIMESTAMP(modification_time) > :sql_last_value AND modification_time < NOW())"

    jdbc_paging_enabled => true
    use_column_value => true
    tracking_column => "unix_ts_in_secs"
    tracking_column_type => "numeric"
    clean_run => true
    schedule => "*/5 * * * * *"  # crontab 표기법의 스케쥴 설정
  }
}

output {
  elasticsearch {
    hosts => "elasticsearch:9200"
    index => "[index명]"
    document_id => "%{_id}"
  }
  stdout {
    codec => rubydebug
  }
}

[대괄호]안에 있는 부분들은 해당 상황에 맞게 입력하면 되는 값이며, 여기서는 위에서 언급한것처럼 modification_time 이라는 수정일 컬럼을 이용하여 동기화하였다. 새로 추가되거나, 수정/삭제 된 경우에도 데이터가 자동으로 동기화 되기 위해서 다음과 같이 작업을 진행하였다.

 

각 환경에 맞게 수정한 docker-compose.yml 파일과 logstash.conf 등 설정파일들 준비가 완료되었다면 docker-compose.yml 파일이 있는 디렉토리에서 docker-compose up 을 통해 해당 파일이 실행되는것을 확인할 수 있으며, localhost:5601 에 접속하여 kibana 에서 편하게 실제 index가 들어간 모습과, mapping 등을 확인할 수 있다.

To hide removable drives from file explorer in left tree view

To hide removable drives from the Navigation Pane in Windows 10, follow the instructions below.

  1. Open Registry Editor.
  2. Go to the following Registry key:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\DelegateFolders\{F5FB2C77-0E2F-4A16-A381-3E560C68BC83}

    Tip: See How to jump to the desired Registry key with one click.

  3. Rename the subkey {F5FB2C77-0E2F-4A16-A381-3E560C68BC83} by adding a hyphen ‘-‘ before it so its new name is -{F5FB2C77-0E2F-4A16-A381-3E560C68BC83}. See the following screenshot:windows 10 hide remobable drives navigation pane
  4. If you are running 64-bit Windows 10, repeat the step above here:
    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\DelegateFolders
  5. Close all Explorer windows for the change to take effect.

That’s it.
Before:

before
After:

after
To restore removable drives in the navigation pane, rename the mentioned subkey from -{F5FB2C77-0E2F-4A16-A381-3E560C68BC83} back to {F5FB2C77-0E2F-4A16-A381-3E560C68BC83}.

You can save your time and use Winaero Tweaker to hide or show Removable Drives in the navigation pane.

Docker – Oracle 12c 설치

Oralce 12C를 설치할 디렉토리 생성 및 권한 변경

 mkdir vm_ora12c

chmod -R a+w vm_ora12c

Oracle 12c 이미지 조회

docker search oracle

[docker_test@blue ~]$ docker search oracle

INDEX       NAME                                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED

docker.io   docker.io/oraclelinux                         Official Docker builds of Oracle Linux.         515       [OK]

docker.io   docker.io/sath89/oracle-12c                   Oracle Standard Edition 12c Release 1 with…   409                  [OK]

docker.io   docker.io/frolvlad/alpine-oraclejdk8          The smallest Docker image with OracleJDK 8…   343                  [OK]

docker.io   docker.io/alexeiled/docker-oracle-xe-11g      This is a working (hopefully) Oracle XE 11…   273                  [OK]

docker.io   docker.io/sath89/oracle-xe-11g                Oracle xe 11g with database files mount su…   224                  [OK]

docker.io   docker.io/wnameless/oracle-xe-11g             Dockerfile of Oracle Database Express Edit…   115                  [OK]

docker.io   docker.io/jaspeen/oracle-11g                  Docker image for Oracle 11g database            77                   [OK]

docker.io   docker.io/isuper/java-oracle                  This repository contains all java releases…   55                   [OK]

docker.io   docker.io/oracle/openjdk                      Docker images containing OpenJDK Oracle Linux   49                   [OK]

docker.io   docker.io/airdock/oracle-jdk                  Docker Image for Oracle Java SDK (8 and 7)…   39                   [OK]

docker.io   docker.io/sath89/oracle-ee-11g                Dockerfile of Oracle Database Enterprise E…   34                   [OK]

docker.io   docker.io/cogniteev/oracle-java               Oracle JDK 6, 7, 8, and 9 based on Ubuntu …   24                   [OK]

docker.io   docker.io/ingensi/oracle-jdk                  Official Oracle JDK installed on centos.        21                   [OK]

docker.io   docker.io/oracle/nosql                        Oracle NoSQL on a Docker Image with Oracle…   17                   [OK]

docker.io   docker.io/n3ziniuka5/ubuntu-oracle-jdk        Ubuntu with Oracle JDK. Check tags for ver…   16                   [OK]

docker.io   docker.io/sgrio/java-oracle                   Docker images of Java 7/8/9/10 provided by…   16                   [OK]

docker.io   docker.io/andreptb/oracle-java                Debian Jessie based image with Oracle JDK …   7                    [OK]

docker.io   docker.io/flurdy/oracle-java7                 Base image containing Oracle’s Java 7 JDK       5                    [OK]

docker.io   docker.io/davidcaste/debian-oracle-java       Oracle Java 8 (and 7) over Debian Jessie        4                    [OK]

docker.io   docker.io/martinseeler/oracle-server-jre      Oracle’s Java 8 as 61 MB Docker container.      4                    [OK]

docker.io   docker.io/teradatalabs/centos6-java8-oracle   Docker image of CentOS 6 with Oracle JDK 8…   4

docker.io   docker.io/publicisworldwide/oracle-core       This is the core image based on Oracle Lin…   1                    [OK]

docker.io   docker.io/bitnami/oraclelinux-extras          Oracle Linux base images                        0                    [OK]

docker.io   docker.io/pivotaldata/oracle7-test            Oracle Enterprise Linux (OEL) image for GP…   0

docker.io   docker.io/softwareplant/oracle                oracle db                                       0                    [OK]

Oracle docker image download

docker pull sath89/oracle-12c

[docker_test@blue ~]$ docker pull sath89/oracle-12c

Using default tag: latest

Trying to pull repository docker.io/sath89/oracle-12c …

latest: Pulling from docker.io/sath89/oracle-12c

863735b9fd15: Pull complete

4fbaa2f403df: Pull complete

44be94a95984: Pull complete

a3ed95caeb02: Pull complete

b8bc6e8767ee: Pull complete

c918da326197: Pull complete

448e1619a038: Pull complete

faadd00cf98e: Downloading [====>                                              ] 266.9 MB/2.768 GB

fab7f453b7c6: Download complete

c98ac63d2108: Download complete

download 된 image 확인

[docker_test@blue ~]$ docker images

REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE

docker.io/sath89/oracle-12c   latest              ee3351d51185        2 months ago        5.7 GB

실행

docker run –name oracle12c -d -p (외부포트):8080 -p (외부포트):1521 -v (외부경로):/u01/app/oracle sath89/oracle-12c

[docker_test@blue ~]$ docker run –name oracle12c -d -p 28080:8080 -p 21521:1521 -v /home/docker_test/vm_ora12c:/u01/app/oracle sath89/oracle-12c

185cb33e3b92b6473c13f35e687b960d42da9e547ceb600e5a181d0ed7fca631

실행 로그 확인

 docker logs -f oracle12c

[docker_test@blue ~]$ docker logs -f oracle12c

Database not initialized. Initializing database.

Starting tnslsnr

Copying database files

1% complete

3% complete

11% complete

18% complete

26% complete

37% complete

Creating and starting Oracle instance

40% complete

45% complete

……

ls: cannot access /docker-entrypoint-initdb.d/*: No such file or directory

Import finished

Database ready to use. Enjoy! 😉

oracle 의 사용자 계정 생성

docker exec  -it oracle12c /bin/bash

su oracle

export PATH=$PATH:$ORACLE_HOME/bin

sqlplus /as sysdba

create user testuser identified by oracle;

grant dba to testuser;

exit (연속)

[docker_test@blue ~]$ docker exec -it oracle12c /bin/bash

root@185cb33e3b92:/# su oracle

oracle@185cb33e3b92:/$ export PATH=$PATH:$ORACLE_HOME/bin

oracle@185cb33e3b92:/$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Mon Oct 29 05:24:43 2018

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Connected to:

Oracle Database 12c Standard Edition Release 12.1.0.2.0 – 64bit Production

SQL> create user testuser identified by oracle

2  /

User created.

SQL> grant dba to testuser

2  /

Grant succeeded.

해당 유저로 접속 확인

 docker exec -it oracle12c sqlplus testuser/oracle

[docker_test@blue ~]$ docker exec -it oracle12c sqlplus testuser/oracle

SQL*Plus: Release 12.1.0.2.0 Production on Mon Oct 29 05:26:30 2018

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Connected to:

Oracle Database 12c Standard Edition Release 12.1.0.2.0 – 64bit Production

SQL>

 

헐리우드랙 익스프레스! 가벼운 무게에 무거운 성능!

차량은 SUV에 장착하였고 해당 헐리우드랙 익스프레스 모델은

승용차와 SUV에 상관없이 장착가능합니다.

장착전 차량 트렁크 부분의 홈부분을 확인해주시고

스포일러가 플라스틱을 제작되어있는 차량은 먼저 스포일러가 흔들리는지 케리어 선에 간섭을

주는지 확인하시는것을 추천드립니다.

케리어의 상단과 하단부분은 갈고리로 되어있으며 트렁크 상단과 하단에 체결됩니다.

하단부분의 경우 간혹 차량에 마무리상태에 따라 갈고리가 걸릴수 없는 구조로 되어있는 모델이 있으며

이때에는 차량에 철골부분이 장착될만한 곳이 있는 차량이 설치가능합니다.

차량에 접촉하는 부분은 두꺼운 스폰지 재질로 되어있어 차량 손상을 최소화 합니다.

사용중 스폰지재질이 손상되면 압박붕대나 부드러운 재질의 커버로 미연에 감아주시는것이 좋습니다.

SUV 차량에 장착한 모습입니다.

차량에 중심부쪽을 설치해주시면 됩니다.

차량에 닿는 부분은 두군데이며

SUV차량은 트렁크 하단 부분만 닿게되며 상단부분은 유리창에 장착하게됩니다.

상단에 장착된 모습과 기본적으로 자전거 거치부분은 약간 상향되게 장착하시는것이 좋습니다.

자전거 거치부분은 플라스틱으로 되어있어 상단부분은 강한 고무스트랩으로 되어있습니다.

거치대의 조절은 안쪽의 둥근 플라스틱을 돌려서 위치조정을 하게됩니다.

거치대의 끈조절부위는 철재로 되어있어 체결강도와 안전성은 걱정안하셔도 됩니다!!

고무스트랩은 충분한 강도를 가지고 있으며 길이조절이 가능하여 탑튜브 두께에 따라 조절하시면 됩니다

두대가 장착가능한 부분이며 자전거 거치하는 부분은 앞뒤로 위치 조절이 가능합니다.

거치부분의 여분의 끈이 정리되는 부분이 없는것이 아쉽지만 일반 고무줄로 간단하게 해결하실수있습니다.

고정되는 스트랩부분은 손으로 누르지않는 이상 절대 풀리지 않습니다.

한대장착된 모습입니다.

탑튜브 위에 고무스트랩으로 고정을 해주시고 뒷부분도 사진처럼 고정시켜주시면 됩니다.

위 사진처럼 느슨하게 장차하시면 자전거가 고정되지않고 이동합니다.

두대 장착한 모습입니다.

자전거를 좌우로 겹치게 장착하면 간섭없이 거치하실수있습니다.

캐리어의 중앙부에는 하나의 여분의 끈이 장착되어있으며

용도는 자전거를 캐리어와 고정하기위한 끈입니다.

두대를 장착후 고정끈으로 고정한 모습입니다.

두대 장착한 모습.

두대 장착모습.

튼튼하게 고정된 캐리어 모습!!!!

간단한 장착과 가벼운 가격…

 

헐리우드랙 익스프레스!!!

이 글은 info 카테고리에 분류되었고 태그가 있으며 님에 의해 에 작성되었습니다.