Cloud/docker

[Docker] 도커 엔진 설치 및 컨테이너 생성(linux)

dodomp0114 2021. 12. 30. 00:17

Docker 란,

 

- 리눅스 컨테이너에 여러 기능을 추가하여, 애플리케이션을 컨테이너로서 좀더 쉽게 사용하도록 만들어진

오픈소스 프로젝트.

 

- Go 언어로 작성되어있으며, 기존에 쓰이던 가상화 기술인 가상머신과는 달리 도커 컨테이너는 성능의 손실이

거의 없기에 차세대 클라우드 인프라 솔루션으로서 각광받고 있습니다.

 

 

가상머신과 도커의 차이점

 

 

 

 

Docker image, container

 

- 도커 엔진에서 사용하는 기본 단위인 이미지와 컨테이너.

 

 

 

 

Docker image

 

- 가상머신을 생성할 때 사용하는 'iso 파일' 과 비슷한 개념이며, 컨테이너를 생성할 때 필요한 요소입니다.

 

 

Docker container

 

- docker image로 컨테이너를 생성하게되면 해당 이미지의 목적에 맞는 파일이 들어 있는 파일시스템과 격리된 

시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간이 생성되는데 이것을 docker container 라고 합니다.

 

 

 


 

 

Linux 에 Docker engine 설치

 

 

 

- repo 파일 생성을 위한 yum-utils 설치.

[root@myoracleworld-dev ~]# yum install -y yum-utils

 

 

 

- yum-config-manager 명령어를 통하여 repo 파일 추가.

  repo 파일에는 도커 엔진을 받을 수 있게 도커 공식 홈페이지 다운로드 주소 추가.

  ( ※ 도커 엔진이 설치되는 운영체제에 맞게 확인 후 설치 ) 

[root@myoracleworld-dev ~]# yum-config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

 

 

 

- 기존 설치되어 있던 container runtime 툴 삭제.

[root@myoracleworld-dev ~]# yum remove -y runc

 

 

 

