다음과 같은 에러를 발생시키는 경우가 있다.

 

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.35/containers/create: dial unix /var/run/docker.sock: connect: permission denied.See 'docker run --help'.

 

이는 docker가 다른 유저 및 유저 그룹에 속해 있는 파일들에 접근할 수 없어서 발생하는 문제로, 기본적으로 다음과 같이 해결이 가능하다.

 

(1) docker 그룹 생성

$sudo groupadd docker

 

(2) 다른 유저를 docker 그룹에 넣어준다.

$sudo usermod -aG docker <유저명>

반응형

'Docker' 카테고리의 다른 글

도커로 nginx 띄우는 법  (0) 2019.10.15

이 글에서는 단순히 nginx 이미지를 띄우고 멈추는 방법에 대해서만 설명할 계획이다. nginx 환경설정을 추가하는 방법에 대해서는 이어지는 포스트에서 자세히 설명하도록 하겠다.

우선, 도커가 현재 호스트에 설치가 되어 있다는 사실을 가정하여 글을 이어나가겠다.

 

1. 도커 커맨드를 이용하여 nginx 이미지를 현재 호스트로 가져와야 한다. 

$docker image pull nginx

 

2. 이제, 이미지를 실행하여 컨테이너로 띄워 보자. 

$docker run -p 8080:80 nginx

위의 커맨드는 이미지를 띄우되, 호스트의 8080 포트를 컨테이너의 80 포트에 붙이라는 의미이다. 현재 도커를 자신의 컴퓨터에 설치하여 저 커맨드를 실행하였다면, 브라우저를 띄운 후 호스트주소:8080을 입력해 보자. 그러면 엔진엑스 메인 화면이 나오는 것을 확인할 수 있을 것이다.

간단하다. 그런데 위의 커맨드로 실행하면 현재 콘솔에서는 컨테이너가 실행중인 동안 아무 작업도 할 수 없다. 데몬으로 실행한 것이 아니기 때문이다.

 

도커를 데몬으로 실행하는 방법은 간단하다. 위의 커맨드에다가 -d 플래그를 추가해 주면 된다.

$docker run -d -p 8080:80 nginx

이렇게 하면 데몬으로 실행되는 것을 확인할 수 있다.

 

현재 실행중인 컨테이너의 목록은 다음 커맨드로 확인 가능하다.

$docker container ls

 

컨테이너를 멈추고 싶으면 목록에서 보이는 container ID 혹은 맨 우측 열의 names를 참조하여 다음과 같이 커맨드를 실행한다. 

$docker container stop <container_ID> (혹은 name)

여기서 name은 컨테이너 실행 시 임의로 지어진 이름이다.

그런데, 매번 컨테이너 ID 혹은 임의로 생성된 이름을 참조하자니 불편하다. 따라서 컨테이너를 띄울 때 이름을 사용자 정의 이름으로 지정해 주고, 나중에 이 이름으로 컨테이너를 멈출 수 있도록 하는게 편리할 것이다. 도커 실행 시 --name=<컨테이너명> 옵션을 추가하여 컨테이너 이름을 사용자가 정의할 수 있다. 

 

$docker run --name=webserver -d -p 8080:80 nginx

위 커맨드를 실행한 후 컨테이너 목록을 다시 조회해 보니, name에 webserver가 들어간 것을 확인할 수 있다.

 

이제는 docker container stop webserver 커맨드로 컨테이너를 멈출 수 있다.

반응형

환경: CentOS 7.6.1810

(1) 최신 버전의 소스코드 압축 파일을 다운로드 한다.

$sudo wget http://apache.tt.co.kr/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz

 

(2) 다운로드 한 파일을 /opt 밑에 압축해제 한다. 그리고 압축해제된 디렉토리 명을 간단하게 maven으로 바꿔준다.

$sudo tar xf apache-maven-3.6.1-bin.tar.gz -C /opt

$mv /opt/apache-magen-3.6.1 /opt/maven

 

(3) /etc/profile.d 밑에 maven.sh 파일을 생성하고, 다음 내용을 입력한다.

#!/bin/bash
export JAVA_HOME=/usr/lib/jvm/jre-openjdk
export MAVEN_HOME=/opt/maven
export PATH=${MAVEN_HOME}/bin:${PATH}

 

(4) 위에서 생성된 maven.sh 파일에 실행권한을 부여한다.

$sudo chmod +x /etc/profile.d/maven.sh

 

(5) mvn --version을 실행하여 정상적으로 커맨드가 실행되는지 확인.

반응형

이전에 CentOS에서 파이썬 3 설치를 한 후 python3.6라고 커맨드를 실행하면 파이썬 3버전을 실행할 수 있음을 확인한 바 있다. 

참조: https://marshallslee.tistory.com/entry/CentOS-7%EC%97%90%EC%84%9C-%ED%8C%8C%EC%9D%B4%EC%8D%AC-3-%EC%84%A4%EC%B9%98?category=1044300

 

CentOS 7에서 파이썬 3 설치

