728x90
반응형

Dockerfile?

  • Dockerfile은 원하는 Docker Container Image를 생성하기 위한 스크립트 파일이다.
  • Docker는 build 옵션을 통해 Dockerfile에 나열된 명령문을 차례대로 수행하며 Container Image를 생성해준다.
  • Dockerfile을 읽을 줄 안다는 것은 해당 이미지가 어떻게 구성되어 있는지 알 수 있다는 의미이다.

 

Dockerfile 작성 방법

키워드

FROM: 시작점이 될 베이스 이미지를 지정한다.

 

MAINTAINER: 이미지를 생성한 개발자의 정보를 표시한다. (1.13.0 이후에는 권장되지 않고, LABEL을 사용하는 것이 좋다.)

 

LABEL: 이미지에 메타데이터를 추가한다. key-value 형태로 지정된다.

 

RUN:
이미지 내에서 명령어를 실행한다. 실행 결과는 새로운 레이어에 기록되고, 이 레이어는 최종 이미지에 포함된다.
각 RUN 명령은 새로운 레이어를 생성하며, 이러한 레이어들은 캐시되어 재사용될 수 있다.

 

WORKDIR:
컨테이너 내에서의 작업 디렉토리를 지정한다.
해당 디렉토리가 없으면 자동으로 생성되며, 이후의 작업들은 이 디렉토리 내에서 실행된다.

 

EXPOSE:
이미지를 실행할 때 열려야 하는 포트를 지정한다.
이 포트는 컨테이너 실행 시 -p 옵션으로 호스트와 매핑될 수 있다.

 

USER: 컨테이너가 실행될 때 사용될 사용자를 지정한다. (기본값 root)

 

COPY / ADD:
호스트 시스템의 파일이나 디렉토리를 이미지에 복사한다.
ADD는 COPY보다 확장된 기능을 제공한다. ADD는 URL로부터 파일을 가져오거나 압축 해제 기능도 제공한다.
특별한 기능이 필요하지 않은 경우, COPY를 사용하는 것이 권장된다.

 

ENV: 컨테이너 내에서 사용될 환경 변수를 설정한다.

 

CMD / ENTRYPOINT:
컨테이너를 생성하거나 실행할 때 수행될 명령어를 정의한다.
docker run 명령으로 새 컨테이너를 생성하거나, docker start 명령으로 정지된 컨테이너를 시작할 때 해당 명령어가 실행된다.
주로 컨테이너 내부에서 지속적으로 실행되어야 하는 서버나 애플리케이션을 시작할 때 사용된다.

 

CMD:
CMD는 docker run 실행 시 추가적인 명령어가 주어지면, 해당 명령어를 ENTRYPOINT에 지정된 명령어의 인자로 사용한다. 만약 ENTRYPOINT가 정의되어 있지 않다면, CMD에서 지정한 명령어를 실행한다.

Dockerfile 내에서 CMD를 여러 번 정의할 수 있지만, 마지막으로 정의된 CMD만 최종적으로 사용된다.

 

CMD는 3가지 형태로 작성될 수 있다:
- CMD ["executable", "param1", "param2"]: 실행할 프로그램과 그에 대한 인자를 지정한다.
- CMD ["param1", "param2"]: ENTRYPOINT로 지정된 실행 가능한 파일의 인자로 사용된다.
- CMD command param1 param2: shell 형태로 명령어를 실행한다. 여기서는 /bin/sh -c를 사용하여 해당 명령어를 실행한다.

 

ENTRYPOINT :
ENTRYPOINT는 docker run 실행 시, 추가적인 명령어가 주어지면 이 명령어는 ENTRYPOINT에 지정된 명령어에 대한 인자로 사용된다. CMD에서 기본 인자가 제공되었을 때 docker run에서 명령어를 추가로 주게 되면, CMD의 인자는 덮어쓰여진다.

