728x90

docker 설치 중 오류를 발견했다. 

 

 

$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

 

File "/bin/yum-config-manager", line 135 except yum.Errors.RepoError, e: ^ SyntaxError: invalid syntax

 

 

- Python 2.x 와 Python 3.x의 문법 차이로 인한 문제이다.

   (yum-config-manager가 Python 2.x 구문을 사용하여 작성된 스크립트인데, 현재 시스템에서 기본 Python이 3.x로 설정되어 있어서 발생하는 문제)

- yum-utils 패키지를 재설치하고, yum-config-manager를 다시 사용할 수 있는 방법을 찾아야 한다.

 

 

1. yum-utils 패키지 설치

sudo yum install -y yum-utils

 

: yum-config-manager를 사용할 수 있도록 한다.

 

 

 

2. yum-config-manager 재실행

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

 

 

 

3. Docker 설치

 

$sudo yum install -y docker-ce docker-ce-cli containerd.io

$sudo systemctl start docker
$sudo systemctl enable docker

$sudo systemctl status docker

728x90

본 포스팅은 동빈나 님의 Docker 활용 및 배포 자동화 실전 동영상을 보고 정리한 글입니다. 

 

 

 

환경 : aws ec2 인스턴스 서버 빌려서 주피터노트북 연동하여 쓰고 있습니다!

 

df -h : 도커 설치 전 우리의 메모리가 얼마나 사용이 가능한지 체크

curl 을 이용해 docker 를 설치해주고, 그 후 내용을 apt 기능을 위한 리스트에 추가!

도커 설치

 

 

Dockerfile 작성하기

 

위에서 도커 설치를 모두 마친 후,

홈 디렉토리로 이동해 example 디렉토리 생성 후 sudo vi Dockerfile. (도커파일은 항ㅅ아 Dockerfile 이라는 이름을 가지고 있어야 한다.)

 

server 이미지는 ubuntu 18.04 를 사용

작성자

 

image가 올라갔을 때 수행되는 명령어들.

-y 옵션을 넣어서 무조건 설치가 가능하도록 한다. 

 

아파치가 기본적으로 80포트를 사용하므로 expose 를 이용해 apache server 로 접근이 가능하도록 한다.

 

명령어가 다 수행되면 도커가 곧바로 종료되기 때문에 아파치가 항상 실행중인 상태로 만들어준다. 

 

 

 

 

 

 

 

 

 

작성된 Dockerfile을 빌드해보도록 하겠습니다. docker image의 이름은 example이고 현재 경로(.) 에서 수행하도록 합니다.

sudo docker build -t example .

 

 

 

docker images 명령어를 통해 확인해보도록 합니다.

sudo docker images

정상적으로 image 만들어진 것 확인 가능!

 

만약 none 이라고 나오면 image 생성 시 무언가 잘못되었다는 것을 의미한다. 

참고로 도커파일 생성할 때 EXPOSE 80 이라는 명령어를 적을 때 # 을 붙이면 안된다. (주석불가)

 

 

 

 

Dockrefile로 작성된 image 실행하기

image를 실행시킬건데 EC2의 포트와 example 포트를 연결해줄 필요가 있습니다.
-p {hostPort}:{container port}

sudo docker run -p 80:80 example

                                     -p 뒤 왼쪽은 우리 서버의 포트를 넣어주고, 오른쪽에는 컨테이너의 포트를 넣어줌.

 

 

마찬가지로 보안그룹 인바운드 규칙을 편집해준다. 

 

 

 

 

EC2 인스턴스의 80 포트에 접속했을 때 아파치 서버가 나오면 성공!

728x90

docker 가 설치 된 부분이다. 

image : 도커의 이미지와 레이어를 저장하는 부분

overlay2 : layer를 실제로 저장하는 디렉토리.

 

 

디렉토리 사이즈 재는 법 (du -sh ~)

 

image, overlay2, containers 의 크기를 확인할 수 있다. overlay에 실질적인 데이터가 배치가 되는데, 

이 데이터가 어떻게 배치가 되는지 알아보자.

실무자는 이런 디렉토리 storage를 별도로 저장하는 방법을 궁금해 하는데, overlay2를 따로 마운팅 할 수 있는 형태로 구현하면 스토리지를 별도로 구현해 사용 가능하다. 

 

 

 

 

 

 

앞에서 다운받았던 nginx 정보 확인하기 (docker inspect nginx)

id:  이미지가 가지는 해쉬값(알고리즘을 돌려서 겹치지 않는 string 만드는 것 ) sha256 이라는 알고리즘을 돌려서 겹치지 않는 해쉬값을 갖게 했다!

 