- docker-ce 설치. ( 8 버전 linux에서 설치가 안될시에 --nobest 옵션으로 최신버전 제외하고 설치.

 ( docker-ce는 Docker를 사용하는 개발자나 소규모 팀에 적합한 에디션 입니다. )

[root@myoracleworld-dev ~]# yum install -y docker-ce 
[root@myoracleworld-dev ~]# dnf install -y docker-ce --nobest

 

 

 

- docker engine이 잘 설치되었는지 version 확인 명령어 실행.

[root@myoracleworld-dev ~]# docker -v 
Docker version 20.10.12, build e91ed57

 

 

 

- docker service 실행 및 부팅 시 자동 실행.

[root@myoracleworld-dev ~]# systemctl start docker
[root@myoracleworld-dev ~]# systemctl enable docker

 

 


 

 

Docker image 및 container 생성

 

- centOS 7 version 이미지 받아오기.

[root@myoracleworld-dev ~]# docker pull centos:7 
7: Pulling from library/centos 
2d473b07cdd5:  Pull complete
Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987 
Status: Downloaded newer image for centos:7

 

 

 

- 현재 사용가능한 모든 이미지를 보려면, docker images 명령어 사용.

[root@myoracleworld-dev ~]# docker images 
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE 
centos       7         eeb6ee3f44bd   3 months ago   204MB 
ubuntu       14.04     13b66b487594   9 months ago   196MB

 

 

 

- docker contatin 생성

[root@myoracleworld-dev ~]# docker create -i -t --name hellocentos centos:7 
ebe4b647cc71b5e241a3d1340ac4ff3d9c60f75053e55b4d9255fefa6c3fc117

==> 무작위로 생성된 16진수 해시값은 컨테이너 고유ID

 

 

 

- 컨테이너의 고유 ID를 다시 보려면 docker inspect 명령어 사용.

[root@myoracleworld-dev ~]# docker inspect hellocentos | grep Id 
        "Id": "ebe4b647cc71b5e241a3d1340ac4ff3d9c60f75053e55b4d9255fefa6c3fc117",

 

 

- docker start 명령어로 'hellocentos' 컨테이너 시작.

[root@myoracleworld-dev ~]# docker start hellocentos 
hellocentos

 

 

 

- docker attach를 사용하게 되면 앞서 생성해준 "hellocentos" 컨테이너 내부로 들어오게 됩니다.

[root@myoracleworld-dev ~]# docker attach hellocentos 
[root@ebe4b647cc71 /]#

 

 

 

 

※ docker container 로 진입한뒤에 나오는 방법에는 크게 두가지가 있습니다.

 

첫번째는 Ctrl +  D / exit 명령어를 사용하여 호스트로 탈출과 동시에 container를 종료 시키는 방법.

두번째즌 Ctrl + P 를 누른상태로 Q를 누르게되면 호스트로 탈출하여도 container는 그대로 작동되게 됩니다.

###### container 탈출과 동시에 종료 ######
[root@myoracleworld-dev ~]# docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS         PORTS     NAMES
48c2a046855c   ubuntu:14.04   "/bin/bash"   9 minutes ago   Up 4 minutes             test
[root@myoracleworld-dev ~]# docker attach test
root@48c2a046855c:/#
root@48c2a046855c:/# exit
[root@myoracleworld-dev ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

###### container 탈출하여도 컨테이너 작동 ######
[root@myoracleworld-dev ~]# docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS         PORTS     NAMES
48c2a046855c   ubuntu:14.04   "/bin/bash"   8 minutes ago   Up 2 minutes             test
[root@myoracleworld-dev ~]# docker attach test
root@48c2a046855c:/#
root@48c2a046855c:/# read escape sequence
[root@myoracleworld-dev ~]# docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS         PORTS     NAMES
48c2a046855c   ubuntu:14.04   "/bin/bash"   9 minutes ago   Up 4 minutes             test

 

 

 

 

- docker run 명령어를 사용하게 되면, container 생성과 동시에 container 내부로 진입.

[root@myoracleworld-dev ~]# docker run -i -t ubuntu:14.04
Unable to find image 'ubuntu:14.04' locally
14.04: Pulling from library/ubuntu
2e6e20c8e2e6: Pull complete
....
Digest: sha256:60840958b25b5947b11d7a274274dc48ab32a2f5d18527f5dae2962b64269a3a
Status: Downloaded newer image for ubuntu:14.04
root@72115db97901:/#

 

 

( ※ 기존 방식은 이미지를 불러오고 컨테이너를 생성할때

    docker pull > docker create > docker start > attach 이러한 수순으로 진행되지만,

    docker run 명령어는 이미지를 불러오고 컨테이너를 생성할때

    docker start, docker attach 명령어를 자동으로 실행해줍니다. )

 

 

 

 

- docker ps / ps -a

 

현재 가동중인 container 목록을 보려면 docker ps 명령어를 사용합니다.

 

docker ps -a 옵션을 사용하게 되면 정지되었거나, 실행중인 모든 컨테이너를 볼 수 있습니다.

[root@myoracleworld-dev ~]# docker ps 
CONTAINER ID   IMAGE      COMMAND       CREATED       STATUS       PORTS     NAMES 
ebe4b647cc71   centos:7   "/bin/bash"   3 hours ago   Up 2 hours             hellocentos

 

[root@myoracleworld-dev ~]# docker ps -a 
CONTAINER ID   IMAGE          COMMAND       CREATED       STATUS                     PORTS     NAMES 
ebe4b647cc71   centos:7       "/bin/bash"   3 hours ago   Up 2 hours                           hellocentos 
4a91f2bd1bff   centos:7       "/bin/bash"   3 hours ago   Exited (127) 3 hours ago             focused_goldberg 
72115db97901   ubuntu:14.04   "/bin/bash"   3 hours ago   Exited (0) 3 hours ago               festive_goldstine

 

 

 

- 도커 컨테이너를 삭제할 때는 docker rm -f / docker container prune 명령어를 사용합니다.

 

 

   docker rm -f 는 컨테이너를 지정해서 삭제할 수 있지만,

 

   container prune 명령어를 사용하게되면 현재 중지되어있는 모든 container가 삭제되니 주의!!!

 

[root@myoracleworld-dev ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
f6ed8a037a69   centos:7   "/bin/bash"   12 seconds ago   Up 9 seconds              test
39a3ddda326c   centos:7   "/bin/bash"   11 minutes ago   Up 11 minutes             angry_lewin
[root@myoracleworld-dev ~]# docker rm -f angry_lewin
angry_lewin
[root@myoracleworld-dev ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
f6ed8a037a69   centos:7   "/bin/bash"   26 seconds ago   Up 23 seconds             test
[root@myoracleworld-dev ~]# docker container prune 
WARNING! This will remove all stopped containers. 
Are you sure you want to continue? [y/N]