실행환경: AWS EC2 CentOS 7.6.1810 AWS EC2 CentOS 7버전 기준, 파이썬 2버전이 기본적으로 제공되고 있으나 3버전은 설치되어 있지 않다. 따라서 3버전을 활용하기 위해서는 우선 다음과 같은 절차를 통해 설치..

marshallslee.tistory.com

그런데 python3.6 라는 커맨드가 다소 길어보여서 이를 간소화된 커맨드로 바꾸고 싶은 경우가 생길 수도 있다. 이 경우 alias 커맨드를 활용하여 새 커맨드를 만들 수 있다.

 

alias 커맨드는 사용자가 커스텀 커맨드를 만들 수 있도록 해준다. 우선, 다음과 같은 커맨드를 콘솔에서 확인하여 기존의 python3.6이 어디에 위치해 있는 프로그램인지를 확인한다.

 

$which python3.6

 

실행 결과, /usr/bin/python3.6에 위치한 것을 확인할 수 있다. 이 경로값을 가지고 alias 커맨드를 ~/.bashrc 파일을 열어서 맨 아래줄에다가 다음과 같이 한 줄 추가해 준다. 단축된 커맨드는 python3라고 하겠다.

 

alias python3='/usr/bin/python3.6'

 

콘솔 접속을 종료한 후 다시 들어와서 python3라고 실행해 보면 python3.6을 실행했을 때와 똑같이 작동하고 있음을 알 수 있다.

반응형

실행환경: AWS EC2 CentOS 7.6.1810

 

AWS EC2 CentOS 7버전 기준, 파이썬 2버전이 기본적으로 제공되고 있으나 3버전은 설치되어 있지 않다. 따라서 3버전을 활용하기 위해서는 우선 다음과 같은 절차를 통해 설치를 해주어야 한다.

 

(1) 필요한 유틸리티를 먼저 설치해 주기

$sudo yum update

$sudo yum install yum-utils

$sudo yum groupinstall development

 

(2) 파이썬 3버전 설치 (2019년 4월 24일 기준 3.6버전)

스탠다드 YUM 리파지터리가 아직은 파이썬3 릴리즈를 지원하지 않는다. 따라서 IUM (Inline with Upstream Stable)이라는 이름의 추가 리파지터리를 설치해 주어야 한다.

 

$sudo yum install https://centos.iuscommunity.org/ius-release.rpm 

 

위의 작업이 성공적으로 끝나면, 이제 파이썬 3.6 버전을 설치해 주면 된다.

 

$sudo yum install python36u

 

파이썬 3버전이 성공적으로 설치되었는지 확인 겸 세부버전 확인을 위해 다음과 같이 실행해 본다. 

 

$python3.6 -V

 

그러면 'Python 3.6.7'라는 결과를 콘솔에서 확인할 수 있을 것이다.

반응형

파이썬에서 __init__ 함수는 자바에서 생성자와 비슷한 역할을 한다. 즉, 한 객체에 대한 인스턴스를 생성할 때 호출되는 것이 __init__ 함수라고 보면 되겠다.

 

다음은 Car 클래스를 생성하고, 이 클래스에 대한 __init__ 함수를 정의한 후 인스턴스를 생성하면 어떻게 결과가 나타나는지를 보여주기 위한 예제 코드이다.

 

class Car:
    def __init__(self, brand):
        self.brand = brand
        print(brand + " 한 대가 생성되었습니다.")
        
        
c = Car("벤츠")

 

위의 코드를 실행해 보면 "벤츠 한 대가 생성되었습니다." 라는 메세지가 출력되는 것을 확인할 수 있다.

반응형

'Python' 카테고리의 다른 글

[파이썬] 데코레이터 (decorator)  (0) 2022.12.09
CentOS 7에서 파이썬 3 설치  (0) 2019.04.24

운영체제 및 컴퓨팅 환경: AWS EC2 CentOS 7.6.1810

Nginx 버전: 1.12.2

 

이슈:
다음과 같이 엔진엑스에서 도메인을 타고 들어왔을 때 8080 포트로 포워딩이 되도록 설정하였음.

 

그러나 도메인 접속시 502 (Bad Gateway) 에러가 발생하였으며, 엔진엑스 로그를 확인해 보니 다음과 같은 에러 메세지를 내보내고 있었다.

 

2018/10/01 22:59:50 [crit] 881#0: *1 connect() to 127.0.0.1:8080 failed (13: Permission denied) while connecting to upstream,
client: 211.60.50.190, server: jenkins.blablabla.com, request: "GET /favicon.ico HTTP/1.1", upstream:
"http://127.0.0.1:8080/favicon.ico", host: "jenkins.blablabla.com", referrer: "http://jenkins.blablabla.com/"

 

원인:

여러 검색 등을 통해 확인 결과, 기본적으로 EC2 인스턴스를 런치할 때 SELinux (Security Enhanced Linux)가 함께 작동하는데, 이 SELinux가 HTTP 프록시를 차단하고 있는 것이 문제였다.

 

해결:

