CentOS에 Java 설치하기

|

Install Java on CentOS

설치 가능 버전 확인

yum list java*jdk-devel 명령으로 현재 설치 가능한 Java 패키지 버전을 확인합니다.

$ yum list java*jdk-devel

Loaded plugins: fastestmirror
base                                                     | 3.6 kB     00:00
extras                                                   | 3.4 kB     00:00
updates                                                  | 3.4 kB     00:00
(1/4): extras/7/x86_64/primary_db                          | 166 kB   00:00
(2/4): base/7/x86_64/group_gz                              | 156 kB   00:00
(3/4): updates/7/x86_64/primary_db                         | 6.0 MB   00:00
(4/4): base/7/x86_64/primary_db                                                             | 5.7 MB  00:00:05
Determining fastest mirrors
 * base: ftp.daumkakao.com
 * extras: ftp.daumkakao.com
 * updates: ftp.daumkakao.com
Available Packages
java-1.6.0-openjdk-devel.x86_64                         1:1.6.0.41-1.13.13.1.el7_3                          base
java-1.7.0-openjdk-devel.x86_64                         1:1.7.0.171-2.6.13.0.el7_4                          updates
java-1.8.0-openjdk-devel.i686                           1:1.8.0.161-0.b14.el7_4                             updates
java-1.8.0-openjdk-devel.x86_64                         1:1.8.0.161-0.b14.el7_4                             updates


설치

위에서 확인한 패키지 명을 보고 설치를 원하는 Java 패키지를 선택합니다.

sudo yum install -y java-1.8.0-openjdk-devel.x86_64


확인

$ java -version

openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)

Docker Architecture

|

Docker Architecture

Image

Docker 구조는 위 그림과 같습니다.

가운데의 도커 호스트(Docker Host)안에 도커 데몬(Docker Daemon)이 존재하며 컨테이너의 생성, 실행, 모니터링 및 이미지 관리 등의 역할을 합니다.

도커 클라이언트(Docker Client)는 도커 데몬에게 명령을 내릴 수 있는 인터페이스 역할을 하며, 도커 데몬과는 HTTP 통신을 합니다. 기본적으로 유닉스 도메인 소켓(Unix Domain Socket)을 통해 통신을 하지만, 원격 클라이언트 또는 systemd가 관리하는 소켓의 파일 디스크립터(File Descriptor)를 통해 TCP 통신을 하기도 합니다.

도커 레지스트리(Docker Registry)는 이미지들을 저장하고 배포하는 역할을 합니다. 보통 도커 허브(Docker Hub)를 통해 이미지를 배포하며 독자적인 사설 레지스트리를 생성해서 운영할 수도 있습니다.

OpenShift origin 설치 방법(CentOS 기준)

|

OpenShift origin

OpenShift origin 설치 방법에 대한 자세한 내용은 여기를 참고하시면 됩니다.

아래 포스팅은 제가 직접 OpenShift origin을 구동시킨 방법입니다.

Docker를 이용한 컨테이너로 구동하는 방법과 Binary 파일을 직접받아 설치하는 방법이 있는데, 저는 후자를 선택했습니다. 또한 설치 OS는 ‘CentOS’를 선택했습니다.


Docker 설치 및 실행

sudo yum install -y yum-utils

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

sudo yum makecache fast

sudo yum install -y docker-ce

sudo systemctl start docker

sudo systemctl enable docker

sudo gpasswd -a centos docker


Docker insecure registry 설정

기본적으로 Docker는 Docker Registry 접속을 위해 https를 사용하도록 되어 있습니다. 하지만 http를 이용한 insecure registry 세팅을 해주어야 하는 경우가 있습니다.

CentOS 기준으로 다음과 같이 세팅해줍니다.

더 자세한 내용은 여기를 참조하세요.

sudo sysctl -w net.ipv4.ip_forward=1

sudo su

