하나의 docker-compose 에 여러개 프로세스가 올라가 있을 때 하나만 kill 했다가 up -d 하는 방법 입니다.

# mariadb 프로세스 죽이기
sudo docker-compose stop mariadb

# mariadb 프로세스 삭제
sudo docker rm -v wiki-jupyter_mariadb_1

# mariadb 만 up 하기
sudo docker-compose up -d mariadb

안되면 답글 남겨 주세요.

도커를 실행 해서 올리면 컨테이너 안에 설치 안되있는게 엄청 많죠?
apt-get install 하려면 슈퍼유저 권한이 필요 합니다.

docker-compose exec mariadb /bin/bash 기본 접속 하는 명령어에서
--user 0 을 옵션으로 주면 관리자 권한으로 접속 하게 됩니다.

sudo docker-compose exec --user 0 mariadb /bin/bash

1. 도커 설치
curl -fsSL https://get.docker.com/ | sudo sh

2. 도커 유저 설정
sudo usermod -aG docker $USER

3. docker-compose 설치
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

4. 권한 설정
sudo chmod +x /usr/local/bin/docker-compose

쉽죠?

mongoDB 백업하기(dump)

mongodump -u user_name -p user_password --authenticationDatabase=admin --out /data/backup/ --db db_name --collection collection_name --gzip 

# 옵션 설명
-u : 계정명
-p : 계정의 비밀번호
--authenticationDatabase=admin : 인증
--host : 원격 시 IP 주소 및 포트 
--out : Dump 받을 폴더 경로
--db : Dump 받을 DB 선택 (미작성 시 DB 전체)
--collection : Dump 받을 collection(table) 선택  (미작성 시 Collection 전체)
--gzip : Dump 파일 확장자

 

mongoDB 복구하기(Restore)

mongorestore -u user_name -p user_password --host 192.168.0.100:8000 --authenticationDatabase=admin --gzip --db db_name --collection collection_name /data/backup/collection.bson.gz --drop

# 옵션 설명
-u : 계정명
-p : 계정의 비밀번호
--authenticationDatabase=admin : 인증
--host : 원격 시 IP 주소 및 포트
--db : Restore 할 DB 선택 
--collection : Restore 할 collection(table) 선택
--gzip : Restore 파일 확장자
--drop : 백업에 없는 collection 삭제

python 실행 시 ModuleNotFoundError: No module named 'PyQt5.QtWebEngineWidgets'

위와 같이 에러 메시지가 나온다면

pip3 install PyQtWebEngine 혹은 pip install PyQtWebEnginePyQtWebEngine 을 install 해주시면 됩니다.

안되시면 답글 부탁 드려요

$ vi /home/user/.ssh/config

Host test
  HostName IP:PORT
  User UserId

$ ssh test // 로 접속 하면 된다.

command 창을 띄우신 다음 (windows key + r => cmd)

python -m site --user-site

를 입력 하시면 아래 이미지 처럼 경로를 찾을 수 있습니다.

시드 머니를 1000불로 계획하고 룰렛을 마틴(게일)베팅법으로 베팅 했을 때 ,

초기 베팅 금액 별 이길 확률과 평균 베팅 횟수를 python 으로 구현 해 보았습니다.

(룰렛에 0은 포함 00은 미포함)

결론은 1000불을 가지고 룰렛 number, color 베팅을 할 경우

7불, 15불을 초기 배팅금으로 잡고 시작 하는게 가장 승률이 높았습니다.

베팅 횟 수까지 고려 한다면 15불로 시작 하는게 가장 이상적인 것 같습니다(저의 의견).

!!! 절대 베팅을 권고하는 글은 아닙니다. 심심풀이로 만들어 보았을 뿐입니다

base_bet_money: $, win_rate: 승률, betting_count: 베팅 횟수

!! 제가 코드를 잘 못 짰을 수도 있어서 코드도 마지막에 첨부 하였습니다.

for bet_origin in tqdm_notebook(range(1,51)):
    idx = 0
    win = 0
    lose = 0
    total = 0
    
    while True:
        money = 1000
        bet = bet_origin
        i = 0
        hole = 0
        zzac = 0
        while True:
            a = random.randint(0,36)

            if a == 0:
                money -= bet
                bet = bet*2
            elif a%2 == 0:
                money += bet
                bet = bet_origin
                zzac += 1
            else:
                money -= bet
                bet = bet*2
                hole += 1

            i += 1
            if money <= bet:
                lose += 1
                break

            if money >= 1100:
                total += i
                win += 1
                break

        idx += 1

        if idx >= 100000:
            break

    print(bet_origin, win/1000, total/100000)

 

아래 소스를 복사 하여

VScode 나 notepad++ 로 roulette.py 로 저장 하신 뒤