ENTRYPOINT 명령은 2가지 형태로 제공된다:
- exec 형태: ENTRYPOINT ["executable", "param1", "param2"]. 이 형태는 명령어가 PID 1로 실행되어 신호 처리가 올바르게 이루어진다.
- shell 형태: ENTRYPOINT command param1 param2. 이 형태를 사용할 때, 명령어는 실제로 /bin/sh -c 내에서 실행되므로 신호 처리에 주의가 필요하다.

 

ENTRYPOINT는 CMD와 함께 사용될 때, ENTRYPOINT는 실행할 명령어를, CMD는 그 명령어의 기본 인자로 사용된다.

 

 

Docker 빌드

  • Dockerfile의 기본이름은 Dockerfile이다.
    파일명을 이렇게 설정하면 파일이 위치한 경로에서 docker build . 만 해도 빌드가 가능하다.
    하지만 이렇게 생성하면  이미지의 이름과 태그가 없기 때문에 -t 옵션으로 태그와 파일명 지정이 가능하다.
docker build . -t container_name:tag
  • Dockerfile은 파일명 변경이 가능하다.
    위에서 파일명을 다르게 지정했다면  -f 옵션으로 지정이 가능하다.
docker build -t container_name:tag -f my.Dockerfile .

 

728x90
반응형
728x90
반응형

네임스페이스 확인

kubectl get namespace

 

네임스페이스 변경하기

kubectl config set-context --current --namespace={NAMESPCE}

 

 

728x90
반응형
728x90
반응형

프로그램을 만들면서 Python 서버와 REST로 연결하기 위해 라이브러리를 찾아봤다.

구글 검색을 통해 C++로 작성된 HTTP 클라이언트/서버 애플리케이션을 개발할 때 도움를 주는 C++ REST SDK (또는 Casablanca) 라이브러리를 찾았다.

 해당 라이브러리는 microsoft의 공식 라이브러리로 깃 허브에 올라와 있었기 때문에, 빌드를 위해 아래 Dockerfile을 작성했다.

 

casablanka.Dockerfile

FROM ubuntu:latest AS env

RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y sudo
RUN apt-get install -y g++ git libboost-atomic-dev libboost-thread-dev libboost-system-dev libboost-date-time-dev libboost-regex-dev libboost-filesystem-dev libboost-random-dev libboost-chrono-dev libboost-serialization-dev libwebsocketpp-dev openssl libssl-dev ninja-build

RUN git clone https://github.com/microsoft/cpprestsdk.git
RUN apt-get install -y cmake zlib1g-dev

WORKDIR cpprestsdk
RUN mkdir build && cd build
RUN cmake . -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=1 -DCMAKE_CXX_FLAGS="-Wno-error" -DCMAKE_CXX_FLAGS="-Wno-format-truncation"

RUN make -j$(nproc)
RUN sudo make install

 

위 코드를 사용해 docker로 빌드하면 .so 파일들이 나온다.

하지만 지금은 윈도우 용 프로그램을 만들고 있기 때문에 visual studio에서 사용할 수 있도록 설정을 다시해봐야 할 것 같다.

728x90
반응형
728x90
반응형

글 목적

아래 내용은 docker 설치와 이미지를 run한 이후 내부 컨테이너에서 apt-get update하는 부분부터 에러가 발생하여 해결하기 위해 삽질한 과정이다.

환경을 설치하고 Django web 페이지를 띄울 때까지 오류 상황들을 순서대로 적은 글이고 중간에 돌아가는 과정이 있기 때문에 빠른 결론을 원하면 아래 apt-get update 성공 부분부터 읽으면 될 듯 하다.

만약 이 글과 비슷한 상황이라면 순서대로 읽는 것 보단 필요한 부분만 찾아서 시도해보길 바란다. 

 

도커 이미지는 아래 명령어로 run하였고, 컨테이너 이름은 test이다.

$ sudo docker run -it --name=test ubuntu:20.04 /bin/bash

 

docker 설치나 사용에 관한 내용은 아래 링크 참조.

https://hwan001.tistory.com/180

 