cat<<EOF>> /etc/docker/daemon.json
{
    "insecure-registries" : ["172.30.0.0/16"]
}
EOF

exit

sudo systemctl daemon-reload

sudo systemctl restart docker


OpenShift 설치

OpenShift 최신 버전은 여기에서 확인할 수 있습니다. 현재 최신 버전인 3.9.0은 알파 버전이라 저는 3.7.1 버전으로 설치를 진행했습니다.

wget https://github.com/openshift/origin/releases/download/v3.7.1/openshift-origin-server-v3.7.1-ab0f056-linux-64bit.tar.gz

tar -xvzf openshift-origin-server-v3.7.1-ab0f056-linux-64bit.tar.gz

mv openshift-origin-server-v3.7.1-ab0f056-linux-64bit openshift-v3.7.1

cd openshift-v3.7.1

sudo cp openshift oc kubectl /usr/local/bin


Cluster Up

그런 다음 다음 명령어를 이용해서 Cluster Up을 해줄 수 있습니다.

oc cluster up

하지만, 만약 AWS EC2의 가상 머신에서 작업하는 경우에는 다음과 같은 작업으로 해주어야 합니다.

metadata_endpoint="http://169.254.169.254/latest/meta-data"

public_hostname="$( curl "${metadata_endpoint}/public-hostname" )"

public_ip="$( curl "${metadata_endpoint}/public-ipv4" )"

oc cluster up --public-hostname="${public_hostname}" --routing-suffix="${public_ip}.nip.io"

다음과 같은 결과가 나오면 성공입니다.

$ oc cluster up --public-hostname="${public_hostname}" --routing-suffix="${public_ip}.nip.io"

Starting OpenShift using openshift/origin:v3.7.1 ...
OpenShift server started.

The server is accessible via web console at:
    https://ec2-13-125-14-154.ap-northeast-2.compute.amazonaws.com:8443

You are logged in as:
    User:     developer
    Password: <any value>

To login as administrator:
    oc login -u system:admin

이제 브라우저를 이용해서 위에 나온 Web Console 주소로 접속해서 사용해보면 됩니다.

ssh 접속시 WARNING - REMOTE HOST IDENTIFICATION HAS CHANGED! 발생하는 경우

|

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

$ ssh snowdeer@13.14.15.16

 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
 @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
 
 IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! 
 Someone could be eavesdropping on you right now (man-in-the-middle attack)! 
 It is also possible that a host key has just been changed. 
 The fingerprint for the RSA key sent by the remote host is
 SHA256:abcdefghijklmnopqrstuvwxyz.
 Please contact your system administrator. 
 Add correct host key in /home/snowdeer/.ssh/known_hosts to get rid of this message. 
 Offending RSA key in /home/snowdeer/.ssh/known_hosts:3 
   remove with:
   ssh-keygen -f "/home/snowdeer/.ssh/known_hosts" -R 13.14.15.16
   ECDSA host key for 13.14.15.16 has changed and you have requested strict checking.
 Host key verification failed.

이 오류는 기존에 접속한 IP Address의 서버와 공개키를 교환한 상태에서 같은 주소로 다른 서버에 접속했기 때문에 발생하는 오류입니다.

이 경우는 다음 명령어를 이용해서 해결할 수 있습니다.

ssh-keygen -R 13.14.15.16

Docker 실습 예제 (Redis)

|

Redis 공식 이미지 사용

Redis 이미지 다운로드(pull)

$ docker pull redis

Using default tag: latest
latest: Pulling from library/redis
d2ca7eff5948: Pull complete
1d1a2245aaa6: Pull complete
9a483dd2a28b: Pull complete
7b78ebdc44f0: Pull complete
79b76500ef26: Pull complete
b2991d9a5624: Pull complete
Digest: sha256:e55dff3a21a0e7ba25e91925ed0d926d959dac09f9099fd1bcc919263305f1e4
Status: Downloaded newer image for redis:latest


