반응형

(Docker)도커 - 리눅스O/S(Rocky, ubuntu)  컨테이너 설치 및 SSH 접속하기

 

리눅스를 설치하고 SSH 접속하는 방법은 아래와 같습니다.

  1.  docker full 리눅스버전 명령어로 리룩스 가져오기 및 실행하기
  2.  실행된 리눅스 컨테이너에 접속하여 OpenSSH를 설정 하고 접속 가능토록 하기
  3.  외부에서 컨테이너까지 접속하는데 방화벽등이 있다면 접속 허용해주기

 

Rokcy Linux(록키 리눅스) 컨테이너 설치 및 SSH 접속하기

현재 다운 받은 이미지가 하나도 없는 상태부터 진행하겠습니다.

docker images

 

docker full 명령어로 최신 Rocky Linux를 도커허브에서 가져옵니다.

docker pull rockylinux/rockylinux:latest

docker pull

 

docker run 명령어로 도커 이미지를 컨테이너로 실행하여 줍니다.

  • -d 옵션은 백그라운드 옵션입니다.
  • --privileged 옵션을 넣어주어야 록키 리눅스 컨테이너의 주요 자원에 접근이 가능해 집니다.
  • /usr/sbin/init 실행은 록키 리눅스 컨테이너에서 systemctl을 사용하기 위해 실행합니다.
  • 서버 2222포트로 접속시 -> 컨테이너 22포트로 포트포워딩(보내져) 컨테이너에 접속됩니다.
docker run -d --privileged --name rocky_v1 -p 2222:22 rockylinux/rockylinux /usr/sbin/init

docker run

 

docker ps 명령어로 프로세스가 정상적으로 올라왔는지 확인합니다.

docker ps -all

 

docker exec 명령어로 Rocky Linux 컨테이너로 접속을 합니다.

  • -it 옵션은 bash에 접속시 필수로 들어가는 옵션입니다.
  • -u 0 옵션은 bash 접속시 권한을 루트(0)으로 접속시켜 줍니다.
docker exec -itu 0 rocky_v1 /bin/bash

docker exec -itu 0

 

이제는 rockylinux 컨테이너에 접속이 되었습니다. 아래 명령어를 입력하여 필요한 패키지를 설치합니다.

(원하는 패키지가 더 있을 경우 추가로 설치하시기 바랍니다)

  • 패키지 관리지가 yum에서 dnf로 변경되었습니다. (yum도 사용은 가능합니다)
dnf upgrade -y

dnf install net-tools -y
dnf install openssh-server -y
dnf install passwd -y

 

먼저 루트의 패스워드부터 변경을 해줍니다. 너무 쉬운단어가 아닌 문자로 만드시기 바랍니다.

passwd

 

다음은 systemctl status sshd 명령로 ssh의 상태를 확인해 봅니다. 현재 상태는 inactive 상태입니다.

systemctl

 

systemctl start sshd 명령어로 sshd를 시작해 줍니다. 그리고 다시 상태를 확인해보면 active 상태인 것이 확인 됩니다.

systemctl

 

이제 ssh로 접속이 되는지 확인하겠습니다. 서버에서 도커로의 ssh접속부터 확인하겠습니다.

  1. exit 명령어로 록키 리눅스 컨테이너에서 빠져나와 서버로 돌아오기
  2. ssh root@localhost -p2222 명령어로 록키 리눅스 컨테이너에 ssh 접속해보기 (연결 문의시 yes)
  3. 록키 리눅스 컨테이너의 root 비밀번호를 입력하여 컨테이너 쉘 접속하기 

exit -> ssh접속 -> root의 passwd 입력

 

이제 외부에서 putty로 접속을 해보겠습니다.

만약 도커까지 도달하는 경로에 공유기, 서버등에 방화벽과 포트포워딩이 필요하다면 설정하시기 바랍니다.

putty 접속 성공

 

sftp 사용을 위해 파일질라로도 접속을 해봅니다.

파일질라 접속 성공

 

이제 록키 리눅스 컨테이너를 새로운 도커 이미지로 commit(저장)합니다. 이미지 목록도 확인합니다.