[Docker] Ubuntu에 Docker 설치하기

Docker ? 리눅스 컨테이너화 기술로 사용자가 리눅스 컨테이너를 만들고 사용할 수 있도록 지원한다. 도커는 가상화 기술이 아닌 격리 기술이지만 가상 머신과 비슷한 느낌으로 사용한다. 컨테이

hwan001.co.kr


 

apt-get update 에러

 Ubuntu:20.04 컨테이너를 실행하고 가장 먼저 apt-get update 명령어를 사용했지만, Err 메시지가 뜨면서 모든 저장소에 연결되지 않았다. 또한 ip, vi, ping, route 등의 기본 명령어들도 제공되지 않아 원인 파악도 제한된다.

검색해보니 docker의 보안으로 인해 최초에 해당 기능들이 제공되지 않기 때문에 만약 필요하면 apt-get install로 각각을 설치해서 사용하라고 하는데, 문제는 apt-get 저장소 연결 자체가 안되는 상황이다. 

 

원인을 검색해봤더니 DNS 연결 문제로 저장소 URL을 찾을 수 없어 발생하는 에러기 때문에 해당 주소를 잘 변경해주면 연결이 된다고 한다. DNS 주소를 수정하는 방법은 아래 링크를 참고했다.

https://askubuntu.com/questions/1167080/unable-to-update-ubuntu-docker-container-using-apt-get-update

 

unable to update ubuntu Docker container using apt-get update

when I run ubuntu as Docker container and when I run apt-get update command it gives error and fails to update the repos. Here is what error I'm getting : root@df167e514b29:/# sudo bash: sudo: c...

askubuntu.com

검색을 통해 /etc/resolv.conf 등 필요한 파일들을 수정해줬고, DNS (8.8.8.8) 주소도 잘 설정되어 있다.

하지만 여전히 update가 안되었기 때문에 결국 필요한 패키지들을 수동으로 설치하기로 했다.


 

apt-get download

보통 필요한 패키지들은 apt-get install로 시스템에 바로 설치하지만 현재는 원인을 알 수 없는 이유로 저장소 연결이 제한된다. 패키지의 수동 설치를 위해서 먼저 docker 컨테이너를 빠져나가 apt-get이 잘 작동되는 os에서 필요한 패키지들을 다운로드 받는다.

 

$ sudo apt-get download vim net-tools iproute2 iputil-ping

 

apt-get download 명령어는 현재 디렉토리에 .deb 형태로 필요한 패키지를 다운로드 받는다.

aaa라는 임시 폴더를 만들어 내부에 필요한 deb 들을 설치했다.

 

이제 이 파일들을 도커 내부의 ubuntu:20.04로 전달하여 수동으로 설치하면 된다.


 

docker cp

도커는 도커 외부와 내부 컨테이너 간의 파일 공유가 가능하며 docker cp 명령어로 해당 기능을 제공한다.

위에서 내려받은 deb 파일을 ubuntu:20.04 컨테이너에 넣어준다.

$ sudo docker cp ../aaa/ test:/aaa/

잘 전달되었다.

이제 전달된 deb를 설치해주자.


 

apt install ./

apt install 명령어를 사용하면 패키지를 설치할 수 있다.

여기서 주의할 점이 있는데, install 뒤에 패키지 명을 그냥 입력하면 저장소에서 해당 패키지를 찾기 때문에

./을 붙여 현재 디렉토리 내부의 파일이라고 명시해 주어야 한다.

 

하나씩 설치해보겠다.

$ apt install ./net-tools_1.60+git20180626.aebd88e-1ubuntu1_amd64.deb

net-tools

 

$ apt install ./iputils-ping_3%3a20190709-3_amd64.deb

iputils-ping 에러

 

iputil-ping 패키지를 설치하던 중 의존성과 관련된 에러가 발생했다.

libcap2 와 libcap2-bin이 설치되지 않아 발생한 에러이다.

docker 외부에서 다운받은 뒤 같이 설치해주자.

