오늘은 요즘 서버나 웹쪽과 관련된 개발을 하시면,

누구나 한번은 들어보셨을 Docker의 사용방법에 대해서 정리해 보도록 하겠습니다.

어떤 Framework를 이용하느냐에 따라서 세부사항이 조금은 달라지지만,

여기서는 NodeJS를 기준으로 하도록 하겠습니다.

 

1. Docker

이제 Docker없이는 배포를 말하기 힘들정도로 매우 중요한 역할을 하고 있습니다.

 

단어 자체의 뜻은 부두에서 컨테이너를 싣는 것과 관련된 일을 하는 노동자를 뜻하는데요.

비유적으로 사용된 의미일 텐데, 컨테이너라는 것을 싣는 것과 무슨 관련이 있는 것 같습니다.

 

소프트웨어 배포를 하는데 왜 컨테이너라는 의미를 사용한 것 일까요?

각각 다른 환경에서 소프트웨어를 빌드하고 배포하는데 엄청난 비효율이 발생하기 때문에,

이를 컨테이너라고 하는 독립적인 환경을 구성하고 다른환경에서도 해당 컨테이너를 이용하도록 하기 위한 것 입니다.

마치, 트럭, 기차, 배 등이 모두 컨테이너라는 격리되고 표준화된 이동수단을 이용해서 효율적으로 운송을 하는 것 처럼요.

 

 

좀 더 이해하기 위해서,

기존의 배포(Deploy)환경과 Docker가 나오고 나서의 배포환경을 비교하며 생각해 보겠습니다.

 

기존에는 서버에 개발한 프로그램을 Deploy할 때,

다양한 환경설정들을 해 주어야 했었는데요.

예를 들면, 집에서 NodeJS로 앱서버를 만들어서 Local에서 테스트를 다 거치고나서,

실제 AWS서버에 올린다고 해 보겠습니다.

그럼 NodeJS라든가 필요한 NPM모듈등이 존재하지 않으므로,

이들을 다시 다 설치해 주고,

AWS에 맞는 환경설정도 다 해주어야 합니다.

 

그런데 Docker가 생기고 나서는 이러한 설치 및 설정들을 할 필요가 없게 되었습니다.

왜냐하면, 집에서 서버 개발을 하고 로컬 테스트를 거치고 나서,

Docker앱으로 Build하여서 컨테이너를 만들어 주구요.

AWS에서는 Docker위에 만들었던 컨테이너를 Deploy하기만 하면 됩니다.

중간에 거쳤던 잡다한 설정은 다 필요없고,

집에서 사용하던 포트와는 다른 AWS의 OUTBOUND포트로 매핑만 시켜주면 됩니다.

다시 모듈을 설치하고 이런저런 설정을 할 필요가 없어지게 되는 것 이지요.

 

아래는 공식페이지에서 사용하고 있는 도표인데요.

서버의 OS위에, Docker가 존재하고,APP들의 컨테이너가 그위에 쌓이게 된다는 것 이지요.

 

 

 

2. Docker의 구성

Docker서비스는 크게 Docker서버와 Client, 그리고, DockerHub 및 라이브러리들로 구성되어 있다고 생각할 수 있는데요.

Docker 서버와 이에 접속해서 명령어를 사용하는 클라이언트가 먼저 잇을 것 이구요.

Docker Hub라고 하는 Github와 같은 Docker의 컨테이너를 저장하고 받을 수 있는 서비스가 있습니다.

 

Docker의 서버인 Daemon을 이용해서 컨테이너를 실행하게 되면,

컨테이너의 구성에 따라서 필요한 네트워킹 설정과 프로세스를 실행해주게 됩니다.

 

또한  Docker를 이용하도록 돕거나 Docker를 활용하는 수많은 플러그인들도 존재하고 있습니다.

이 글에서는 Docker의 설치와 실행 그리고 DockerHub에 업로드 하는 것 까지를 중심으로 알아보도록 하겠습니다.

 

3. Docker의 설치

