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]