# docker commit 컨테이너명 저장할이미지명
docker commit rocky_v1 rocky_ssh

docker images

docker commit
docker images

 

 

Ubuntu Linux(우분투 리눅스) 컨테이너 설치 및 SSH 접속하기

docker full 명령어로 우분투를 가져오고 docker images로 목록을 확인합니다.

docker pull ubuntu
docker images

docker pull

 

docker run 명령어로 우분투 이미지를 컨테이너로 실행시키고 프로세스(PS) 상태를 확인합니다.

  • -it 옵션은 bash 실행을 위해서 들어가는 옵션입니다.
  • 1222 포트로 접속시 -> 22 포트로 포워딩
docker run -d -it --name ubuntu_v1 -p 1222:22 ubuntu
docker ps -all

docker run

 

docker exec 명령어로 우분트 리눅스 컨테이너 bash에 접속을 합니다.

docker exec -it ubuntu_v1 /bin/bash

docker exec

 

다음 명령어를 순차적으로 실행하여 필요한 패키지들을 설치합니다.

apt update && apt upgrade -y

apt install vim -y
apt install net-tools -y
apt install openssh-server -y
# 설치중 나라를 고르는 항목이 나올 수 있습니다.

 

먼저 passwd 명령어로 root의 패스워드를 변경해줍니다.

password

 

다음은 sshd_config 파일에 있는 내용중 PermitRootLogin 부분을 주석을 제거하고 yes로 변경합니다.

sshd_config의 PermitRootLogin yes로 설정

 

다음은 ssh 서비스를 시작합니다. 상태도 확인합니다.

service ssh start
service ssh status

service ssh start

 

이제 우분투 리눅스 컨테이너에서 exit 명령어로 빠져나옵니다. 서버에서 ssh 명령어로 우분투 리눅스 컨테이너로 접속을 해봅니다. 정상적으로 접속이 됩니다.

ssh 접속 성공

 

이제 외부에서 putty로 접속을 해보겠습니다.

만약 도커까지 도달하는 경로에 공유기, 서버등에 방화벽과 포트포워딩이 필요하다면 설정하시기 바랍니다.

putty로 접속 성공

 

만약 파일질라에서 알고리즘 어쩌구 하면서 접속이 안되는 경우가 있으신 분들은 최신버전의 파일질라를 재설치 후 접속하시기 바랍니다.

 

(Docker)도커 전체보기

 

'(Docker)도커' 카테고리의 글 목록

전산 관련 경험을 기록 하는 곳

reddb.tistory.com

 

반응형
반응형

(Docker)도커 - (Private Registry) 도커 개인 저장소에 저장(push) 및 가져오기(pull)

 

도커 이미지를 저장하고, 다른 호스트에서 가져다가 사용하는 방법에는 3가지 방법이 있습니다.

  1.  docker save 명령어로 저장 및 docker load 명령으로 로드
  2.  (Docker Hub) 도커 허브 사이트에 저장(push) 및 가져오기(pull)
  3.  개인 저장소(Private Registry) 컨테이너를 만들고 그곳에 저장(push) 및 가져오기(pull)

이번 포스팅에서는 지난 포스팅에 이어서 3번 방법을 포스팅하겠습니다.

 

 

CentOS에 도커 개인 저장소(Private Registry) 컨테이너 실행

먼저 CentOS에 이전 포스팅에서 작업했던 컨테이너와 이미지를 모두 제거해주고 깨끗한 상태에서 시작합니다.

비어있는 도커 이미지, 컨테이너

 

도커 허브에는 개인 저장소(Registry) 컨테이너 이미지가 존재합니다.

개인저장소 registry

 

run 명령어로 이미지를 다운로드하고 실행하도록 합니다.

(--restart 옵션은 컨테이너가 종료돼도 자동으로 재시작하는 옵션)

$ docker run -d -p 5000:5000 --restart always --name my_registry registry

registry 컨테이너 run

 

도커 허브에 로그인 후, 이전 포스팅에서 레파지토리에 push 해두었던 kkk1318/nodejs:ver_2 이미지를 pull 하고 이미지 목록을 확인합니다.

$ docker login