$ apt-get download libcap2 libcap2-bin

 

설치할땐 libcap2-bin의 의존성 때문에 libcap2를 먼저 설치해줘야 한다. 

 

iputils-ping을 설치해보자.

 

드디어 iputils-ping의 설치가 끝났다.

다른 패키지들도 비슷한 방식으로 설치하면 되지만 사실 중요한건 패키지 설치가 아니라 환경 구축이다.

더 이상 설치하지 말고 ping을 사용해서 저장소와 연결 상태를 먼저 확인해보자.


 

Ping

DNS로 먼저 날려봤지만 당연하다는 듯 패킷이 나가지 않는다.

 

게이트 웨이로도 연결이 안된다..

 

여기서 추론 가능한 연결 실패 원인은 크게 2가지인 것 같다.

방화벽에서 패킷이 drop 당하거나, 이중 NAT로 인한 route 문제.

 

방화벽은 없으니 홈 서버를 구성하면서 뭔가 문제가 생긴 듯 하다.


 

docker network

좀 더 찾아보니 도커는 docker network 명령어로 네트워크 생성, 설정 등의 작업을 지원한다.

원래 해당 명령어는 컨테이너들 간의 통신을 가상 네트워크 장비를 통해 지원해주는게 주 역할이지만 내 문제해결에도 큰 도움이 됐다. 

이 글에서 한번에 작성하기엔 범위가 크고 주제도 맞지 않기 때문에 명령어 설명은 생략하겠다.

 

기본적으로 컨테이너를 생성하면 브릿지 형태의 네트워크로 설정된다. 

컨테이너 밖에서 ifconfig 해보면 docker0라는 가상 네트워크 인터페이스가 생긴걸 알 수 있다.

컨테이너 외부의 가상 인터페이스 ip는 D클래스가 1번으로 지정되어 있고, 내부에서 ifconfig 설치 후 확인해보면

172.17.0.2를 갖는걸 볼 수 있다.

 

위에선 생략했지만 ping으로 컨테이너 내부에서 172.17.0.1 주소에 패킷을 날려보면 응답이 온다.

 

문제가 거의 해결된 것 같다. 정확하진 않지만 NAT 환경과 관련된 문제인것 같다.

해결 방법은 여러가지가 있겠지만, 제일 간단한 해결 방법은 컨테이너를 브릿지가 아닌 호스트 방식으로 run하는 것이다.

 

기존에 만든 test 이미지를 과감하게 지우고 host 네트워크로 다시 만들어보겠다.


 

apt-get update 성공

아래 명령어로 test를 삭제하고 네트워크를 host로 지정해서 다시 만들어보자.

$ sudo docker rm test
$ sudo docker run -it --name=test --network=host ubuntu:20.04 /bin/bash

 

쉘이 바뀌었는데 기존처럼 랜덤한 컨테이너 ID가 아니라 host와 같은 내용의 root 쉘이 되었다.

이제 업데이트를 해보자.

$ apt-get update

 

업데이트가 잘 된다. 추가로 필요한 패키지는 apt-get install로 설치하면 될 듯 하다.

해결 방법은 docker run할때 --network=host 라는 옵션을 하나 추가한 것 밖에 없지만 과정은 생각보다 길었던 것 같다.

 

이제 만들어진 ubuntu:20.04 컨테이너에 파이썬과 Django 프레임워크를 설치해서 간단한 웹사이트를 띄워보자.


 

Django 

설치 과정은 https://hwan001.tistory.com/186 글과 같지만 몇 가지 명령어가 다른 점이 있다.

달라진 명령어는 아래 내용에 적어두었다.

 

먼저 apt repository를 국내에서 제공하는 서버로 바꿔주자.

이 글에선 컨테이너 외부의 우분투에 미리 설정되어 있기 때문에 해당 파일을 도커 내부 같은 경로에 cp 명령어로 덮어씌워 줬다.

아래는 /etc/apt/source.list의 내용이고 기존 파일에 kakao 서버 주소만 추가해 주었다.