이러한 문제를 해결하기 위해 HTTP 프록시를 허용해주는 커맨드를 실행하기로 하였고, 다음과 같이 실행하였다.

$setsebool -P httpd_can_network_connect true

 

여기서 -P는 persist의 의미로, 재부팅 후에도 환경설정이 그대로 적용된다는 말이다. 이렇게 함으로써 정상적으로 도메인 접속 후 포트포워딩이 문제 없이 이루어 지는 것을 확인할 수 있었다.

반응형

EC2 인스턴스 생성 후 인스턴스에 접속하여 (운영체제: CentOS 7.6.1810) date 커맨드를 실행하여 시스템 시간을 확인해 보면, 시간이 KST (한국 표준 시간)이 아닌 UTC로 맞춰져 있는 것을 확인할 수 있다. 따라서 인스턴스 가동 후 시간대를 한국 시간대로 바로잡아 주는 작업을 먼저 실행하도록 한다.

 

(1) 시간대 정보를 담고 있는 /etc/localtime 파일을 삭제한다.

$sudo rm /etc/localtime

 

(2) 변경하고자 하는 시간대 (여기선 한국시간) 정보가 담긴 파일에 대한 링크를 생성하여 /etc/localtime에 연결시킨다.

$sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime

 

위의 작업을 진행한 후 date 커맨드를 다시 실행해 보면 변경된 정보를 확인할 수 있다.

반응형

플랫폼: CentOS 7.6.1810


(1) 시스템을 최신 상태로 만들기

$sudo yum install epel-release

$sudo yum update

$sudo reboot


(2) Erlang 설치하기

RabbitMQ는 Erlang으로 쓰여졌으므로 Erlang 설치를 먼저 해주어야 한다.

$cd ~

$wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm

$rpm -Uvh erlang-solutions-1.0-1.noarch.rpm

$yum install erlang


Erlang 설치가 제대로 되었는지 `erl` 커맨드로 실행해 본다. 정상적으로 설치되면 다음과 같은 화면이 나타나면서 프롬프트가 변경이 된다.


Ctrl+C를 두번 눌러주면 원래 프롬프트로 돌아간다.


(3) RabbitMQ 설치하기

다음과 같이 최신 버전의 RabbitMQ를 설치한다. CentOS 기준 최신 버전은 2019년 2월 19일 현재 3.7.12이며, 여기에 접속하면 확인할 수 있다.

https://www.rabbitmq.com/install-rpm.html#downloads


rpm 커맨드를 이용하여 설치해 준다.

$rpm -Uvh https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.12/rabbitmq-server-3.7.12-1.el7.noarch.rpm


(4) 방화벽 설정

RabbitMQ를 활용하기 위해서는 개방해 줘야 할 인바운드 TCP 포트가 제법 있다. 다음 포트들을 인바운드 정책에서 개방해 준다. 총 9개.


4369

5671

5672

15672

25672

61613

61614

1883

8883


(5) RabbitMQ 서비스 활성화 시키기 및 시작하기

systemctl 커맨드를 이용하여 다음과 같이 실행해 준다.


$sudo systemctl enable rabbitmq-server

$sudo systemctl start rabbitmq-server


(6) RabbitMQ 매니지먼트 콘솔을 활성화 하여 웹브라우저에서 RabbitMQ 서버 프로세스를 모니터링 할 수 있도록 해준다.


$sudo rabbitmq-plugins enable rabbitmq_management

$sudo chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/


(7) 계정 등록, 관리자 권한 부여 등 작업


$sudo rabbitmqctl add_user <계정명> <패스워드>

$sudo rabbitmqctl set_user_tags <계정명> administrator

$sudo rabbitmqctl set_permissions -p / <계정명> ".*" ".*" ".*"


위의 모든 절차를 마무리 한 뒤 http://<IP주소>:15672로 접속해 보면 다음과 같은 화면을 마주할 것이다.



방금 전에 등록한 계정명과 패스워드를 이용하여 이용 시작하기.

반응형

현재 서버의 시스템 시간은 date 커맨드로 간단하게 확인할 수 있다. 커맨드 실행 시 다음과 같은 형식의 결과를 볼 수 있을 것이다.


Tue Feb 19 07:36:21 UTC 2019


만일, 시스템 시간이 실제 시간과 맞지 않거나 혹은 시간대가 다른 경우에는 시간을 바로잡아 줘야 하는데, timedatectl 커맨드를 이용하여 다음과 같이 서울 시간 기준으로 바로잡도록 할 수 있다. 


timedatectl set-timezone Asia/Seoul


그리고 다시 date를 실행해 보면 시간대가 바뀌어 있는 것을 확인할 수 있다.


Tue Feb 19 16:37:55 KST 2019


참고로, timedatectl list-timezones를 실행하면 timedatectl 커맨드에서 제공하는 시간대 전체 리스트를 확인할 수 있다. 만일 아시아 지역 시간대가 어떤 것들이 제공되는지를 확인하려면 따라서 grep 커맨드와 조합하여 다음과 같이 할 수 있다.


timezonectl list-timezones | grep Asia

반응형

+ Recent posts