본문 바로가기
프로그램

[ Docker ] Docker 를 간단히 찍먹 해 봅시다.

by Dog_발자 2023. 10. 20.
반응형

나의 Mac Pro에 Docker 설치 후 Centos7 버전을 설치하여 개발에 도움이 될지 살표보기로 하자 

docker을 찍먹 해보기 위하여 Mac에 설치하고 docker로 Centos 7을 설치해 보기로 하였다. 무작정 구글링 하면서 정리한 글입니다. 위험하오니 참고도 하지 말아 주십시오.

 

Docker에 centos를 설치해 주기 위해서는 이미지라는 것을 다운로드해야 한다.

찍먹이기 때문에 일단 이미지가 뭔지는 넘어가자.

 

1. 멋있어 보기기 위하여 cmd 창을 이용한다. docker를 설치할 때 전역으로 설치된 것인지 그냥 cmd 창에서 docker 명령을 내리니까 된다.

#>docker version 

Client:
 Cloud integration: 1.0.17
 Version:           20.10.7
 API version:       1.41
 Go version:        go1.16.4
 Git commit:        f0df350
 Built:             Wed Jun  2 11:56:22 2021
 OS/Arch:           darwin/amd64
 Context:           default
 Experimental:      true
.....

 

2. 그럼 centos 이미지 다운로드 해서 Mac에 docker 환경으로 centos를 설치해 보자. centos:7 은 7 버전을 지정해서 설치한다는 뜻이라고 한다. 명령어를 입력하면 뭔가 막 다운로드 한다. 

#>docker pull centos:7

2xxxxxxxx5: Pull complete
Digest: sha256:be65f488bxxxxxxxxxxxxxxxxxxx7b8d32916d6487418ea4
Status: Downloaded newer image for centos:7
docker.io/library/centos:7

3. 다운로드된 이미지를 확인한다. ( 이미지란 누군가 OS cd를 구워 놓은 것을 의미하나?? 모르겠다 :.) REPOSITORY에 centos라는 것이 추가되어 보인다.

#>docker image list

REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
docker/getting-started   latest    3e4394f6b72f   9 months ago   47MB
centos                   7         exxxxxxxxxxd   2 years ago    204MB

4. 이제 centos 이미지를 실행시키면 나의 Mac에서 centos 운영체계가 돌아간다고 한다.

#>docker run -d -it --name centos centos /bin/bash

[옵션설명]

-d	detached mode 흔히 말하는 백그라운드 모드
-p	호스트와 컨테이너의 포트를 연결 (포워딩)
-v	호스트와 컨테이너의 디렉토리를 연결 (마운트)
-e	컨테이너 내에서 사용할 환경변수 설정
–name	컨테이너 이름 설정
–rm	프로세스 종료시 컨테이너 자동 제거
-it	터미널 입력을 위한 옵션
–link	컨테이너 연결 [컨테이너명:별칭]

MacBookPro ~ % docker run -d -it --name centos centos /bin/bash
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
a1d0c7532777: Downloading  56.55MB/83.52MB
.....

// 뭔가 이상하다 .......
// 이미지를 확인해보니 centos latest 라고 또 생겼다 ... 위에 명령이 실행 명령이 아닌가?
#>docker image list
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
docker/getting-started   latest    3e4394f6b72f   9 months ago   47MB
centos                   7         eeb6ee3f44bd   2 years ago    204MB
centos                   latest    5d0da3dc9764   2 years ago    231MB

5. 그냥 넘어가려고 했는데 이건 이해를 해야겠네요. Docker 에는 이미지(Image)와 컨테이너(Container)라는 것이 있는데 서로 다른 개념이고. 각각의 역할과 기능을 이해하는 것이 중요합니다라고 AI 이가 설명해 주네요. 읽어는 보았는데 이해는 안 되네요. 일단 아래는 AI의 이미지와 컨테이너의 설명입니다

