Docker Daemon 연결 방법 자세히 보기
Docker가 자주 사용하는 상해 명령문에서 대략적으로 말하자면 Docker는 클라이언트와 서버 두 부분으로 나뉘는데 본고는 클라이언트가 어떻게 서버를 연결하는지 소개할 것이다.
연결 방법
1. UNIX 도메인 소켓
기본값은 이 방식입니다./var/run/docker를 생성합니다.ck 파일, UNIX 필드 플러그인은 로컬 프로세스 간의 통신에 사용되며, 이러한 방식은 네트워크 플러그인보다 효율이 높지만, 국한성은 로컬 클라이언트만 접근할 수 있다는 것이다.
2. TCP 포트 스니퍼
서버 오픈 포트 수신:
dockerd -H IP:PORT
클라이언트가 지정된 IP 및 포트를 통해 서버에 액세스하는 경우: docker -H IP:PORT
이런 방식을 통해 누구나 노출된 IP와 포트만 알면 Docker 서비스에 마음대로 접근할 수 있다는 것을 알게 되는 것은 매우 위험한 일이다. Docker의 권한이 매우 높기 때문에 불법 분자들은 이로부터 서비스 호스트의 최고 권한을 얻을 수 있다.관련: 리턴 키 하나로 서버 한 대 해킹
3. 여러 개의 socket을 동시에 감청할 수 있다
ubuntu@VM-84-201-ubuntu:/usr/anyesu/docker$ sudo dockerd -H unix:///var/run/docker.sock -H tcp://127.0.0.1:2376 -H tcp://127.0.0.1:2377
...
INFO[0004] API listen on 127.0.0.1:2377
INFO[0004] API listen on /var/run/docker.sock
INFO[0004] API listen on 127.0.0.1:2376
TLS 보안 연결 설정
위에서 소개한 일반적인 HTTP 방식의 원격 연결은 매우 안전하지 않다. 해결 방법은 매우 간단하다. 바로 TLS 인증서를 사용하여 클라이언트와 서비스 측의 양방향 인증을 실현하여 안전성을 확보하는 것이다.
TLS 인증서 만들기(루트 인증서, 서버 인증서, 클라이언트 인증서)
cd /usr/anyesu/docker
# , shell , ip
vi tlscert.sh
스크립트의 내용은 다음과 같습니다.
#!/bin/bash
# @author: anyesu
if [ $# != 1 ] ; then
echo "USAGE: $0 [HOST_IP]"
exit 1;
fi
#============================================#
# , #
#============================================#
PASSWORD="8#QBD2$!EmED&QxK"
COUNTRY=CN
PROVINCE=yourprovince
CITY=yourcity
ORGANIZATION=yourorganization
GROUP=yourgroup
NAME=yourname
HOST=$1
SUBJ="/C=$COUNTRY/ST=$PROVINCE/L=$CITY/O=$ORGANIZATION/OU=$GROUP/CN=$HOST"
echo "your host is: $1"
# 1. RSA ,PASSWORD
openssl genrsa -passout pass:$PASSWORD -aes256 -out ca-key.pem 4096
# 2. RSA
openssl req -passin pass:$PASSWORD -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem -subj $SUBJ
#============================================#
# server #
#============================================#
# 3.
openssl genrsa -out server-key.pem 4096
# 4.
openssl req -new -sha256 -key server-key.pem -out server.csr -subj "/CN=$HOST"
# 5. tls ip , IP
echo subjectAltName = IP:127.0.0.1,IP:$HOST > extfile.cnf
# 6.
openssl x509 -passin pass:$PASSWORD -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
#============================================#
# client #
#============================================#
# 7.
openssl genrsa -out key.pem 4096
# 8.
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
# 9.
echo extendedKeyUsage = clientAuth > extfile.cnf
# 10.
openssl x509 -passin pass:$PASSWORD -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
#============================================#
# #
#============================================#
#
rm -f client.csr server.csr ca.srl extfile.cnf
#
mkdir client server
cp {ca,cert,key}.pem client
cp {ca,server-cert,server-key}.pem server
rm {cert,key,server-cert,server-key}.pem
#
chmod -f 0400 ca-key.pem server/server-key.pem client/key.pem
서버 구성 실행
#
chmod +x tlscert.sh
HOST_IP=127.0.0.1
./tlscert.sh $HOST_IP
# client , server
sudo cp server/* /etc/docker
#
sudo vi /etc/default/docker
# DOCKER_OPTS="--selinux-enabled --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H=unix:///var/run/docker.sock -H=0.0.0.0:2375"
# docker
sudo service docker restart
Ubuntu 16.04.2 LTS에서 DOCKER 정보OPTS가 적용되지 않는 문제 해결
이어서 이전의 방식으로 서버에 연결하는 데 오류가 발생했습니다. 이것은 TLS가 이미 효력이 발생했음을 의미합니다.
ubuntu@VM-84-201-ubuntu:/usr/anyesu/docker$ docker -H tcp://127.0.0.1:2375 version
Get http://127.0.0.1:2375/v1.29/version: malformed HTTP response "\x15\x03\x01\x00\x02\x02".
* Are you trying to connect to a TLS-enabled daemon without TLS?
올바른 액세스 방법:
# tls
docker --tlsverify --tlscacert=client/ca.pem --tlscert=client/cert.pem --tlskey=client/key.pem -H tcp://127.0.0.1:2375 version
# Docker API
curl https://127.0.0.1:2375/images/json --cert client/cert.pem --key client/key.pem --cacert client/ca.pem
#
sudo cp client/* ~/.docker
#
echo -e "export DOCKER_HOST=tcp://$HOST_IP:2375 DOCKER_TLS_VERIFY=1" >> ~/.bashrc
sudo docker version
클라이언트 인증서를 잘 보호해야 합니다. 이것은 서비스 측을 연결하는 증명서입니다.또한 루트 인증서의 개인 키도 잘 저장해야 누설되면 클라이언트 인증서를 발급할 수 있습니다.
인증 모드
1. 서비스 사이드 인증 모델
옵션
설명
tlsverify, tlscacert, tlscert, tlskey
클라이언트에 서버 인증서를 보내서 클라이언트 인증서가 지정한 CA(자체 서명 루트 인증서)로 발급되었는지 확인합니다.
tls, tlscert, tlskey
클라이언트 측에 서버 인증서를 보내며 클라이언트 인증서가 지정된 CA(자체 서명 루트 인증서)로 발급되었는지 확인하지 않습니다.
2. 클라이언트 인증 모드
옵션
설명
tls
서버 인증서가 공용 CA 기관에서 발급되는지 확인
tlsverify, tlscacert
서버 인증서가 지정된 CA(자체 서명 루트 인증서)에 의해 발급되는지 확인
tls, tlscert, tlskey
클라이언트 인증서를 사용하여 인증하지만 서비스 측 인증서가 지정된 CA(자체 서명 루트 인증서)로 발급되었는지 확인하지 않습니다.
tlsverify, tlscacert, tlscert, tlskey
클라이언트 인증서를 사용하여 인증하고 서비스 측 인증서가 지정된 CA(자체 서명 루트 인증서)로 발급되는지 확인합니다.
원격 구축 명령 정보
앞의 글에서 Docker Compose를 이용하여 용기를 구축하는 것을 소개했는데 오늘의 내용을 배운 후에 원격 Docker Daemon에 연결하여 구축할 수 있다. 그러나 주의해야 할 점은 구축에 필요한 프로필, 의존 파일 등은 클라이언트가 준비한 다음에 이 내용을 서비스 측에 전송하여 구축이나 용기를 실행해야 한다는 것이다.
또한 win10의 WSL에서도 Docker를 설치할 수 있다. (단지 초기 버전의 서브시스템 때문에 Docker 서버가 뛰지 못하고 Docker 클라이언트만 실행할 수 있다. 그동안의 창의자 업데이트는 개선되었지만 아직 시도하지 않았을 수도 있다) Docker 클라이언트를 통해 원격 Docker 서비스에 연결하여 Docker를 체험하는 척하는 것도 좋다.
참고 문장
시리즈 문장
Docker 학습 요약
Docker 일반 명령 설명
Dockerfile을 사용하여 미러 구성
Docker Compose를 사용하여 컨테이너 구성
Docker의 네트워크 모드
전재는 출처를 밝혀 주십시오.http://www.jianshu.com/p/7ba1a93e6de4
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.