* 절차 : Docker Network 신규 생성 > hostname 지정 > ssh key 통신 접속 수행
Docker Network 생성
$ docker network create --gateway 172.19.0.1 --subnet 172.19.0.0/16 home
# 확인
$ docker network ls
$ docker inspect home
- home bridge 신규 생성
- docker의 경우 신규 컨테이너 생성시 default 네트워크에 B클래스 대역 IP로 할당하는 것으로 보임
Docker Container 실행 및 SSH Key 접속
- 사전에 만들어 놓은 ubuntu와 jenkins container 를 활용하여
- docker run의 경우 container를 다시 만들고, 실행하는 거라 앞서 설정한 내용이 다 날아 갈 수 있으므로 commit 통해 이미지 생성하고 해당 이미지로 실행 할 수 있도록 함
실행 중인 container로 image 생성
# 실행 중인 전체 컨테이너 확인
$ docker ps -a
# 컨테이너 실행 중지
$ docker stop <컨테이너명 or 아이디>
# create a new image from container
$ docker commit <컨터이너명 or 아이디> <신규 이미지명>
# docker container remove
$ docker rm <컨터이너명 or 아이디>
# 생성된 이미지 확인
$ docker images
생성한 image 로 container 실행
jenkins와 배포용 ubuntu(=ubuntu1) container 실행시킬 때 네트워크 지정 및 정적IP 할당
# ubuntu1 container
$ docker run -it -d --privileged -p 8090:8090 \
--network home
--ip 172.19.0.11 \
--hostname ubuntu1 \
--name ubuntu1 \
my_ubuntu
# jenkins container
docker run -it -d --privileged -p 8080:8080 -p 50000:50000 \
-v /home/jenkins:/var/jenkins_home \
-u root \
--network home \
--ip 172.19.0.12 \
--hostname jenkins \
--name jenkins \
my_jenkins
-d : 백그라운드 실행
--previleged privileged 모드 실행
-p : 포트 포워딩 <host port> : <container port> // 8090포트는 이후에 build 결과물 실행후 접속용
-v : host와 container 폴더 경로 mount
--network : 네트워크 지정
--ip : IP 할당
--hostname : container hostname 지정
--name : container 명
my_ubuntu/my_jenkins : 기존 container를 베이스로 신규 생성한 image명
hostname 변경 확인
$ docker exec -it <컨테이너명 or 아이디> /bin/bash
$ hostname
- hostname명령어를 사용할 필요없이 command line에 보면 "계정@호스트명"이 출력되어 있다
- docker run option을 통해 hostname을 지정하여 시스템 설정을 직접 건드릴 필요가 없었다
패키지 설치
- 접속할 서버의 경우 openssh-server 설치 및 ssh (port 22) 프로세스가 구동되어 있어야 한다
- 클라이언트의 경우 openssh-client 설치
$ apt-get update && apt-get upgrade -y
$ apt-get install -y vim openssh-client openssh-server wget curl net-tools
SSH Root 로그인 허용 설정 변경
$ vim /etc/ssh/sshd_config
- 아래와 같이 PermitRootLogin yes 로 변경
SSH Key 생성
- 앞선 포스팅에서 ssh 접속시 비밀번호 입력을 하여 접속했었다.
- ssh key 생성 후 public key(*.pub)를 접속할 서버에 등록하여 비밀번호 없이 접속 가능하도록 함
$ ssh-keygen -t rsa
- 뒤에 옵션이 없어도 default로 rsa 로 생성되는 것으로 알고 있다. (참고. 생활코딩)
$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
# 컨테이너별 *.pub 키 등록
$ vim authorized_keys
- ~/.ssh 경로에 생성된 id_rsa.pub (공개키) 를 복사 붙여넣기
- (Point) 내가 접속하려는 서버에 생성된 *.pub키를 등록해줘야 함
개인키의 경우 소유자만 읽을 수 있도록 권한 수정
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_rsa
SSH 서비스 재시작
$ servier ssh restart
# 프로세스 확인
$ netstat -tnlp
- 공개키 등록 후 재기동 안해도 접속됨
SSH 접속
jenkins container -> ubuntu1 container 로 ssh 접속
# 방법1
$ ssh <hostname>
# 방법2
$ ssh <아이디>@<hostname or ip address>
- 아이디를 기재하지 않을 경우 root로 접속된 것을 확인 가능
scp명령어로 Docker Container 간 파일 전송
- jenkins container에서 ubuntu container로 임의 파일 전송 테스트 수행
# jenkins container 접속
$ docker exec -it jenkins /bin/bash
$ cd /home
# 임의 파일 생성
$ echo 'hello ubuntu1 container' > greeting.txt
# 파일 업로드 - 현재 경로의 greeting.txt 파일을 /home/ubuntu/ 디렉토리로 전송
$ scp greeting.txt ubuntu@ubuntu1:/home/ubuntu/
우측 ubuntu1 container로 잘 전송된 것을 확인
그외. ~/.ssh/config 설정
~/.ssh/config configuration file 에 접속 정보 관리하여 ssh 접속을 할 수 있다
개인적으로 실무에서 aws ec2/emr 서버 접속 정보를 해당 config 파일 통해 관리하고 사용했었다.
aws 서버가 수십 대인데 hostname을 서버별 지정하는 것은 비현실적이지 않나 싶다
신규 ubuntu2 container 생성(동일한 home 네트워크*)
# 신규 container 생성
$ docker run -it -d \
--network home \
--ip 172.19.0.13 \
--hostname ubuntu2 \
--name ubuntu2 \
my_ubuntu
$ docker exec -it ubuntu2 /bin/bash
# 키 생성
$ ssh-keygen -t rsa
# 권한 수정
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_rsa
# 접속 정보 설정
$ vim ~/.ssh/config
Host 명을 내쪽에서 임의로 지정하여 접속가능
# Configuration for a specific host (기본구조)
Host myserver
HostName <도메인 주소 또는 IP Address>
Port 22
User myusername
IdentityFile ~/.ssh/id_rsa
# 예시
Host test
HostName 172.19.0.11
Port 22
User ubuntu
IdentityFile ~/.ssh/id_rsa //private key
접속 확인
$ ssh test
//비밀번호 입력
- 비밀번호 매번 입력하는 것이 보안상으로 맞지 않나 싶다
참고
'공부 > DevOps' 카테고리의 다른 글
[Ubuntu] /bin/bash로 기본 shell 변경하기 (0) | 2023.07.15 |
---|---|
[Docker] Jenkins Build, Deploy, Execute Shell / 자동배포 환경 테스트 (4) (0) | 2023.07.15 |
[Docker] Container IP 확인 및 SSH 접속하기 (2) (0) | 2023.07.14 |
[Docker] Jenkins 설치 및 Github 연동 (1) (0) | 2023.07.08 |
[Docker] MySQL 5.7 설치 및 데이터 import (0) | 2023.04.11 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!