Redis 컨테이너 시작

앞에서 가져온 redis 임지를 이용해서 컨테이너를 시작합니다.

$ docker run --name myredis -d redis

a16226308354840de9dadda78bb83f2378dc5cdb0270c097942357b466bf023f

-d 옵션을 주면 컨테이너를 백그라운드에서 실행시킬 수 있습니다.


컨테이너간 연결

redis 컨테이너를 시작하긴 헀지만, 그 이후에 해야 할 일들이 있습니다. 어떻게든 데이터베이스로 연결을 해야 합니다.

redis-cli 도구를 설치하기 위해서 새로운 컨테이너를 생성하고 앞서 생성한 컨테이너와 연결을 해줍니다.

$ docker run --rm -it --link myredis:redis redis /bin/bash

root@c5706ca49d45:/data# redis-cli -h redis -p 6379
redis:6379> ping
PONG

redis:6379> set "abc" 123
OK

redis:6379> get "abc"
"123"

redis:6379> exit

root@c5706ca49d45:/data# exit

exit

--link 옵션을 이용하게 되면 새로운 도커 컨테이너와 기존의 myredis 이름의 컨테이너가 연결이 됩니다. 새로운 컨테이너 안에서 myredis 컨테이너를 redis라는 이름으로 참조합니다. 이러한 작업을 수행하려면 도커는 컨테이너 /etc/hosts에서 redis를 위한 진입점을 생성하고, myredis 컨테이너의 IP 주소를 가리키도록 합니다.

이렇게 하면 Redis 컨테이너의 IP 주소를 전달하거나 찾을 필요없이 redis-cli에서 redis라는 호스트 이름을 사용할 수 있게 됩니다.


볼륨 설정

컨테이너가 종료되면 컨테이너 내부의 데이터는 사라집니다. 따라서 컨테이너안의 데이터를 유지하고 백업하기 위해서는 호스트 또는 다른 컨테이너 간에 데이터를 공유할 수 있는 설정이 필요합니다. 도커에서는 볼륨(Volume)이라는 개념을 통해 컨테이너에 파일 또는 디렉토리를 마운트(Mount)할 수 있습니다.

도커에서 볼륨을 사용하는 방법은 다음과 같이 두 가지 방법이 있습니다.

  • Dockerfile 안에 VOLUME 설정을 사용
  • docker run 명령어를 사용할 때 -v 옵션을 활용

예를 들어 컨테이너 안에 /data라는 볼륨을 생성하고 싶으면 다음과 같이 할 수 있습니다.

VOLUME /data

또는

docker run -v /data redis

기본적으로 디렉토리나 파일은 호스트의 도커 설치 디렉토리(보통은 /var/lib/docker/)안에 마운트됩니다. -v 옵션을 이용해서 호스트의 특정 디렉토리를 컨테이너 안의 디렉토리로 마운트 할 수도 있습니다.

docker run -v [호스트 디렉토리]:[컨테이너 디렉토리] reids

ex) docker run -v /home/snowdeer/docker/data:/data redis


데이터 백업

앞서 만들었던 myredis 컨테이너가 실행 중일 때 백업을 하고 싶으면 다음 명령을 이용해서 백업을 할 수 있습니다.

$ docker run --rm --volumes-from myredis -v $(pwd)/redis-backup:/backup debian cp /data/dump.rdb /backup/

위 명령을 수행하면 현재 호스트 디렉토리에 redis-backup이라는 디렉토리를 만들고 컨테이너 안의 dump.rdb 파일을 호스트로 백업하게 됩니다.


컨테이너 종료와 삭제

컨테이너 종료와 삭제 방법은 다음과 같습니다.

$ docker stop myredis

$ docker rm myredis

만약 모든 컨테이너들을 삭제하고 싶으면 다음과 같이 명령어를 내리면 됩니다.

$ docker stop $(docker ps -aq)

$ docker rm $(docker ps -aq)