Docker 명령어 정리

# 도커 프로세스 확인
docker ps

# 도커 실행하기 
docker run -dp [port]:[port] [tag 명]
-d : background 실행  
-p : port 매핑  
-dp : 아래와 같이 합쳐서 옵션을 줄 수 있다.  
    
# 도커 Start, Stop, restart 하기 
docker [start, stop, restart] -dp [port]:[port] [containerID]
docker stop 395f4c30ff4e

# 도커 컨테이너 삭제하기 
docker rm [containerID]
-f : 강제로 삭제하기(프로세스 run 상태에서도 가능)

# 도커 build 하기  
docker build -t getting-started .
-t : tag name

# 도커 Image 확인하기 
docker images

# 도커 Image 삭제하기 
docker rmi [imageID]

# 도커 Volume 생성하기
docker volume create [volume 명]

# 도커 volume mount 하여 서비스 run 하기
docker run -dp 3000:3000 -v [volume 명]:[mount directory] [image 명]

# 도커 volume 상세히 보기
docker volume inspect [volume 명]

도커 Dev-mode로 실행하기

 docker run -dp 3000:3000
 -w /app -v "$(pwd):/app"
 node:12-alpine
 sh -c "yarn install && yarn run dev"

WSL2 를 활용하여 Docker 설치하기

  1. 해당 페이지로 이동하여 Docker Desktop 을 다운로드 받습니다. Docker Desktop Download

  2. 다운받은 Docker Desktop installer.exe를 실행하면 사용자 계정 컨트롤 허용 여부를 물어 봅니다. 이때 ‘예’를 선택하여 진행 합니다.

  3. 진행중 Configuration이 나타납니다. 아래 내용에 대해 모두 체크박스를 선택한 후 ‘OK’ 버튼을 클릭합니다.

    • Install required Windows components for WSL 2
    • Add shortcut to desktop
  4. Docker Desktop 설치 진행

  5. 설치 완료

  6. windows 시작 버튼을 클릭 하여 Docker Desktop 실행 windows 에 WSL2 가 활성화 되어 있다면 Docker 는 WSL2 에서 실행이 됩니다.

  7. Docker Desktop 이 실행 되면 windows 우측 아래 시스템 트레이에 Docker 아이콘(고래모양)이 나타납니다. 아이콘에 마우스 커서를 올린 후 우클릭 하여 About Docker Desctop 을 클릭하면 관련 도구들의 버전을 확인할 수 있습니다.

  8. wsl 명령어를 통해 docker-desktop 이 잘 실행되고 있는지 확인할 수 있습니다.

    wsl - l -v 
    
  9. Docker 서버, 클라이언트 정보를 확인할 수 있습니다.

    docker verion
    
  10. 도커에서 실행중인 컨테이너를 확인해 봅니다.

    docker ps
    
  11. 도커 tutorial 실행하기

    docker run -d -p 80:80 docker/getting-started
    
    • -d – 백 그라운드 실행
    • -p 80:80 – 80 port 를 docker container 80 port 로 매핑
    • docker/getting-started – 이미지 명
  12. tutorial 실행 후 인터넷 브라우저에서 127.0.0.1/ 로 접속하여 튜토리얼을 확인해 보세요.

Windows 10에 WSL2 설치하기

WSL2 설치하기

cmd 또는 윈도우 터미널(PowerShell)에서 아래 명령어를 실행 하여 리눅스 기능을 활성화 합니다.

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

아래 명령어로 VirtualMachinePlatform 기능을 활성화 합니다

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

아래 링크로 최신 패키지 다운로드를 받습니다.
x64 머신용 최신 WSL2 Linux 커널 업데이트 패키지 다운로드

설치 후 버전 wsl2 버전 업데이트

wsl --set-default-version 2

Windows Microsoft Store 앱을 열고 Ubuntu를 검색합니다. Ubuntu 배포판을 설치 합니다.

설치가 완료되면 버전을 확인해 봅니다.

wsl -l -v

wsl 을 활용하여 Ubuntu에 명령어 전달하기

wsl cat /etc/lsb-rease 

Bash shell 실행하기

wsl bash

windows10 에 wsl2 설치하기 공식 문서

참고 사이트

java 인증서 오류