$ docker pull kkk1318/nodejs:ver_2

도커허브 로그인, 도커 pull, 이미지 목록 확인

 

이제 다운로드한 kkk1318/nodejs:ver_2 이미지를 (Private registry) 개인 저장소로 push 하기 위해,

먼저 tag 명령어로 이미지의 이름을 localhost:8000/nodejs로 변경해 줍니다.

($ docker tag 이전이미지명:tag 바꿀이미지명:tag)

$ docker tag kkk1318/nodejs:ver_2 localhost:5000/nodejs:ver_2

도커 이미지명 변경

 

이제 push 명령으로 (Private Registry) 개인 저장소인 localhost:5000 포트로 넣어 줍니다.

$ docker push localhost:5000/nodejs:ver_2

개인저장소로 push

 

이제 호스트의 localhost:5000/nodejs:ver_2 이미지를 삭제합니다.

$ docker rmi localhost:5000/nodejs:ver_2

호스트에서 이미지삭제

 

이제 (Private Registry) 개인 저장소에서 이미지를 pull 합니다.

인터넷을 통해서 다운로드하는 것이 아닌 같은 저장장치에서 가져오기 때문에 매우 빠르게 이미지가 생성됩니다.

$ docker pull localhost:5000/nodejs:ver_2

개인저장소에서 이미지 pull

 

도커 허브를 공짜 정책으로 이용하면 비공개 레파지토리 공간을 1개밖에 생성할 수 없습니다.

하지만 (Private Registry) 개인 저장소를 이용한다면 저장장치 공간만큼 이미지 저장이 가능합니다.

 

저는 자주 사용하는 이미지는 호스트에 보관하시고, 오랫동안 사용하지 않고 보관할 이미지들을 개인 저장소에 보관하고 있습니다.

 

마지막으로 (Private Registry) 개인 저장소에 저장되어 있는 이미지 목록과,

이미지 명의 태그 목록을 보는 명령를 입력하여 확인합니다.

$ curl localhost:5000/v2/_catalog
$ curl localhost:5000/v2/nodejs/tags/list

이미지목록, 이미지의 태그목록

(Docker)도커 전체보기

 

'(Docker)도커' 카테고리의 글 목록

전산 관련 경험을 기록 하는 곳

reddb.tistory.com

반응형
반응형

(Docker)도커 - (Docker Hub) 도커 허브 사이트에 저장(push) 및 가져오기(pull)

 

도커 이미지를 저장하고, 다른 호스트에서 가져다가 사용하는 방법에는 3가지 방법이 있습니다.

  1.  docker save 명령어로 저장 및 docker load 명령으로 로드
  2.  (Docker Hub) 도커 허브 사이트에 저장(push) 및 가져오기(pull)
  3.  개인 저장소(Private Registry) 컨테이너를 만들고 그곳에 저장(push) 및 가져오기(pull)

이번 포스팅에서는 지난 포스팅에 이어서 2번 방법을 포스팅하겠습니다.



도커 허브 가입 및 레파지토리 생성하기

먼저 도커 허브에 접속하고 ID, 이메일, 패스워드를 입력한 후 회원가입을 합니다.

https://hub.docker.com/

 

Docker Hub

We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy

hub.docker.com

회원가입

 

다음은 요금정책을 선택하도록 합니다. 저는 무료를 선택했습니다.

요금정책 무료 선택

 

이후 이메일로 확인 메일이 발송됩니다. 본인 이메일 계정에 접속하여 메일을 읽고 "Verify email address"를 클릭하고 로그인을 합니다.

메일 확인

 

로그인 후 상단에 레파지토리스 메뉴로 이동합니다.

레파지토리스 클릭

 

Create Repository 버튼을 클릭합니다.

레파지토리 생성

 

레파지토리 이름, 설명, 공공 또는 개인을 선택한 후 Create 버튼으로 생성합니다.

(참고로 무료 정책에서는 공공 레파지토리는 무한 생성 가능하지만, 개인용 레파지토리는 1개만 생성이 가능합니다)

개인용 레파지토리 생성

 

개인 레파지토리가 생성되었고, 호스트에 있는 도커 이미지를 도커 허브에 업로드하는 도커 push 명령어도 함께 안내해줍니다.

