docker sshd 설정

# redhat 계열(centos) 리눅스에서 서비스 관리 프로그램 변화
# centos6  RHEL(RedHat Enterprise Linux)6
서비스 시작,중지 : service 서비스명 start|stop|restart|status
부팅시 서비스 등록 : chkconfig 서비스명 on|off
서비스 상태 확인 : chkconfig --list

# centos7, RHEL(RedHat Enterprise Linux)7
서비스 시작,중지 : systemctl start|stop|restart|status 서비스명
부팅시 서비스 등록 : systemctl enable|disable 서비스명
서비스 상태 확인 : systemctl list-unit-files

# 그리고 systemctl 은 systemd 데몬이 실행되고 있어야 한다.
예전 service 의 SysV(system5)의 init 스크립트를 systemd 로 대체하고 있다.
/usr/sbin/init -> ../lib/systemd/systemd

#####

# systemctl 실행시 systemd 가 실행중이지 않다면 아래 에러가 발생한다.
Failed to get D-Bus connection: Operation not permitted

# systemd 실행을 위해서
# (--privileged 옵션을 사용하지 않는다면) --tmpfs 옵션으로 컨테이너의 /tmp /run 를 tmpfs 로 마운트해야 한다.
# /sys/fs/cgroup 가 read only로 마운트돼있어야 한다.
# 호스트에 /sys/fs/cgroup 가 존재하지 않아도 된다.
# /sbin/init 가 PID 1 로 실행되도록 한다.
docker run --name centos7 --hostname centos7 -p 9022:22 --user root --tmpfs /run --tmpfs /tmp -v /sys/fs/cgroup:/sys/fs/cgroup:ro -d centos:7 /sbin/init

# 현재 도커 이미지 root 가 아니면 다음처럼 권한 에러가 발생한다.
# 이 경우 docker run 시 --user root 를 사용해야 한다.
docker logs -f centos7
Failed to create root cgroup hierarchy: Permission denied

# 컨터네이너 접속해서 systemd 확인
docker exec -it centos7 /bin/bash
ps -ef | grep systemd

# 컨테이너 삭제
docker rm -f centos7

# 참고
https://developers.redhat.com/blog/2016/09/13/running-systemd-in-a-non-privileged-container

#####

# docker sshd 를 사용하지 말도록 권하고 있다.
# https://jpetazzo.github.io/2014/06/23/docker-ssh-considered-evil
# 서비스가 아닌 개인 테스트 용도로 sshd 를 적용해 보자.
# sshd 설치
yum install -y openssh-server
# sshd 구동 및 상태 확인
systemctl start sshd && systemctl status sshd

# ysoftman 사용자 추가
useradd ysoftman

# ysoftman password 설정
passwd ysoftman

# 호스트에서 접속해보자
# 위에서 컨테이너 실행시 9022 -> 22(sshd) 로 바인딩해뒀다.
ssh ysoftman@localhost -p 9022

comments:

댓글 쓰기