필요하다면 그대로 사용해도 좋고 다른 국내 서버 주소를 찾아서 추가해줘도 좋다.

 

$ vi /etc/apt/source.list
# deb cdrom:[Ubuntu 20.04.4 LTS _Focal Fossa_ - Release amd64 (20220223)]/ focal main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://kr.archive.ubuntu.com/ubuntu/ focal main restricted
# deb-src http://kr.archive.ubuntu.com/ubuntu/ focal main restricted


## Major bug fix updates produced after the final release of the
## distribution.
deb http://kr.archive.ubuntu.com/ubuntu/ focal-updates main restricted
# deb-src http://kr.archive.ubuntu.com/ubuntu/ focal-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://kr.archive.ubuntu.com/ubuntu/ focal universe
# deb-src http://kr.archive.ubuntu.com/ubuntu/ focal universe
deb http://kr.archive.ubuntu.com/ubuntu/ focal-updates universe
# deb-src http://kr.archive.ubuntu.com/ubuntu/ focal-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://kr.archive.ubuntu.com/ubuntu/ focal multiverse
# deb-src http://kr.archive.ubuntu.com/ubuntu/ focal multiverse
deb http://kr.archive.ubuntu.com/ubuntu/ focal-updates multiverse
# deb-src http://kr.archive.ubuntu.com/ubuntu/ focal-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://kr.archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse
# deb-src http://kr.archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu focal partner
# deb-src http://archive.canonical.com/ubuntu focal partner

deb http://security.ubuntu.com/ubuntu focal-security main restricted
# deb-src http://security.ubuntu.com/ubuntu focal-security main restricted
deb http://security.ubuntu.com/ubuntu focal-security universe
# deb-src http://security.ubuntu.com/ubuntu focal-security universe
deb http://security.ubuntu.com/ubuntu focal-security multiverse
# deb-src http://security.ubuntu.com/ubuntu focal-security multiverse

# This system was installed using small removable media
# (e.g. netinst, live or single CD). The matching "deb cdrom"
# entries were disabled at the end of the installation process.
# For information about how to configure apt package sources,
# see the sources.list(5) manual.


# kakao
deb http://ftp.daumkakao.com/ubuntu/ bionic main restricted
deb http://ftp.daumkakao.com/ubuntu/ bionic-updates main restricted
deb http://ftp.daumkakao.com/ubuntu/ bionic universe
deb http://ftp.daumkakao.com/ubuntu/ bionic-updates universe
deb http://ftp.daumkakao.com/ubuntu/ bionic multiverse
deb http://ftp.daumkakao.com/ubuntu/ bionic-updates multiverse
deb http://ftp.daumkakao.com/ubuntu/ bionic-backorts main restricted universe multiverse

 

파일을 덮어씌우고 update와 upgrade를 한번씩 더 해줬다.

 

이제 python3, pip3, vim, venv를 apt-get install로 설치한다.

$ apt-get install -y python3 python3-pip python3-venv vim

 

이후 과정은 위 링크와 동일하다.

 

 

 

728x90
반응형
728x90
반응형

 

Docker Hub 와 Docker Repository

 도커는 깃 허브와 비슷한 구조로 만들어졌다.

사용자들은 여러 명령어를 활용해 Docker를 설치하고 이미지를 내려받아 필요한 환경을 구축한 후 이미지를 다시 빌드하여 허브에 업로드할 수 있고, 업로드된 이미지는 (인터넷이 가능하고 Docker가 설치되었다면) 언제든 다시 내려받아 사용할 수 있게된다. 

 

 이런 과정들을 가능하게 하려면 먼저 Docker Hub에 계정을 만들고, 이미지를 배포하고 관리할 Repository를 생성해야 한다. Repository의 이름은 배포할 이미지의 이름과 같아야 한다. (태그는 보통 버전관리를 위해 사용)

 

 아래 링크에서 가입이 가능하다. 

 https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

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


 