레파지토리 생성 완료

 

 

(Docker Hub) 도커 허브 사이트에 저장(push) 및 가져오기(pull)

이전 포스팅에서 만들었던 nodejs:ver_2 이미지를 push 해보도록 하겠습니다.

도커 이미지 목록

 

위에서 만든 레파지토리 주소는 kkk1318/nodejs:tag 였습니다.

도커 허브에 올릴 이미지 이름 또한 kkk1318/nodejs:tag로 변경해 주어야 합니다.

($ docker tag 기존이미지이름:tag 바꿀이미지이름:tag)

$ docker tag nodejs:ver_2 kkk1318/nodejs:ver_2

도커 tag로 이미지 이름 변경

 

변경된 이미지 이름(TAG)으로 생성되었습니다.

IMAGE ID를 보면 변경 전 이미지와 변경 후 이미지가 같은 ID인 것을 볼 수 있는데, 이는 원본 이미지를 복사한 것이 아니라 같은 이미지에 이름만 추가해서 목록에 추가 등록된 것 입니다.

(동일이미지 사용하는 2개의 다른 이름(TAG))

 

이제 도커 허브에 로그인을 해줍니다.

$ docker login

IP입력
PW입력

도커 로그인

 

그리고 도커 이미지를 push 해줍니다.

($ docker push 레파지토리와같은이미지명:tag)

$ docker push kkk1318/nodejs:ver_2

docker push

 

push가 완료 후 도커 허브에 레파지토리로 가서 새로고침을 하면 ver_2가 올라온 것이 확인됩니다.

레파지토리 정상 push

 

이제 다른 호스트인 CentOS로 접속합니다. 기존에 있는 이미지와 컨테이너를 모두 삭제한 상태입니다.

비어있는 이미지와 컨테이너

 

이제 도커 허브에 로그인합니다.

$ docker login

ID입력
PW입력

docker login

 

이제 이미지를 pull 명령어로 가져옵니다. 그리고 이미지 목록을 확인합니다.

($ docker pull 레파지토리명:tag)

$ docker pull kkk1318/nodejs:ver_2
$ docker images

docker pull

 

이제 pull로 가져온 이미지를 run명령어로 실행하고 브라우저로 접속하여 이전 포스팅에서 만든 node.js 파일이 정상 작동하는지 확인합니다.

$ docker run --name kkk1318_nodejs -d -p 8080:8080 kkk1318/nodejs:ver_2

docker run
node.js 정상작동

(Docker)도커 전체보기

 

'(Docker)도커' 카테고리의 글 목록

전산 관련 경험을 기록 하는 곳

reddb.tistory.com

반응형
반응형

(Docker)도커 - 도커 이미지 save 및 load 하기

 

도커 이미지를 저장하고, 다른 호스트에서 가져다가 사용하는 방법에는 3가지 방법이 있습니다.

  1.  docker save 명령어로 저장 및 docker load 명령으로 로드
  2.  (Docker Hub) 도커 허브 사이트에 저장(push) 및 가져오기(pull)
  3.  개인 저장소(Private Registry) 컨테이너를 만들고 그곳에 저장(push) 및 가져오기(pull)

이번 포스팅에서는 1번 방법을 먼저 포스팅하겠습니다.

 

 

docker save 명령어로 저장 및 docker load 명령으로 로드

이전 포스팅에서 생성한 nodejs:ver_2 이미지를 기준으로 작성하겠습니다.

이미지의 상세 내용은 아래 링크로 확인하시기 바랍니다.

https://reddb.tistory.com/181

 

(Docker)도커 - 도커 build, commit 명령어로 이미지 생성하기

(Docker)도커 - 도커 build, commit 명령어로 이미지 생성하기 도커 이미지를 생성하는 명령어는 2가지가 있습니다.  docker build 명령어  docker commit 명령어 1번은 도커 이미지 설정 파일인 Dockerfile을..

reddb.tistory.com

현재 보유중인 도커 이미지들

 

nodejs:ver_2 이미지를 nodejs2.tar 파일로 저장하겠습니다.