Docker에서는 Mac, Window 뿐만 아니라, 다양한 Ubuntu, Centos 같은 다양한 LinuxOS나 AWS, Azure같은 큰 규모의

리눅스 기반의 클라우드 서버에 설치할 수 있도록 도와주고 있는데요.

먼저 로컬환경인 Mac, Windows에서의 설치방법을 알아보고,

Linux에서의 설치방법을 정리해 보겠습니다.

3-1. Mac, Windows 에서 설치

Docker는 Mac이나 Windows에 맞는 설치 파일들을 제공해 주고 있습니다.

이를 다운로드 받고 실행해 주기만 하면 됩니다.

 

 

설치가 되고 나면, 아래 명령어를 통해서 버전을 확인할 수 있습니다.

 

docker --version 

 

확인해보니, 19.03.8 버전이군요.

 

 

또한, docker info 명령어를 입력하면, 좀 더 자세한 정보를 얻을 수도 있습니다.

docker info 

 

 

3-2. Linux OS에서 설치

LinuxOS중에서도 Ubuntu버전에 Docker를 설치하는 방법에 대해서 정리해 보겠습니다.

여러가지 설치 패키지를 이용하는 방법이 존재하지만,

공식문서에 나와있는 방법을 이용하려고 합니다.

(https://docs.docker.com/engine/install/ubuntu/)

 

먼저 설치된 Docker라도 update는 필요하므로,

패키지 설치전 update명령어는 습관적으로 하고 시작하겠습니다.

 

sudo apt-get update

 

A. Docker Repository Setup

가장 먼저 하는 것은 Docker의 Repository와 관련한 패키지들을 설치 하게 되는데요. 다음 명령어를 이용해 4개의 패키지들을 설치해 줍니다. 참고로 apt-transport-https는 패키지 관리자가 https를 통해 데이터에 접근할 수 있도록 해 주는 것 입니다.

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

 

그리고 나서는 GPG Key를 추가하기 위해 아래 명령어를 사용해 줍니다.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

 

OK가 나오는 것을 확인했다면,

Repository에 경로를 추가하는 명령어를 아래와 같이 추가해 줍니다.

참고로, lsb_release -cs변수는 ubuntu의 배포버전을 알려줍니다. 저의 경우는 focal이더군요.

 

echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

 

 

B. Docker Engine  설치하기

이제 드디어 아래 명령어로 Docker Engine을 설치해 줍니다.

그런데 Linux버전에 따라서는 apt-get이 아니라 수동으로 설치를 해 주어야 하는데요.

 

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

 

설치가 완료되었다면,

docker --version 으로 설치된 버전을 확인해 봅니다.

 

 

정상적으로 설치된 것을 확인할 수 있습니다.

 

맥이나 UI에서는 GUI로 바로바로 Docker의 실행여부를 바로 확인하고 수정할 수 있는데요.

AWS같은 리눅스 환경에서는 Docker가 실행되고 있는지의 여부를 다음 명령어로 확인해 볼 수 있습니다.

 

sudo systemctl status docker

 

실행하면 아래와 같이, active 상태가 나옵니다.

 

 

참고로 docker는 Unix Socket에 바인드되어 있기 때문에, 실행시키는 데는 root권한이 필요합니다.

따라서 매번 sudo키워드를 사용해 주어야 하는데요.

이것을 피하기 위해서는 두가지 방법이 있는데요.

 

첫번째는 아래 명령어로 root 계정으로 전환해서 사용하는 단순한 방법인데요.

그래도 결국은 sudo su명령어를 한번은 입력해야 합니다.

sudo su

두번째 방법은,

먼저 docker라고 하는 Unix그룹이 없다면, 아래 명령어로 생성해 줍니다.

기존에 존재한다면, "group 'docker' already exists"라고 나옵니다.

sudo groupadd docker

 

다음으로, 아래 명령어를 이용해, 현재 계정을 docker그룹에 포함시킨 후에,

서버를 재시작 해 주면 됩니다.

sudo usermod -aG docker $USER

재시작후에 "docker info" 명령어가 정상적으로 동작한다면 된 것 입니다.

 

아래에서는 본격적으로 이미지와 컨테이너를 만들어 빌드하는 방법에 대해서 정리해 보겠습니다.

 

4. 이미지 및 컨테이너의 생성과 실행 과정

Docker의 Container를 만들기 위해서는, 이미지가 필요하구요.

이미지를 생성하기 위해서는 Dockerfile이 필요합니다.

Dockerfile, 이미지, 컨테이너를 만들기 위해서 아래와 같은 과정을 거치게 됩니다.

 

  1. Dockerfile 생성과 작성
    • Docker이미지를 어떻게 만들것인지를 설정
  2. 이미지 생성
    • Build 명령어를 이용해서 생성
  3. 컨테이너 생성
    • 만들어진 이미지를 가지고 Container를 생성해 실행
  4. DockerHub에 업로드
    •  Container를 업로드
  5. DockerHub에서 받아서 실행
    • 배포하고자 하는 곳에서 DockerHub에서 받아서 실행

 

 

Docker이미지를 어떻게 만들것인지에 관한 설정

그럼 기반이 되는 Dockerfile을 만드는 방법부터 보도록 하겠습니다.

 

4-1. Dockerfile 파일 만들기

먼저 할 일은 해당 프로젝트로 이동하는 것 인데요.

로컬이라면 프로젝트 디렉토리를 만들고,

해당 디렉토리로 이동하면 될 것이구요.

 

aws라면 "cd /home/ubuntu"로 홈으로 이동한후,

"mkdir testDocker"와 같이 프로젝트 디렉토리 만든 후에,

cd 명령어로 이동해 주어야 하겠지요.

 

이제 확장자가 없는 Dockerfile을 생성해 줍니다.

로컬 컴퓨터라면 에디터로 파일을 만들어 주면 되구요.

AWS같은 터미널 상태라면 아래 명령어를 이용해 주면 되겠지요.

(사용하기 어려운 vi대신 nano를 사용해 주어도 됩니다.)

 

sudo vi Dockerfile

 

파일생성시 주의할 것은 Dockerfile의 D는 대문자라는 것 이구요.

아래와 같이 Dockerfile을 만들어서 작성을 할 텐데요.

들어갈 내용들에 대해 하나씩 알아보도록 하겠습니다.

 

 

 

A. nodeJS 이미지 가져오기

From 키워드는 기본 이미지로 DockerHub에 나와있는 node의 slim버전 이미지를으로 사용하겠다고 하는 것 입니다. 

이미지에는 이미 Node.js와 NPM이 설치되어 있으므로, NPM을 따로 설치할 필요는 없습니다.

FROM node:current-slim

 

NodeJS의 현재 홈페이지로 가보면, 14버전이 LTS의 가장 최신버전임을 알 수 있습니다.

 

 

 

아래와 같이 해주면 LTS버전의 12버전을 DockerHub에 있는 버전의 이미지로 빌드한다는 것 입니다.

아래링크에서 지원하는 최신버전의 NodeJS를 확인할 수 있는데요.

 

>> hub.docker.com/_/node

 

다행히 14.16.1 이 있는데, 이 버전을 사용하려고 하면 아래와 같이 기술해 주면 됩니다.

 

FROM node:14.16.1

 

이로인해서 Docker위에 NodeJS가 올라가도록 할 수 있었습니다.

 

 

B. 작업 디렉토리 명시

WORKDIR이라는 키워드로 작업 디렉토리를 명시할 수 있습니다.

RUN, CMD, ENTRYPOINT, COPY and ADD등이 실행되는 장소를 지정하는 것 인데요.

존재하지 않을 경우, 해당 디렉토리를 생성해 줍니다.

아래에서는 /usr/src/app 이라는 디렉토리를 사용하였습니다.

WORKDIR /usr/src/app

 

C. package.json에 따른 모듈 설치

package.json에 적혀있는 dependency가 있는 모듈들을 현재 프로젝트 디렉토리에 설치하기 위해 다음 명령어를 사용해 줍니다.

COPY package*.json .

 

D. ENV 환경설정

환경설정 값들을 여기서 지정할 수 있는데요.

NODE_ENV값이 production을 가르키도록 지정해 줍니다.

다른 값으로는 development가 있는데요.

 

한가지 주의할 점은, NODE_ENV를 production으로 하면,

package.json에 있는 devDependencies가 설치가 되지 않아서,

MODULE_NOT_FOUND같은 에러가 발생할 수 있습니다.

ENV NODE_ENV production

 

컨테이너 실행 중 인터랙션이 생기면,

거기에 입력할 수 없기 때문에 아에 그것을 방지해 주어야 하는데요.

아래와 같이 환경값을 넣어줍니다.

ENV DEVIAN_FRONTEND=noninteractive

 

추가적으로 ENV로 변수값을 만들어서 RUN에서 사용할 수도 있습니다.

지정한 변수값은 {변수}와 같은 형태로 불러올 수 있구요.

 

E. image파일시스템안에서 실행될 command

아래 명령어로 실행될 명령어를 미리 넣어주고요.

명령어가 여러개 일 경우도 다음 줄에서, RUN으로 시작후 명령어를 넣어주기만 하면 됩니다.

RUN npm install

 

D. 접속할 포트 번호

앱이 8080포트에 바인딩 되어 있다면, EXPOSE 키워드를 사용해서 docker 데몬에

아래와 같이 해당포트로 매핑해 줍니다.

컨테이너에 접속할 때, 8080포트를 사용한다는 말이지요.

EXPOSE 8080

 

D. 설치 종료후 실행할 명령어

컨테이너가 위에서 명시된 설치등을 종료후,

런타임을 정의하는 CMD로 앱을 실행하는 명령어를 정의해 주는데요.

nodejs 서버가 실행되도록 npm start를 다음과 같이 입력해 주면 됩니다.

CMD ["npm", "start"]

 

참고로, npm start명령어는 package.json파일의 scripts에 있는 start 명령어를 실행해 주고요.

만약 start 명령어를 따로 설정하지 않았다면 node server.js가 실행되도록 합니다.

 

E. 앱의 소스코드 복사

아래 코드로 Docker이미지 안에 앱의 소스코드가 복사되도록 합니다.

COPY . .

 

F.  dockerignore파일

 

마지막으로 한가지 추가할 파일이 있는데요.

".dockerignore" 파일이 그것입니다.

이 파일을 이용해서, Docker 이미지에 로컬 모듈과 디버깅 로그가 복사되는 것을 막아주어야 합니다.

node_modules
npm-debug.log

 

 

4-2. Docker Image만들기

이제 준비가 다 되었으니, Docker Image를 만들어 주어야 하는데요.

이를 위해서는 Build명령어를 사용하면 됩니다.

-t 옵션은 tag를 적어주는 것으로, 저는 이름은  test, tag명은 그냥  tag라고 하였습니다.

마지막에는 빌드 위치를 명시해 주는데, 여기서는 '.'을 사용해서 현재위치라고 하였습니다.

docker build -t test:tag .

 

다 만들어진 Image에 대해서는 아래 명령어로 확인해 볼 수 있는데요.

docker images

 

실행해 보면 아래와 같이 image가 만들어 진 것을 확인할 수 있습니다.

 

 

이렇게 생성한 이미지를 지우고 싶을 때는 아래 명령어를 이용해 주면 됩니다.

 docker rmi -f <이미지 ID>

아무래도 이미지 용량이 꽤 큰편이기 때문에,

필요하지 않는 이미지는 바로바로 지워주는 것이 좋습니다.

 

4-3. 컨테이너 생성 및 실행

이제 거의 다 되었네요.

이미지 파일을 run 명령어를 이용해서 컨테이너를 생성하고 실행할 수 있습니다.

 

docker run <image 이름>

 

"-p" 옵션을 통해서, 아웃바운드와 인바운드포트를 매핑할 수 있는데요.

예를 들어서, 아래와 같이 한다면, 80포트로 연결들어온 것을 3000포트로 매핑해준다는 것 입니다.

 

docker run -p 80:3000 <이미지이름:tag이름>

 

위에서는 8080포트로 매핑해 주어야 하는데요.

 

만약 AWS에서 설정한다고 가정한다면, Dockerfile에서 설정한 port와 AWS에서의 열어놓은 port를 연결해 주어야 하겠지요.

AWS의 보안규칙중 인바운드 규칙에서, HTTP의 8080포트를 열어주어야 하구요.

AWS에서의 outbound port도 80이라고 되어 있어야 하겠습니다.

 

왼쪽80이 공개된 Outbound의 AWS의 포트이고, 오른쪽이 컨테이너의 포트인 8080입니다.

보통 왼쪽에서 오른쪽으로 생각하게 되는데요.

여기서는 반대로 왼쪽이 유저가 접속하는 AWS의 Outbound포트구요. 오른쪽이 컨테이너의 포트입니다.

저는 docker run -p 80:8080 test:tag 라고 작성하였습니다.

특정한 tag를 작성할 경우는 "이름:tag"로 실행시켜 주어야 합니다.

 

docker run -p 80:8080 <이미지 이름>

 

 

컨테이너가 올라가고 서버가 정상적으로 동작하는 것을 볼 수 있습니다.

 

 

-d로 이미지를 실행하면 분리 모드로 컨테이너를 실행해서 백그라운드에서 컨테이너가 돌아가도록 할 수 있습니다.

docker run -p 80:8080 -d <이미지 이름>

 

만약, framework에 따라서 실행하는 디렉토리를 연결해 주어야 할 필요가 있을 경우,

-v옵션을 사용해 줄 수 있는데요.

아래와 같이 사용해서 넣어주면 됩니다.

docker run -p 80:8080 -v <호스트 디렉토리> <컨테이너 디렉토리> <이미지 이름>

 

4-4. 컨테이너의 Stop과 Start

docker run명령어를 통해서 컨테이너를 생성하고 실행할 수 있다는 것을 알았습니다.

해당 컨테이너 run명령어로 실행된 상태에서 exit를 입력하거나 ctrl+C를 해주면,

컨테이너도 정지가 되어집니다.

 

이렇게 정지된 컨테이너는 다음 명령어로 시작할 수 있습니다.

docker start <컨테이너 이름 또는 ID>

start를 restart로 대체하면 컨테이너를 재시작할 수도 있습니다.

 

이렇게 시작된 컨테이너는 run으로 시작할 때처럼 shell이 별도로 보이지 않습니다.

이럴 경우 필요하다면 아래 명령어를 사용해 주면 됩니다.

docker attach <컨테이너 이름 또는 ID>

 

컨테이너를 정지하는 것은 stop명령어를 이용해 주면 됩니다.

docker stop <컨테이너 이름 또는 ID>

 

4-5. 컨테이너의 삭제

현재 Docker머신에 존재하는 모든 컨테이너를 리스트 할 수 있는 명령어는 다음과 같습니다.

docker ps -a

 

-a를 빼면, 현재 동작중인 docker와 매핑된 포트만 볼 수 있겠지요.

 

docker ps -a의 리스트에서 컨테이너 ID를 확인하고 rm명령어로 삭제해 줄 수 있습니다.

대신 컨테이너가 삭제가 되더라도 이미지 파일은 남아있게 됩니다.

이것은 images명령어로 확인할 수 있지요.

docker rm <컨테이너 ID>

 

현재 동작하는 모든 컨테이너를 삭제하고자 한다면 아래 명령어를 사용해 주면 되는데요.

주의 할 것은 docker앞에 있는 기호는 백틱(`)기호라는 것 입니다.

-f는 강제적으로 컨테이너를 삭제해 주는 옵션입니다.

docker rm -f `docker ps -a -q`

 

컨테이너 삭제 이후에 필요하지 않은 이미지들도

위에서 했던 것 처럼, 아래 명령어로 삭제해 주면 됩니다.

docker rmi -f `docker images`

이미지는 rmi명령어 이고, 컨테이너를 삭제할 때는 rm이라는 점에 주의하면 되겠네요.

 

5. DockerHub에 연동

컨테이너를 생성하고 삭제하는 것 까지 알아보았는데요.

DockerHub에 등록하기 전에 보통은,

Github에 해당내용을 Commit 해서 Push를 해 줍니다.

작업이 끝나면, Github에는 Dockerfile과 NodeJS소스코드들이 들어가 있는 상태가 될 텐데요.

 

5-1. Why DockerHub

그런데 한가지 궁금한 점이, Github에 올렸는데 왜 또 DockerHub에 올려야 되는 것일까요?

그렇게 하는 중요한 이유 중 하나는 DockerHub에서 Github를 참조해서 소스코드가 변경되면,

새로운 이미지가 빌드되도록 할 수 있기 때문입니다.

이것은 특히나, 용량이 큰 이미지를 빌드해서 배포할 곳에 넘기지 않아도 된다는 면에서,

더욱 좋은 기능이 되겠습니다.

 

5-2. 무료 or 유료

DockerHub는 무료로 쓸 수 있지만,

private한 Repository는 1개만 쓸 수 있습니다.

더 많은 private Repository를 쓰려면 유료 모델을 이용해야 합니다.

이부분은 개인 개발자들한테는 조금 아쉬운 부분일 수 있겠네요.

 

5-3. Github or Bitbucket 링크

우측 상단의 프로필의 드롭다운 메뉴에서 AccountSettings를 클릭한 다음,

Linked Accounts를 선택한 다음, 하단의 Github혹은 Bitbucket 우측의 Connect를 클릭해서,

로그인을 해 주면 연동이 됩니다.

 

 

 

연동이 되면 아래와 같은 화면을 볼 수 있습니다.

Authorize docker버튼을 누르면 완료가 됩니다.

 

 

5-4. Repository 생성

DockerHub에서 회원가입을 한 후에,

우측 상단 메뉴에서 Repository를 클릭하면 생성할 수 있는 버튼이 아래와 같이 나오는데요.

 

 

이제 CreateRepository버튼을 눌러서 다음과 같은 화면에서 Repositroy를 만들어 줍니다.

Repository이름을 적어주고, Private을 선택해 준 다음,

하단의 optional에서 위에서 link한 connected라고 써져있는 Github아이콘을 선택해 줍니다.

 

 

Github아이콘을 클릭하면, 아래 이미지와 같은 화면을 볼 수 있는데요.

 

5-5. Create and Build

드롭다운 메뉴에서,

Dockerfile이 들어있는 Github의 계정과 Repository를 선택한 후에,

하단의 BuildRules +를 선택해서,

이름과 TAG등을 정의해 주고 활성화 된, Create & Build 버튼을 클릭해 줍니다.

 

얼마후에, Repository의 Builds탭을 보시면 아래와 같이 Build가 성공한 것을 볼 수 있습니다.

여기서, Dockerfile의 내용과 Build logs를 아래와 같이 볼 수 있습니다.

 

 

이제, DockerHub를 통해서 바로 이미지를 빌드할 수 있게 되었는데요.

Github계정이 계속 링크되어있기 때문에,

Dockerfile을 변경해서 Github에 커밋해주면 계속 변경사항에 따라서,

새로운 이미지가 빌드 되어 집니다.

소스코드 폴더에 이미지를 가지고 있을 필요가 전혀 없다는 것을 알 수 있네요.

 

대신 한가지 생각해야 할 것은 빌드속도가 로컬 컴퓨터에서 하는 것 만큼 빠르지는 않다는 점과

DockerHub클라우드 서버 상태에 따라서 문제가 발생할 수도 있다는 점 입니다.

 

5-6. DockerHub에서 내려받기

DockerHub에서 빌드하는 것 까지 해 보았는데요.

이제 그럼 배포하는 곳에서,

내려받아서 사용하도록 하기만 하면 될 텐데요.

 

우선 DockerHub에서 우측 상단에 보면 아래 이미지와 같이,

push커맨드를 사용할 때 어떻게 해야하는지 나와있는데요.

이 Repository주소와 tag이름등을 이용해서,

pull받을 수 있습니다.

 

 

 

이제 AWS같이 배포하려는 곳에서,

위에서 나온 repository주소와 tag이름을 가지고 아래와 같이 해 주면 pull을 받을 수 있겠지요.

 

docker login
docker pull <Repository주소:tagname>

 

실행해 보면 파일이 다운로드 되구요.

"docker images" 명령어를 실행해보면, 저희가 Build하지도 않았는데,

DockerHub의 클라우드에서 빌드된 이미지가 생성되어 있는 것을 알 수 있습니다.

이제 저희는 위에서 정리한 3-3. 컨테이너 생성 및 실행을 참조하여서,

run 명령어로 실행만 해주면 바로 서버가 실행될 수 있겠지요.

 

한가지 주의할 것은 run명령어로 실행할 이미지 이름은 docker images명령어에서 확인할 수 있는 것처럼,

dockerhub의 Repositroy주소: tagname으로 되어 있습니다.

불편하시면, docker images명령어로 확인한 후 복사해서 사용하면 되겠지요.

 

5-7. repository의 삭제

해당 repository를 삭제하기 위해서는 아래와 같이,

settings의 가장 하단에서 Delete repository를 해주기만 하면 됩니다.

 

 

6. Linux에서 Docker 실행시의 팁

Linux에서 Docker를 항상 실행되도록 하기 위해서는,

부팅시에도 실행되도록 하면 될 텐데요.

ubuntu 14.1 이상버전에서는 systemd를 이용해서 부팅시 실행할 프로그램들을 설정할 수 있습니다.

 

6-1. 부팅시 Docker 실행

Docker가 서버 부팅시에 실행될 수 있도록 하기 위해서 다음 명령어를 사용하면 됩니다.

sudo systemctl enable docker

 

반대로 이를 해제하려면 dialble명령어를 아래와 같이 실행해 줍니다.

sudo systemctl disable docker

 

6-2. Docker내부 Shell에 접속

docker의 컨테이너 내부 쉘에 접속하는 방법에 대해서도 알아보겠습니다.

먼저 빌드된 docker container의 id 를 알아내기 위해서, 아래 명령어를 사용해 줍니다.

docker ps -a

 

그리고 나서, docker exec 명령어를 -it 을 붙여주고 나서, 위에서 찾은 id를 넣어주고,

마지막 인자로 shell 을 실행시키도록 bash를 넣어줍니다.

docker exec -it <컨테이너 id> /bin/bash

 

그럼 해당 컨테이너의 root계정으로 쉡에 접속할 수 있습니다.

나올때는 exit를 입력해 주면 됩니다.

 

7. 정리

Docker와 DockerHub를 사용하는 방법에 대해서 정리해 보았는데요.

여러개의 Docker Container를 실행해도록 도와주는 툴인 Docker Compose에 대한 글은 아래 글을 참조해 주시구요.

>> Docker Compose로 NodeJS, Nginx 를 한번에 설치하기 # YAML

 

NodeJS에 관한 Best-Practicse에 관해서 정리한 사이트가 있는데,

여기도 참고하면 좋을 것 같습니다.

https://github.com/nodejs/docker-node/blob/master/docs/BestPractices.md

 

또한, DockerFile에 대한 Docker의 공식문서 Reference는

아래링크에서 볼 수 있습니다.

https://docs.docker.com/engine/reference/builder/

 

ubuntu에 Docker설치하는 방법은 버전이 업데이트되면서 변경될 수 있으므로,

아래 링크를 참조해 주세요.

docs.docker.com/engine/install/ubuntu/

 

Docekr와 관련된 더 좋은 내용들은 이 글에서 업데이트 하도록 하겠습니다.

 

728x90
  1. 미니멀리 2020.04.14 11:14 신고

    좋은정보 잘보고 갑니다. IT어린이라서...자주 와서 참고하겠습니다.

+ Recent posts