tags : 위의 inspect 명령에서 nginx 뒤에 버전 명이 붙지 않아서 버전 명인 latest 가 자동으로 붙게 된다 !

 

 

실제로 서비스를 외부에 할 포트를 적어놓은 것!

 

 

 

 

컨테이너로 바꿔서 실행 했을 때 그 안에서 프로세스를 어떻게 실행시킬 지 알려주는 것.

[ nginx 를 실행한다

-g 에

daemon off 라는 명령을 줘서 ]

 

 

 

 

728x90

- 실습 이미지 정보

실습을 위해 다운받을 이미지는 nginx 로 했다! 


 

- 컨테이너 생성 명령어 (docker create -p 포트번호 --name ~ 다운받은이미지)

-d 옵션 : 백그라운드

-p : 포트 

 

 

 

- 모든 컨테이너 확인

docker ps -a :  -a 옵션을 줘야 모든 도커를 다 볼 수 있다. STATUS 상태가 실행중이지 않을 때는 Created 상태로 뜬다.

 

 

- 실행중인 컨테이너 확인

docker ps 

 

 

 

 

 

 

 


- 컨테이너 실행하기 (docker start)

 

 

이 때는 이미지 이름을 주는 것이 아니라 컨테이너 아이디 (13e~) 를 넣어줘야 한다. 

확인을 위해 다시 ps 명령을 넣어주면 

STATUS 가 변한 것을 확인할 수 있다. 

* docker ps : 내가 만든 컨테이너를 확인할 수 있게 보여주는 명령어.

 

 

 

nginx 확인 가능! (출처: 재즐보프님 강의. 내 컴은 보안프로그램때문에 안열림 ,,,)

 

 

 

 

 


- 컨테이너 삭제하기 (1. 실행중이지 않은 (created상태인) 컨테이너,

                              2. 실행중인 컨테이너 )

 

 

 

 

1-1. 삭제할 컨테이너를 따로 만들기 위해 일단 youjin 이라는 이름의 컨테이너를 생성해줬다.

 

 

 

1-2. docker ps -a 명령어를 사용해 youjin 컨테이너가 created 상태인 것을 확인할 수 있다!

  (실행중이지 않은 것은 바로 삭제 가능!!)

 

 

1-3. docker rm ID 를 입력해 (위의 컨테이너 아이디에서 복사해서 붙여넣기 하면 간편하다!) 삭제해주면,

  현재 youjin 컨테이너가 실행중이지 않기 때문에 바로 삭제된 모습을 볼 수 있다 . ( docker ps -a)

 

 

 

 

실행중인 컨테이너는 stop을 먼저 시킨 후 삭제해야 지워진다. 

 

 

2-1. 현재 실행 중인 nx2 이름을 가진 컨테이너를 먼저 stop 시킨다. 

2-2. 그 후 rm 명령어를 사용해 똑같이 없애주면 끝 !

 

 

 

 

 

728x90

hub.docker.com/ 에서 검색창에 node, tomcat, mongo,mysql 등을 검색하면 다 나온다. (설치방법은 이전 포스터 참고)

 

 

 

 

도커 명령어로 검색하고 싶을 땐

 터미널에 sudo docker search ~~~  을 입력해 검색 가능하다. 

 

로그인을 하면 private 환경을 설정할 수 있는데  (나중에 설명)

 

이미지만 다운받고 싶을 때는 pull 명령어를 사용해 다운받고, 뒤쪽에는 다운받고자 하는 이미지 이름을 넣어주면 pulling 진행!

 

 

 


- Docker register 다운받기!

 

 

이미지만 다운받고 싶을 땐 pull 이라는 명령어 사용! . 뒤에는 다운받고자 하는 이미지 이름 넣기

 

 

 

pulling 된 이미지의 목록을 보고싶으면 docker images 명령을 입력하면 

위에서 받았던 mysql 확인 가능하다!

728x90

개요 :

 

먼저 우분투에 관리자 계정으로 들어가준 뒤, (sudo -i 명령어)

 

apt install docker.io 설치 시작.

잘 진행되는가 싶더니 

 

404 에러 발생!

 

 

 

간단히 apt 업데이트가 안되어서 발생하는 문제이다. 

 

 

 

 

 

 

 

 

 

이렇게 업데이트 후에 다시 도커 설치 명령어를 내리면 해결 가능!

728x90

개발팀과 운영팀은 보통 적대적이다. (재즐보프님의 의견) 