($ docker save -o 압축할파일명작명.tar 저장할이미지명)

$ docker save -o nodejs2.tar nodejs:ver_2

도커 이미지파일 압축 저장

 

nodejs2.tar로 압축된 이미지 파일을 다른 리눅스(CentOS 8)로 복사하겠습니다.

옮기는 방법은 여러 방법이 있겠지만 저는 sftp 방식으로 쉘에서 복사하겠습니다.

($ sftp -oPort=포트번호 계정명@아이피) 기본 22번 포트 사용 시 포트 생략 가능

sftp 접속

 

sftp에서 ls와 !ls 명령어를 실행해봅니다.

ls는 접속지(CentOS 8)의 폴더 목록이 나오고, !ls는 접속을 건 곳(ubuntu 20.04)의 폴더 목록을 보여 줍니다.

ls !ls

 

이제 put 명령으로 접속지에 파일을 업로드합니다. ($ put 파일명)

sftp> put nodejs2.tar

put 파일

 

파일을 받은 CentOS 8에서 ls로 파일이 정상적으로 온 것을 확인합니다.

ls

 

현재 CentOS 8에는 컨테이너도 이미지도 모두 없는 상태입니다.

비어있는 이미지와 컨테이너

 

이제 load 명령으로 nodejs2.tar 파일을 이미지로 로드하겠습니다.

($ docker load -i 압축된이미지파일명.tar)

docker load -i 파일명

 

이제 도커 이미지 목록을 확인하면 nodejs:ver_2 이미지가 목록에 조회됩니다.

도커 이미지 목록 조회

 

도커 run 명령어로 컨테이너를 생성하고, 브라우저를 통해 정상 작동하는지 확인합니다.

$ docker run --name nodejs_ver2 -d -p 8080:8080 nodejs:ver_2

정상작동

 

(Docker)도커 전체보기

 

'(Docker)도커' 카테고리의 글 목록

전산 관련 경험을 기록 하는 곳

reddb.tistory.com

반응형
반응형

(Docker)도커 - 도커 build, commit 명령어로 이미지 생성하기

 

도커 이미지를 생성하는 명령어는 2가지가 있습니다.

  1.  docker build 명령어
  2.  docker commit 명령어

1번은 도커 이미지 설정 파일인 Dockerfile을 만들어 설정 내용대로 이미지를 생성하는 명령어입니다.

2번은 도커 컨테이너를 원하는 데로 수정한 이후 컨테이너를 이미지로 생성하는 명령어입니다.

 

도커 컨테이너와 이미지가 없는 깨끗한 상태에서 작업을 시작하겠습니다.

비어있는 이미지, 컨테이너

 

 

docker build로 이미지 생성하기

node로 돌아가는 웹서버 이미지를 만들어 보겠습니다.

먼저 폴더를 하나 생성 후 생성한 폴더로 이동합니다.

$ mkdir nodejs
$ cd nodejs

폴더 생성, 이동

 

다음은 build 할 이미지가 컨테이너로 실행될 때 CMD로 자동 실행될 node.js 파일을 생성합니다.

서버를 여는 node.js 파일생성

 

다음은 도커 build에서 사용할 Dockerfile을 생성합니다.

$ vi Dockerfile

# 베이스 이미지
FROM node

# 라벨(관리자)
LABEL maintainer="reddb <reddb.tistory.com>"

# 생성되는 이미지로 파일 카피(호스트의 현재폴더/node.js 파일을 -> 이미지의 /루트로 카피)
COPY node.js /

# 이미지를 이용하여 컨테이너가 생성될 때 실행되는 명령어
CMD ["node", "/node.js"]

Dockerfile 생성

 

이제 도커 build 명령어를 실행합니다. -t 옵션은 태그 명령이고 태그 뒤에는 이미지명:버전명을 입력해야 합니다. 마지막 인자로 Dockerfile이 있는 '.' 현재 폴더를 반드시 넣어주어야 합니다.

$ docker build -t nodejs:ver_1 .

docker build

 

도커 이미지 목록을 확인하면, 내가 만든 nodejs:ver_1 이미지와 그걸 만들 때 사용한 베이스 node 이미지가 존재하는 게 확인됩니다.