Proxy 가 적용된 네트워크 환경에서 java 코드를 이용해 Remote 사이트에 접속을 시도하는 경우 Remote site 의 인증서가 신뢰하는 인증기관 인증서 목록에 없으면 오류가 발생한다. 이런 경우 아래와 같이 인증서를 넣어주면 해결 할 수 있다.

  1. 해당 내용을 복사하여 InstallCertProxy.java 파일로 만든다.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.security.KeyStore;
import java.security.MessageDigest;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;

public class InstallCertProxy {

    public static void main(String[] args) throws Exception {

        String httpsUrl = null;
        String host;
        int port;
        char[] passphrase;
        if (args.length == 0) {
            httpsUrl = "https://www.google.com/";
            port = 443;
            host = "www.google.com";
            passphrase = "changeit".toCharArray();
        } else if ((args.length == 1) || (args.length == 2)) {
            String[] c = args[0].split(":");
            host = c[0];
            port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);
            String p = (args.length == 1) ? "changeit" : args[1];
            passphrase = p.toCharArray();
            httpsUrl = "https://" + host;
            if (port != 443) {
                httpsUrl += ":" + port;
            }
        } else {
            System.out.println("Usage: java InstallCert [host:port] [passphrase]");
            return;
        }
        System.out.println("target: " + httpsUrl);
        File file = new File("jssecacerts");
        if (file.isFile() == false) {
            char SEP = File.separatorChar;
            File dir = new File(System.getProperty("java.home") + SEP + "lib"
                    + SEP + "security");
            file = new File(dir, "jssecacerts");
            if (file.isFile() == false) {
                file = new File(dir, "cacerts");
            }
        }
        System.out.println("Loading KeyStore " + file + "...");
        InputStream in = new FileInputStream(file);
        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
        ks.load(in, passphrase);
        in.close();

        SSLContext context = SSLContext.getInstance("TLS");
        TrustManagerFactory tmf = TrustManagerFactory
                .getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(ks);
        X509TrustManager defaultTrustManager = (X509TrustManager) tmf
                .getTrustManagers()[0];
        SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
        context.init(null, new TrustManager[] { tm }, null);
        SSLSocketFactory factory = context.getSocketFactory();

        System.out
                .println("Opening connection to " + host + ":" + port + "...");

        String httpsProxyHost = System.getProperty("https.proxyHost");
        String httpsProxyPortStr = System.getProperty("https.proxyPort");

        int httpsProxyPort = httpsProxyPortStr != null ? Integer.parseInt(httpsProxyPortStr) : 8080;
        if (httpsProxyHost == null) {
            System.err.println("Please set your https proxy : example -Dhttps.proxyHost=proxy -Dhttps.proxyPort=80");
        }
        URL url = new URL(httpsUrl);
        Proxy p = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(
                httpsProxyHost, httpsProxyPort));
        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(p);
        conn.setSSLSocketFactory(factory);
        conn.setConnectTimeout(3000); // 3 seconds.
        conn.setReadTimeout(3000); // 3 seconds
        conn.setRequestProperty("User-Agent",
                "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");
        try {
            System.out.println("Starting SSL handshake...");
            conn.connect();
            System.out.println();
            System.out.println("No errors, certificate is already trusted");
        } catch (SSLException e) {
            System.out.println();
            e.printStackTrace(System.out);
        } finally {
            conn.disconnect();
        }

        X509Certificate[] chain = tm.chain;
        if (chain == null) {
            System.out.println("Could not obtain server certificate chain");
            return;
        }

        BufferedReader reader = new BufferedReader(new InputStreamReader(
                System.in));

        System.out.println();
        System.out.println("Server sent " + chain.length + " certificate(s):");
        System.out.println();
        MessageDigest sha1 = MessageDigest.getInstance("SHA1");
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        for (int i = 0; i < chain.length; i++) {
            X509Certificate cert = chain[i];
            System.out.println(" " + (i + 1) + " Subject "
                    + cert.getSubjectDN());
            System.out.println("   Issuer  " + cert.getIssuerDN());
            sha1.update(cert.getEncoded());
            System.out.println("   sha1    " + toHexString(sha1.digest()));
            md5.update(cert.getEncoded());
            System.out.println("   md5     " + toHexString(md5.digest()));
            System.out.println();
        }

        System.out
                .println("Enter certificate to add to trusted keystore or 'q' to quit: [1]");
        String line = reader.readLine().trim();
        int k;
        try {
            k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1;
        } catch (NumberFormatException e) {
            System.out.println("KeyStore not changed");
            return;
        }

        X509Certificate cert = chain[k];
        String alias = host + "-" + (k + 1);
        ks.setCertificateEntry(alias, cert);

        OutputStream out = new FileOutputStream(file); 
        ks.store(out,passphrase); 
        out.close();
        
        System.out.println();
        System.out.println(cert);
        System.out.println();
        System.out
                .println("Added certificate to keystore " + file.getAbsolutePath() + " using alias '"
                        + alias + "'");
    }

    private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();

    private static String toHexString(byte[] bytes) {
        StringBuilder sb = new StringBuilder(bytes.length * 3);
        for (int b : bytes) {
            b &= 0xff;
            sb.append(HEXDIGITS[b >> 4]);
            sb.append(HEXDIGITS[b & 15]);
            sb.append(' ');
        }
        return sb.toString();
    }

    private static class SavingTrustManager implements X509TrustManager {

        private final X509TrustManager tm;
        private X509Certificate[] chain;

        SavingTrustManager(X509TrustManager tm) {
            this.tm = tm;
        }

        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[0];
            // throw new UnsupportedOperationException();
            // src: http://infposs.blogspot.nl/2013/06/installcert-and-java-7.html
        }

        public void checkClientTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
            throw new UnsupportedOperationException();
        }

        public void checkServerTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
            this.chain = chain;
            tm.checkServerTrusted(chain, authType);
        }
    }
}
  1. java 파일 내용중 Proxy 정보를 수정한다

