[TIL] Ubuntu Docker Install : December 14, 2021

RE_BROTHER·2021년 12월 14일
0

TIL

목록 보기
39/41
post-thumbnail

Ubuntu Docker install

AWS EC2 Ubuntu 서버에 ASP.NET Core 업로드 테스트를 진행중이다.
서버는 Ubuntu 18.04 LTS이며, 모든 작업은 CLI 환경에서 진행했다.

Why Docker?

도커(Docker)는 리눅스의 응용 프로그램들을 소프트웨어 컨테이너 안에 배치시키는 일을 자동화하는 오픈 소스 프로젝트이다. - 위키백과

그렇게 어려운 말로 적혀있는건 아닌데, 모르는 사람이 들으면 이게 무슨 소리인가 싶을거다.
어느정도 현실에 빗대어 이야기하자.

어떤 API 서버를 구축했고, 클라우드 서비스를 통해 배포 해야한다.

이 상황에서 모든 클라우드 플랫폼이 동일한 환경을 가지고 있지 않고, 개발 당시의 환경과도 다르기 때문에 개발된 환경과 동일한 환경이 클라우드상에도 설정되어야 한다.
서비스가 정상적으로 운영되기 위한 모든 환경을 규격화하는 것이다. 이렇게 규격화된 환경은 차후 다른 서비스를 개발하거나, 유사한 서비스를 개발할 때 시간(자원)을 아껴주는 역할을 한다.

Docker의 가장 큰 장점은 변경 불가능한 인프라(Immutable Infrastructure)이다. 소프트웨어는 자주 수정된다면 여러가지 오류가 발생한다. 특히 변경에 따른 이력관리도 매우 중요한데 Docker는 서버를 구축한 이후 변경이나 업데이트를 할 수 없다.
위와 같은 이유로 인해 Docker는 업데이트 개념이 아닌 서버를 통째로 바꾸는 개념이다. 서버를 업데이트 하기 위해 새로운 도커 이미지를 업데이트해서 컨테이너에 담는다.
불편하다고 생각이 들 수 있겠지만 자잘한 소프트웨어 업데이트로 인해 머리를 쥐어 뜯는것보다 변경하기 위한 이미지를 올리는 것으로 배포를 끝낼 수 있다.

Install Docker Engine on Ubuntu

아래 방법은 repository를 이용한 설치법이다. package를 이용하여 Docker를 설치하려면 Install from a package - Docker Engine 를 참고하길 바란다.

Uninstall old versions

혹시 이전에 설치했던 Docker가 있을 경우를 대비하여 사전에 지워주도록 하자.

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

Reading package lists... Done
Building dependency tree
Reading state information... Done
Package 'docker-engine' is not installed, so not removed
Package 'docker' is not installed, so not removed
Package 'containerd' is not installed, so not removed
Package 'docker.io' is not installed, so not removed
Package 'runc' is not installed, so not removed
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Set up the repository

  1. apt를 업데이트하고, https를 통해 리포지토리를 쉽게 사용할 수 있도록 패키지를 설치한다.
$ sudo apt-get update
$ sudo apt-get install ca-certificates curl gnupg lsb-release
  1. Docker 공식 GPG Key를 추가한다.
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
-----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBFit2ioBEADhWpZ8/wvZ6hUTiXOwQHXMAlaFHcPH9hAtr4F1y2+OYdbtMuth
lqqwp028AqyY+PRfVMtSYMbjuQuu5byyKR01BbqYhuS3jtqQmljZ/bJvXqnmiVXh
38UuLa+z077PxyxQhu5BbqntTPQMfiyqEiU+BKbq2WmANUKQf+1AmZY/IruOXbnq
...
YT90qFF93M3v01BbxP+EIY2/9tiIPbrd
=0YYh
-----END PGP PUBLIC KEY BLOCK-----

추가된 gpg key는 /usr/share/keyrings에 저장된다. 열어볼 필요 없다. 어차피 읽지도 못한다.

  1. stable 리포지토리를 설정하는 경우 아래와 같이 작성하고, nightly or test 버전을 원하는 경우 stable 대신에 nightly or test를 넣어주면 된다.
$ 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

Install Docker Engine

  1. 위에서 설정한 리포지토리를 업데이트
$ sudo apt-get update

Hit:1 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit:3 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu bionic-backports InRelease
Get:4 https://download.docker.com/linux/ubuntu bionic InRelease [64.4 kB]
Get:5 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages [22.5 kB]
Get:6 https://download.docker.com/linux/ubuntu bionic/nightly amd64 Packages [59.8 kB]
Get:7 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Fetched 236 kB in 2s (153 kB/s)
Reading package lists... Done
  1. docker-ce, docker-ce-cli, containerd.io를 설치한다.
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
Reading package lists... Done
Building dependency tree
Reading state information... Done
...

설치가 완료되었고, stable repository에서 가장 최신 버전으로 설치되었다.
특정 버전을 설치해야되는 경우에는 apt-cache 명령어를 사용해서 원하는 버전을 설치한다.

$ apt-cache madison docker-ce

 docker-ce | 5:20.10.12~3-0~ubuntu-bionic | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
 docker-ce | 5:20.10.11~3-0~ubuntu-bionic | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
 docker-ce | 5:20.10.10~3-0~ubuntu-bionic | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
 ...
 docker-ce | 18.06.1~ce~3-0~ubuntu | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
 docker-ce | 18.06.0~ce~3-0~ubuntu | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
 docker-ce | 18.03.1~ce~3-0~ubuntu | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
 
 $ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io

만약 5:20.10.10~3-0~ubuntu-bionic 버전을 설치하고 싶은 경우

$ sudo apt-get install docker-ce=5:20.10.10~3-0~ubuntu-bionic docker-ce-cli=5:20.10.10~3-0~ubuntu-bionic containerd.io

<VERSION_STRING>에 원하는 버전을 입력해서 설치하면 된다.

Test

동작하는지 확인은 해봐야하니까 hello-world 컨테이너를 실행해보자. 로컬에 hello-world라는 컨테이너가 없으니 Docker Hub에서 자동으로 컨테이너를 다운받아 실행된다.

$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:cc15c5...4f685
Status: Downloaded newer image for hello-world:latest

제대로 실행된건지 확인하기 위해 docker ps -a 명령어 실행(sudo 권한으로 해야함)

$ sudo docker ps -a
CONTAINER ID   IMAGE         COMMAND    CREATED          STATUS                      PORTS     NAMES
e42a5f4182f1   hello-world   "/hello"   29 seconds ago   Exited (0) 29 seconds ago             competent_joliot
$ systemctl status docker

정상적으로 실행되고 있음을 확인할 수 있다.

Ending

일주일에 적어도 한 번은 적어보려고 노력하는데 그게 생각처럼 쉽지가 않다.

앞으로 기록할 것들

  • AWS Lambda에 업로드한 코드 수정하기(json parsing)
  • dotnet publish 패키지 증발 현상
  • AWS Lambda 함수와 AWS API Gateway 연동하기
  • AWS EC2 ubuntu에 Docker 환경 구축하기 + ASP.NET Core Docker Image

꼼꼼하게 확인해가면서 배우는 습관을 들여야겠다.

profile
I hope the All-Rounder Developer & Researcher

0개의 댓글