$ docker iamges

docker images

 

내가 만든 nodejs:ver_1을 run 합니다. 실행 시 반드시 버전을 함께 입력해야 합니다. 버전을 입력하지 않으면 기본값인 latest가 자동 입력되어 이미지를 찾을 수 없다는 에러가 발생할 수 있습니다.

$ docker run --name nodejs_ver1 -d -p 80:80 nodejs:ver_1

docker run

 

이제 호스트(내 서버, 내 PC)에서 브라우저로 localhost:80으로 접속하면 node.js 파일에서 접속 시 응답 값으로 주도록 코딩해놓은 Hello nodejs가 보입니다.

localhost:80

 

 

docker commit로 이미지 생성하기

도커 컨테이너의 수정된 내용은 컨테이너가 증발(삭제)되버리면 모든 내용이 사라집니다. 
컨테이너에서 수정한 내용이 이미지에 영향을 끼치지 않기 때문입니다. 
하여, 수정사항이 있을때마다 수정된 컨테이너로 새로운 이미지를 생성해 두어야 
컨테이너가 삭제 됐을때 이미지를 통해서 컨테이너를 복구 할 수 있습니다.

먼저 nodejs_ver1 컨테이너에 bash로 접속하여 /node.js 파일 안에 "Hello nodejs" 문구를 "commit ver2"로 수정하겠습니다.

 

top 명령어로 nodejs_ver1 컨테이너를 살펴보면 root로 node 프로세스 하나만 실행되고 있는 걸 알 수 있습니다.

$ docker top nodejs_ver1

docker top

 

exec 명령어로 bash를 실행시키고 컨테이너 쉘로 접속합니다.

루트 폴더에서 ls 명령어로 node.js 파일이 있는 것을 확인합니다.

$ docker exec -it nodejs_ver1 /bin/bash
# ls

exec -it로 쉘접속

 

처음 쉘에 접속하면 노드 말고는 설치되어 있는 패키지가 없기 때문에 업데이트 후 vim 패키지를 설치해줍니다.

# apt-get update
# apt-get install vim

vim 설치

 

이제 vim으로 node.js 파일을 수정합니다. 

파일 안에 내용을 'hello nodejs'에서 'commit ver2'로 수정하였습니다.

웹서버 포트도 80에서 8080으로 수정하고 exit를 입력하여 호스트로 돌아옵니다.

node.js 파일 수정

 

현재 nodejs_ver1 컨테이너는 run 이후에 실행한 update, vim설치, node.js 파일 수정이 모두 적용된 상태입니다. 하지만 nodejs:ver1 이미지에는 영향을 끼치지 않기 때문에 만약 컨테이너를 종료(삭제)하면 여태까지 했던 모든 작업이 사라지게 됩니다.

 

그래서 nodejs_ver1 컨테이너의 수정 내용이 반영된 이미지를 생성해야 합니다.

이때 사용하는 명령어가 docker commit입니다.

 

먼저 현재 도커 컨테이너 목록과, 이미지 목록을 확인합니다.

컨테이너, 이미지 목록

 

다음은 commit 명령어로 컨테이너를 이미지로 생성합니다. 그리고 이미지 목록을 확인합니다.

($ docker commit 컨테이너명 만들이미지명:버전)

$ docker commit nodejs_ver1 nodejs:ver2
$ docker images

수정된 컨테이너를 nodejs:ver2 이미지로 생성

 

이제 만든 nodejs:ver_2 이미지로 nodejs_ver2 컨테이너를 실행하여 줍니다. 포트는 8080을 포워딩해 줍니다.

$ docker run --name nodejs_ver2 -d -p 8080:8080 nodejs:ver_2
$ docker ps -a

도커 컨테이너 실행

 

이제 브라우저로 locahost:80과 localhost:8080으로 접속해 봅니다.

그럼 변경된 내용이 잘 작동하는 것을 확인할 수 있습니다.

nodejs ver1, ver2 실행중

(Docker)도커 전체보기

 

'(Docker)도커' 카테고리의 글 목록

전산 관련 경험을 기록 하는 곳

reddb.tistory.com

반응형