String httpsProxyHost = System.getProperty("https.proxyHost"); String httpsProxyPortStr = System.getProperty("https.proxyPort");

 String httpsProxyHost = "10.10.10.10";
 String httpsProxyPortStr = "8080";
  1. cmd 창에서 파일을 컴파일 한다.
javac InstallCertProxy.java
  1. cmd 창에서 컴파일 된 파일에 remote 사이트 정보를 넣어서 실행한다.
java –cp ./ InstallCertProxy start.spring.io

NUMPY

Numpy 란?

  • 다차원의 숫자 배열을 Python에서 효율적으로 처리 할 수 있도록 만들어진 라이브러리
  • 배열에 대한 처리에 특화된 라이브러리
  • 리스트나 튜플은 중첩이 가능하여 다차원 배열을 표현할 수도 있음
  • 대규모 처리에 리스트나 튜플을 사용하면 처리속도가 느림
  • 배열 연산이 빠름. 빠른 이유는 다차원 배열 객체인 NDARRAY를 기본 데이터 저장 포맷으로 사용하고 있기 때문

ndarray 란?

  • 다차원 배열 객체
  • ndarray 는 저장하고 있는 ‘데이터’와 ‘메타데이터’라 불리는 부가 정보로 구성
  • 데이터를 시스템상의 메모리에 빈틈없이 배치하여 속도가 빠름
  • 모든 배열은 shape 튜플, dtype 객체를 가짐

ndarray 생성 함수

  • array : 입력 데이터를 ndarray 타입으로 변환
  • asarray : 입력 데이터를 ndarray로 변환하지만 입력 데이터가 이미 ndarray인 경우 복사가 되지 않음
  • arange : 내장 range 함수와 유사하지만 리스트 대신 ndarray를 반환
  • ones, ones_like : 주어진 dtype과 주어진 모양을 가지는 배열을 생성하고 내용을 모두 1로 초기화 함 ones_like는 주어진 배열과 동일한 모양과 dtype을 가지는 배열을 새로 생성하여 내용을 모두 1로 초기화 함.
  • zero, zero_like : ones, ones_like 와 동일하고 내용을 모두 0으로 초기화 함
  • empty, empty_like : 메모리를 할당하여 새로운 배열을 생성하지만 ones나 zeros 처럼 값을 초기화 하지는 않음 *eye, identity : N * N 크기의 단위 행렬을 생성. 좌상단에서 우하단을 잇는 대각선은 1로 채워지고 나머지는 0으로 채움

Numpy 함수

  • dot : 행렬의 내적을 구함
  • sort : 정렬 함수
arr = np.random.randn(8)
arr.sort()
  • where : 조건절 표현
np.where(condition, 2, 3)