개발팀 - 좋은 서비스를 만들고, 새로운 언어를 배우고, 새로운 기술이 나오면 적용하고싶어하는 욕구가 있다.

운영팀 - 안정적인 운영이 더 중요함. 개발보다는 안정적인 서버 유지를 더 추구한다. 

 

개발자들이 다양한 언어를 쓰기 떄문에 이를 통합하면 오류가 많다. 기존 vmware 는 보통 무겁다. 하드웨어를 추상화시켜서 운영체제 위에다가 하드웨어를 구현해주고 그 위에 운영체제를 설치하기 때문에 부하가 심해진다. 

 

컨테이너가 이 과정을 빼주는 역할을 한다!

 

 

무엇을 사용할까?

 

리눅스 컨트롤 그룹(프로세스로 소비할 수 있는 리소스 양(CPU, memory, I/O)등을 제한) 을 사용해 리눅스에서의 가상화를 이뤄주고있다. 만약 윈도우에 설치되면 하이퍼바이저를 사용해 마치 리눅스 커널처럼 동작하는 것처럼 !! 사용됨. (리눅스에서 사용하길 추천!)

 

리눅스 네임 스페이스 라는 기술도 사용 - 파일이나 네트워크 인터페이스를 가상화해서 자기만의 것을 가질 수 있다. 

별도의 공간을 할당해서 공간의 프로세스가 서로 간섭하지 못하게 하는 논리적인 방어막을 칠 수 있다.

 

 

 

 

vm ware가 docker를 사용했을 때보다 시간과 성능이 안정적이지 않음. (여러 개일 때)

 

 

 

 

 

기존의 개발 방식 비교. 컨테이너가 필요한 이유!

 

monolith : 원래는 이런 서비스들을 하나로 묶어 다같이 관리함. 단점: 한 번 컴파일하면 굉장히 많은 시간이 걸리고 정기적으로 점검을 해야 함. 업데이트 하고 나서도 버그 발견하면 다같이 모여서 빌드하고.. 효율성이 떨어짐. 

 

microservices : 하나의 서비스만 구축함. 업데이트도 다른 서비스 신경 쓸 필요 없이 자신의 서비스만 업데이트 할 수 있음. 

 

 

microservice 사용 시 users 가 인기가 많으면 users 만 따로 복사해서 관리할 수 있기 때문에 한정된 자원 안에서 효율적으로 돌아가게 할 수 있기 때문에 , 개발의 프로세스에 대한 단순함 때문에 컨테이너를 사용한다.

 

 

 

 

클라우드도 microservice architecture 사용.. (도커와 컨테이너.) 삼성, 배민도 이를 사용.

쿠버네티스(도커 관리하는 용) : 도커를 잘 다룰 수 있는 기술이 많이 나왔는데 이를 전체적으로 아우르는 오케스트레이션 도구의 표준.

 

 

 

도커는 다양한 클라우드 서비스 모델과 같이 사용 가능.

- 이미지 : 필요한 프로그램과 라이브러리, 소스를 설치한 뒤 만든 하나의 파일.

- 컨테이너 : 이미지를 격리하여 독립된 공간에서 실행한 가상 환경.

PaaS : 운영체제, 런타임까지의 것들을 한꺼번에 자동화해서 배포할 수 있게 하는 시스템.

운영체제 까지 설치하는 가상환경이 필요하다 라고 하면 이미지를 불러오게 만드는게 도커의 역할.

애플리케이션(톰켓,파이썬,주피터노트북) , 운영체제 들을 빠르게 불러서 사용할 수 있는 것을 말함. 

 

ex. 나는 오늘 apm환경이 필요해! --> vm ware를 구성할 필요 없이 빠르게 다운받아서 쓸 수 있는 환경을 얘기함.

원하는 것을 빠르게 설치하고 빠르게 삭제하는 환경을 만들어준다. 

 

 

 

도커의 한계

서비스가 커지면 커질 수록 관리해야 하는 컨테이너의 양이 급격히 증가. 도커를 사용해 관리를 한다 하더라도 쉽지 않은 형태.

 

 

 

 

 

 

정리!

 

도커를 쓰는 이유: 도커는 매우 뛰어난 가상환경을 제공한다. 일반 애플리케이션에 돌아가는 것 만큼 성능을 제공하고 있으면서도 microservice를 제공할 수 있는 다양한 기능들을 제공하고있기 때문에 많이 사용하고 있다. 

원하는 서비스를 쉽고 빠르게 이용할 수 있다!

 

 

 

 

 

 

 

 

 

 

+ Recent posts