이미지(Image): 도커 이미지는 응용 프로그램을 실행하는 데 필요한 모든 것을 포함하는 
가볍고 독립적인 소프트웨어 패키지입니다. 이미지는 응용 프로그램의 코드, 런타임, 라이브러리, 
환경 변수 및 설정 등을 포함합니다. 이미지는 응용 프로그램을 실행하기 위한 읽기 전용 템플릿이며, 
여러 컨테이너에서 공유할 수 있습니다. 이미지는 빌드될 수 있고, 도커 레지스트리 또는 
다른 저장소에 푸시(push)하거나 풀(pull)할 수 있습니다.

컨테이너(Container): 이미지를 기반으로 생성된 실행 가능한 인스턴스입니다. 
컨테이너는 독립적으로 실행되며, 호스트 머신의 운영 체제와 다른 환경에서 실행될 수 있습니다. 
각 컨테이너는 이미지의 복사본이며, 동일한 이미지에서 여러 개의 컨테이너를 생성할 수 있습니다. 
각 컨테이너는 자체 파일 시스템을 가지며, 프로세스를 격리하고 리소스를 격리하여 독립적으로 
실행될 수 있습니다.

요약하면, 이미지는 응용 프로그램을 실행하는 데 필요한 모든 것을 포함하는 정적인 템플릿이며, 
컨테이너는 이미지의 실행 가능한 인스턴스입니다. 이미지는 읽기 전용이지만, 컨테이너는 쓰기 
가능한 측면이 있습니다. 도커를 사용할 때, 먼저 이미지를 빌드하고, 이후에 이미지를 기반으로 컨테이너를 
생성하여 응용 프로그램을 실행합니다.

6. 실행 중인 컨테이너를 확인해 보려면 

MacBookPro ~ % docker ps

CONTAINER ID   IMAGE     COMMAND       CREATED             STATUS         PORTS     NAMES
f69110bfe91f   centos    "/bin/bash"   About an hour ago   Up 2 minutes             centos

// 실행 중인 컨테이너로 들어가려면 ....
docker exec -it centos /bin/sh
sh-4.4# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

// 오호 ~~ 쉘 모드로 마끼고 ls 명령을 내려보니 centos 의 폴더 구조가 보이네요.
// 다시 맥으로 빠져 나오려면 ... exit ? 맞네요. 다시 맥 command 로 빠져 나와왔습니다.

sh-4.4# exit
exit
-MacBookPro ~ % 

// 그럼 다시 centos 컨테이너로 들어가서 환경 구성이 어떻게 되었는지 볼까요.
-MacBookPro ~ % docker exec -it centos /bin/sh

sh-4.4# ifconfig
sh: ifconfig: command not found

sh-4.4# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=37 time=53.1 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=37 time=115 ms

// 핑이 나가는걸 보니 인터넷으로 외부 접근이 가능할 것 같습니다.
// 그럼 여기 Centos 컨테이너 안에다가 저의 개발 환경을 설치 할 수 있을까요. 

cd /usr/local/src
sh-4.4# pwd
/usr/local/src

// wget 으로 아파치 설치 소스를 다운로드 받아보겠습니다.
sh-4.4# wget http://archive.apache.org/dist/httpd/httpd-2.2.25.tar.gz

sh: wget: command not found
//기본 설정이 아무것도 안된것 같습니다.

sh-4.4# yum update
CentOS Linux 8 - AppStream                                                                             35  B/s |  38  B     00:01
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist


sh-4.4# cat /etc/redhat-release
sh: $'\343\204cat': command not found
sh-4.4# uname -a
Linux f69110bfe91f 5.10.25-linuxkit #1 SMP Tue Mar 23 09:27:39 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

// 우선 Centos 서버 환경에서 작업하는것과는 뭔가 틀리게 보여지네요
// 우선 필요한 기능을 설정해야 제대로 사용이 될 것 같습니다.

 

개발 노트북 Mac에 개발 환경을 꾸미기 귀찮아서 서버에 바로 원격으로 붙어서 개발을 하고 있었는데. 서버의 환경과 같이 개발 환경을 만들 수 있을 것 같다는 기대감이 든다. 또 한 번 세팅한 도커 이미지를 저장하여 다른 환경에서도 재 사용 할 수 있을 뿐 아니라 개별적 컨테이너라 Nodejs 개발에 유용할 것 같다.

 

다음에는 리눅스 서버 ( Centos 6 ) 에 Docker를 설치해보아야겠다. 

반응형

댓글