ndarray slicing

  • [:] : 배열 전체
  • [0:1] : 0번째부터 1번째까지, 1번은 미포함
  • [:5] : 0번째부터 5번째까지, 5번 미포함
  • [2:] : 2번째부터 끝까지
  • [-1] : 제일 끝에 있는 배열값 반환
  • [:-1] : 0번째부터 끝까지

유니버셜 함수

  • 배열의 모든 요서에 대해 요소마다 특정한 함수를 적용하여 리턴하는 기능.

array 1개에 적용되는 함수

  • abs : 절대값 계산
  • sqrt : 제곱근 계산
  • square : 제곱 계산
  • exp : 무리수 e의 지수로 삼은 값을 계산
  • log : 자연로그
  • sign : 부호 계산(+ : 1, – : -1, 0 : 0)
  • ceil : 소수 첫 번째 자리에서 올림
  • floor : 소수 첫 번째 자리에서 내림
  • isnan : NaN 인 경우 True
  • isinf : 무한대인 경우 True
  • cos, cosh, sin, sinh, tan, tanh : 삼각함수 계산

array 2개에 적용되는 함수

  • add : 동일한 위치의 성분끼리 더함
  • subtract : 동일한 위치의 성분끼리 뺌
  • multiply : 동일한 위치의 성분끼리 곱함
  • divide : 동일한 위치의 성분끼리 나눔
  • maximum : 동일한 위치의 성분끼리 비교 하여 각각의 최대값 반환
  • minimum : 동일한 위치의 성분끼리 비교 하여 각각의 최소값 반환

array 에 적용되는 통계 함수

  • sum : 배열에 대한 모든 원소의 합
  • mean : 산술평균
  • std : 표준 편차
  • var : 분산

배열 집합 연산

  • unique(x) : 배열 x 에서 중복된 원소를 제거한 후 정렬
  • intersect1d(x,y) 배열의 교집합
  • union1d(x,y) : 배열의 합집합
  • in1d(x,y) : x의 원소중 y의 원소를 포함하는지여부 (boolean 반환)
  • setdiff1d(x,y) : 배열의 차집합
  • setxor1d(x,y) : 대칭 차집합

난수 생성

  • seed : 난수 발생기 시드를 지정
  • permutation ; 순서를 임의로 변경하거나 임의의 순열 반환
  • shuffle : 순서 섞음
  • rand : 균등분포에서 표본을 추출
  • randn : 표준편차가 2이고 평균값이 0인 정규분호 에서 표본을 추출

python

데이터 타입

  • 숫자형 : 500, 12345L, 1.23
  • 부울 : True, False
  • 문자열 : ‘aaa’
  • 리스트 : [‘aaa’, ‘bbb’]
  • 딕셔너리 : {‘aaa’ : ‘111’, ‘bbb’ : ‘222}
  • 튜플 : (‘aaa’, ‘bbb’)
  • 세트 : {1, 2, 3, 4}
  • 바이트
  • 바이트 배열

문자열 슬라이싱

  • s[시작:끝:증감]
  • 0 에서 부터 시작하고 끝부분에는 자기 번호 제외
 s = 'pandas'
&gt;&gt;&gt; s[0:1]
'p'
&gt;&gt;&gt; s[:2]
'pa'
&gt;&gt;&gt; s[-2:]
'as'
&gt;&gt;&gt; [::2]
'pna'

모듈 import

  • 모듈은 여러 코드를 묶어 다른 곳에서 재사용할 수 있는 코드 모음의 의미
  • dir() 함수로 모듈에 어떠한 함수 혹은 데이터가 들어 있는지 알 수 있음.
&gt;&gt;&gt; import math
&gt;&gt;&gt; dir(math)
  • 모둘 import 4가지 방법
    1. import <모듈>
    2. from <모듈> import <어트리뷰트>
    3. from <모듈> import *
    4. import <모듈> as <별칭>

표준 입출력

  • 화면으로 출력 시 print() 함수 사용
  • sys.stdout도 가능
  • 입력 시 input() 함수 사용

파일 입출력

  • open(file, mode)
  • mode
    • r – 읽기모드
    • w – 쓰기모드
    • a – 쓰기, 이어쓰기
    • + – 읽기, 쓰기
    • b – 바이너리 모드
    • t – 텍스트 모드(default)
&gt;&gt;&gt; f = open('text.txt', 'w')
&gt;&gt;&gt; print('file write', file=f)
&gt;&gt;&gt; f.close()