command 창에서 python roulette.py 로 실행 하시면 됩니다.

기본으로 게임에서 질 경우 더블배팅(마틴게일) 금액으로 설정 해 놓았습니다

카지노 가시려는 분이 계시다면 룰렛 홀짝(even,odd) 더블 배팅 연습 해보고 가셔요

실행 화면 입니다

# import error 가 날 경우에 각각 pip3 install 해주셔야 합니다.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QLineEdit, QMessageBox
from PyQt5.QtCore import Qt
from random import randint

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setupUI()

    def setupUI(self):
    	# 프로그램 title
        self.setWindowTitle("Roulette")

		# 룰렛에서 나온 숫자
        self.number = QLabel(self)
        self.number.setText('0')
        self.number.move(35, 15)

		# 현재 금액
        self.tmoney = QLabel(self)
        # 시드머니 1000
        self.tmoney.setText('1000')
        self.tmoney.move(30, 40)
        
        # odd and even 구분 변수
        self.bet = QLineEdit(self)
        self.bet.resize(30, 20)
        self.bet.move(70, 45)
        self.bet.hide()

		# betting money
        self.mn = QLineEdit(self)
        # 기본 베팅 금액 15
        self.mn.setText('15')
        self.mn.resize(33, 20)
        self.mn.move(71, 20)

		# odd or even click view
        self.h_z = QLabel(self)
        self.h_z.setText('')
        self.h_z.move(117, 15)

		# start 버튼
        btn1 = QPushButton("START", self)
        btn1.resize(76,20)
        btn1.move(70,70)
        btn1.clicked.connect(self.btn1_clicked)        

		# 초기화 버튼 (돈)
        btn2 = QPushButton("INIT", self)
        btn2.resize(30,20)
        btn2.move(28,70)
        btn2.clicked.connect(self.btn2_clicked) 

		# 홀수 선택
        btnOdd = QPushButton("Odd", self)
        btnOdd.resize(35,20)
        btnOdd.move(70,45)
        btnOdd.clicked.connect(self.btnOdd_clicked) 

		# 짝수 선택
        btnEven = QPushButton("Even", self)
        btnEven.resize(35,20)
        btnEven.move(110,45)
        btnEven.clicked.connect(self.btnEven_clicked) 

	# 홀수 선택 함수
    def btnOdd_clicked(self):
        self.bet.setText('1')
        self.h_z.setText('ODD')

	# 짝수 선택 함수
    def btnEven_clicked(self):
        self.bet.setText('2')
        self.h_z.setText('EVEN')

	# enter 키로 start 버튼 대체
    def keyPressEvent(self, e):
        if e.key() in [Qt.Key_Return, Qt.Key_Enter]: 
            tm, num, status = self.btn1_clicked()
            print(tm, num, status) 

        if e.key() == Qt.Key_Escape:
            print('INIT')
            self.btn2_clicked()

	# 스타트 버튼 함수
    def btn1_clicked(self):
        a = randint(0,36)
        b = self.mn.text()
        c = self.bet.text()
        t = self.tmoney.text()
        if not b:
            self.number.setText(str(a))
            return 0, a, 'none'
            pass
        elif int(t) - int(b) < 0:
            QMessageBox.about(self, "error", "no money")
            return 0, a, 'none'
            pass
        elif not a or int(a) == 0:
            tm = int(t) - int(b)
            self.tmoney.setText(str(tm))
            self.number.setText(str(a))
            self.mn.setText(str(int(b)*2))
            return tm, a, 'lose'
        elif not c or int(c) == 0:
            return t, a, 'zero'
        else:
            if int(c)%2 != int(a)%2:
                tm = int(t) - int(b)
                self.tmoney.setText(str(tm))
                self.number.setText(str(a))
                self.mn.setText(str(int(b)*2))
                return tm, a, 'lose'
            else:
                tm = int(t) + int(b)
                self.tmoney.setText(str(tm))
                self.number.setText(str(a))
                self.mn.setText('15')
                return tm, a, 'win'
        
	# 초기화 버튼 함수
    def btn2_clicked(self):
        self.tmoney.setText('1000')
        self.number.setText('0')
        self.mn.setText('15')
        self.bet.setText('')

if __name__ == "__main__":
    app = QApplication(sys.argv)
    mywindow = MyWindow()
    mywindow.show()
    app.exec_()

 

파이썬에는 between 이 없습니다.

그래서 range 로 대체 해서 사용해야 되는데 between 보다 더 간단 합니다.

아래 예제처럼 사용하시면 됩니다.

# 사용 할 수 없는 between 코드
if a between 1 and 4:
	print(a)
    
# between 을 range 로 변경 해서 사용
if a in range(1,4):
	print(a)

+ Recent posts