Docker Commit

 도커 허브에 만들어둔 Repository에 이미지를 업로드하려면, 먼저 이미지를 만들어야한다.

아래 명령어에서 -a 옵션은 commit할 이미지의 작성자명이고, -m 옵션은 주석이다.

commit 하고 싶은 이미지의 Container ID를 docker image로 확인하고 이미지네임과 태그를 추가로 입력해준다.

이 때 이미지네임과 태그는 도커 허브에 만들어둔 레포지토리 명과 동일해야한다.

혹시 다르게 생성했다면 아래 Tag 명령어를 사용해 commit 전에 변경이 가능하다.

 

$ sudo docker commit -a "hwan001" -m "commit message" 컨테이너id 이미지네임/태그

 

Docker Tag

 도커 저장소에 이미지를 push 하려면 도커의 저장소 이름과 이미지가 서로 같은 이름을 가지고 있어야 한다.

위에서 만들어진 이미지의 이름과 tag를 아래 명령어로 변경해주자.

$ sudo docker tag 원래이름:태그 hwan001/django_webserver_test:0.1

 

Docker Push

 태그까지 맞췄다면 아래 명령어로 허브에 업로드 할 수 있다.

$ sudo docker push hwan001/django_webserver_test:0.1

 

업로드 확인

허브의 레포지토리에 잘 업로드 되었다.

728x90
반응형
728x90
반응형

Docker

이전 글 : Ubuntu에 Docker 설치하기 (1)

https://hwan001.tistory.com/180

 

[서버] Ubuntu에 Docker 설치하기

Docker ? 리눅스 컨테이너화 기술로 사용자가 리눅스 컨테이너를 만들고 사용할 수 있도록 지원한다. 도커는 가상화 기술이 아닌 격리 기술이지만 가상 머신과 비슷한 느낌으로 사용한다. 컨테이

hwan001.tistory.com


Docker에서 Ubuntu 20.04 LTS 최신 버전 공식 이미지 내려받기

 Docker를 설치하면 도커 허브에 공유된 공식 이미지 또는 개인이 업로드한 이미지와 직접 제작한 이미지 등을 다운로드하여 원하는 환경을 쉽게 구성할 수 있다.

 

먼저 아래 명령어를 사용하면 도커 허브에 공유되고 있는 이미지 목록을 가져온다.

$ sudo docker search {image_name}

 

아래 명령어는 이미지를 도커 허브로부터 다운로드 받는다.

태그를 통해 해당 이미지의 특정 버전을 다운받아오거나 :latest 태그를 활용하여 최신 버전 이미지를 받아올 수 있다.

$ sudo docker pull ubuntu:latest

 

이미지를 내려받은 후 실행 까지 하려면 docker run 명령어를 실행하면 된다.

$ sudo docker run -i -t ubuntu:20.04 /bin/bash

이미지를 내려받은 뒤 컨테이너에 접속하여 bash 쉘을 실행 시켰다.

참고로 이미지가 있는 상태에서 run하게 되면 새로운 컨테이너가 생긴다.


컨테이너 접속

Exit 후 아래 명령어로 확인해보면 이미지의 빨간색 박스 부분처럼 도커가 임의로 컨테이너의 이름을 정해준 것을 알 수 있다.

$ sudo docker ps -a

 

docker start 명령어로 도커가 임의로 정한 컨테이너의 이름을 입력하고,

docker ps를 입력하면 현재 도커 내부에서 실행 중인 이미지가 보이지만 쉘의 형태는 변하지 않는다.

해당 컨테이너는 정상적으로 실행되었지만 아직 내부로 들어가진 않았다.

$ sudo docker start hungry_williamson
$ docker ps

 

컨테이너에 접속하여 쉘을 실행하기 위해선 추가적인 과정이 필요하다.

$ sudo docker attach hungry_williamson

 

docker attach 명령어로 실행 중인 컨테이너에 접속했다.


이미지, 컨테이너 삭제

만약 이미지와 컨테이너를 삭제하고 싶다면 아래 명령어를 사용한다.

$ sudo docker rm {컨테이너 이름}

$ sudo docker rmi ubuntu

 

728x90
반응형
728x90
반응형

Docker

 

Docker

  • 리눅스 컨테이너화 기술로 사용자가 리눅스 컨테이너를 만들고 사용할 수 있도록 지원한다.
  • 도커는 가상화 기술이 아닌 격리 기술이지만 가상 머신과 비슷한 느낌으로 사용한다.
  • 컨테이너를 구축, 배포, 복사하며 환경의 이전이 자유롭기 때문에 AWS 등 클라우드 서비스에 최적화되었다.
  • 처음엔 리눅스의 LXC 기술(기존의 컨테이너)을 활용하였으나 현재는 자체 개발된 기술 활용한다.
  • 도커는 단일 컨테이너 관리에 적합하게 만들어져 있다. (다수의 컨테이너를 다루려면 쿠버네티스 활용)
  • https://www.docker.com/
 

Home - Docker

A Community like No Other Community is at the heart of what Docker does. From our Docker Captains sharing their insight and expertise, to hundreds of MeetUps around the world, to our Slack and Discourse forums for peer-to-peer support, there’s someone el

www.docker.com


 

Docker 설치

 도커는 실제 Linux 서버에 설치 후 공식 매뉴얼 (https://docs.docker.com/engine/install/ubuntu/) 을 참고하여 작성했고, 다른 운영체제에서의 설치가 필요하다면 공식 매뉴얼을 참고하기 바란다.

아래 내용은 Ubuntu 20.04 LTS 기반이며, 서버는 미리 설치 후 설정까지 되어 있다고 가정하고 진행하겠다.

 

** 서버 OS 요구사항이 존재함 설치 전 참고

도커 설치를 위한 서버 요구사항

 

 

서버가 준비되었다면 도커 설치를 위해 가장 먼저 OS에 존재하는 이전 버전 docker (docker, docker.io, docker-engine)를 제거해야되고, 아래 명령어를 통해 제거가 가능하다.

$ sudo apt-get remove docker docker-engine docker.io containerd runc

 

 

제거가 완료되었다면 apt-get를 업데이트하고 curl과 기타 패키지를 설치한다.

 $ sudo apt-get update
 $ sudo apt-get install ca-certificates curl gnupg lsb-release

 

 

이후 curl로 도커의 공식적인 gpg 키를 가져온 뒤 gpg 명령어로 추가한다.

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

 

 

위에서 가져온 키를 사용하여 도커 이미지를 다운받아올 deb 명령어 만들어 /etc/apt/sources.list.d/docker.list 에 추가한 뒤 결과를 출력해준다.

 $ echo "deb [arch=$(dpkg --print-architecture) 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

$(dpkg --print-architecture) 는 현재 서버의 아키텍쳐를 가져오고, $(lsb_release -cs) stable은 우분투 배포판의 버전을 가져온다. 여기서 stable은 docker 이미지의 버전으로 nightly 또는 test 입력이 가능하다.

 

관련 내용은 아래 링크 내용의 nightly와 test 항목 참조.

https://docs.docker.com/engine/install/

 

Install Docker Engine

 

docs.docker.com

 

명령어 실행 후 vi로 /etc/apt/sources.list.d/docker.list 파일을 열어보면 출력된 결과가 파일 내에 작성되어진 걸 볼 수 있다.

 

 

아래 명령어로 도커 엔진의 가장 최신 버전과 index 패키지를 다운로드한다.

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

 

** 도커 엔진의 특정 버전이 필요하다면 아래 이미지 또는 공식 매뉴얼 참조

다른 버전 설치 방법

 

 

도커의 다운로드와 설치가 끝났다.

아래 명령어로 기본 도커와 같이 설치되는 Hello-world 이미지를 run 한다.

$ sudo docker run hello-world


 

 

728x90
반응형

+ Recent posts