본문 바로가기
Study notes

Docker Container 이해하기 - (2)

by AI미남홀란드 2024. 7. 11.
728x90
###### GUI 프로그램 ######
nautilus                          # 파일탐색기
gnome-system-monitor  # 작업관리자
gedit                               # 노트패드
watch docker container ls -a   # 컨테이너 목록 조회
chrome     # 크롬 브라우저
dcrmall     #  컨테이너 전체 삭제

도커 명령어의 이해

 

도커 설치 방법

curl -sSL https://get.docker.com | sh #최신버전 설치

#docker 운영에 필요한 필수 패키치 설치
yum install -y yum-utils

#docker repository 추가 
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

#docker 설치가능 버전 확인
yum list docker-ce --showduplicates

--번외--
yum install -y docker-ce #최신버전설치
yum install -y docker-ce-<version> #(optional) 특정 도커 설치

 

도커 설치 정보 확인

## docker 데몬을 시작하고 시스템 부팅 시에 자동 시작하도록 구성
systemctl enable docker

systemctl start docker # 도커 시작

systemctl status docker

docker version # 도커버전 확인

 

# 도커 CLI

Client: Docker Engine - Community
 Version:           27.0.3
 API version:       1.43 (downgraded from 1.46)
 Go version:        go1.21.11
 Git commit:        7d4bcd8
 Built:             Sat Jun 29 00:04:07 2024
 OS/Arch:           linux/amd64
 Context:           default

---

# 도커 데몬
Server: Docker Engine - Community
 Engine:
  Version:          24.0.7
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.10
  Git commit:       311b9ff
  Built:            Thu Oct 26 09:07:45 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.7.18
  GitCommit:        ae71819c4f5e67bb4d5ae76a6b735f29cc25774e
 runc:
  Version:          1.7.18
  GitCommit:        v1.1.13-0-g58aa920
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

 

#docker info 명령어를 통해 docker 구성정보 확인

docker info

 

Docker는 리눅스 시스템의 Netfilter라는 시스템을 통해 네트워킹을 한다.

 

넷필터

 

- 리눅스 커널 내부의 네트워크 관련 프레임워크, 다양한 네트워크 연산을 핸들러 형태로 구현할 수 있는 훅을 제공

 

도커 코드 자동 완성

# Docker Command Auto-Completion 기능 사용하기 
# docker tab tab 누르면 가능
yum install -y bash-completion

curl https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker -
o /etc/bash_completion.d/docker.sh

 

watch docker container ls -a

 

도커  용어 정리

 

Glossary

Glossary of terms used around Docker

docs.docker.com

 

# ubuntu:24.04 이미지를 , 사용하겠다 -> local에 없음 -> docker registry로 들어가서 실행한다.(hub.docker.com)

[root@dockeredu ~]# docker container run -it ubuntu:24.04
Unable to find image 'ubuntu:24.04' locally
24.04: Pulling from library/ubuntu
9c704ecd0c69: Pull complete
Digest: sha256:2e863c44b718727c860746568e1d54afd13b2fa71b160f5cd9058fc436217b30
Status: Downloaded newer image for ubuntu:24.04
root@9d0b6bcd3057:/#

 

/# 쉘이 떠있어야 한다.

 

 

apt-get update; apt-get install -y net-tools

net-tools를 사용하면 ifconfig 가 된다.

 

brctl show

 

 

컨테이너 파일 시스템은  merged

 

도커 명령어의 특징 이전 명령어 / 최근 명령어

 

docker --help #이전
docker container --help #최신

docker container run --help #실행을 많이 하기 때문에

docker ps -a
docker container ps -a

# 컨테이너 실행
# - Apach web server 모든게 들어있음 실행 
docker run -d -p 8080:80 httpd:2.4

 

리눅스 chrominum에 들어가면 된다. 172.17.0.3 / http://0.0.0.0:8080에 들어가면 메인페이지가 뜬다. 

 

도커 명령어

컨테이너 목록 표시

 docker container ls -a # all
 docker container ls -q # container 아이디만 보임

 

컨테이너 라이프 사이클 명령어

docker container run # 컨테이너 생성 시작
docker container create # 컨테이너 생성 (잘 쓰진 않음)
docker container start # 정지된 컨테이너를 시작
docker container stop # 컨테이너 정지
docker container rm # 정지된 컨테이너를 삭제

 

ex)

create 

- 해당 status creat 인 모습

[root@dockeredu ~]# docker container create -it centos:7.6.1810

[root@dockeredu ~]# docker container ls -a
CONTAINER ID   IMAGE             COMMAND       CREATED          STATU                               S    PORTS     NAMES
72cf4927b6ce   centos:7.6.1810   "/bin/bash"   26 seconds ago   Creat                               ed             happy_swanson

 

run

docker container run -it centos:7.6.1810

 

stop

docker container stop [컨테이너 이름, 컨테이너 id]

 

start

docker container start [컨테이너 이름, 컨테이너 id]

 

rm

- 컨테이너가 다 날아가니 조심

docker container rm [컨테이너 이름, 컨테이너 id]
docker container rm -f [NAME] # -f는 실행중인 컨테이너도 삭제가능

 

Docker Container run

 

- 대화식 실행 옵션

docker container run -it centos #i --interactive , --tty

 

- 이름 설정 (특정 컨테이너를 이름을 할당해서 관리 가능함)

docker container run centos
docker container run --name con01 centos
docker container ls -a

 

- 백그라운드 실행 

docker container run -d --name=N01 nginx:1.25 # -d detach 옵션
docker container exec N01 cat /etc/hosts
 
curl http://172.17.0.2:80

 

- 컨테이너 로그 확인

로그를 더 딥하게 볼때 사용 가능 logs -f,-t

docker container run -d --name=T01 tomcat:8
docker container ls -a
docker container logs -ft T01 #  -t --timestamps , -f --follow

 

 

- 포트 노출

호스트 OS의 넷필터 NAT룰에 Docker Container IP가 포트 포워딩 됨 -p

docker container run -d --name N02 -p 7070:80 nginx:1.25

# 호스트의 7070 포트를 컨테이너의 8080 포트를 맵핑

iptables -t nat -vnL

 

- 환경변수 설정

-e --env list 옵션을 통해서 환경변수를 저장해서 쓴다. K8s 로 넘어가면 yaml 을 활용해서 설정을 한다

docker container run -it -e FOO=BAR -e JAVA_HOME=/usr/local/jdk1.8 centos

 

- 현재 작업 디렉터리(Current Working Directory) 설정

해당 디렉토리가 없는 경우 같이 쓴다. -w 

 docker container run -it -w=/tensorflow centos

 

- 정지된 컨테이너 일괄 삭제

docker container prune
#-f  --force  Do not prompt for confirmation

 

- docker container cp

HOST와 컨테이너간의 파일 복사

echo "Hello Docker" > hello.html
docker container run -d --name=web httpd:2.4 # 컨테이너 실행

curl http://172.17.0.2/hello.html

# 127.17.0.2/hello.html 을 접속하면 'Not Found' 뜰 것임.

#복사
docker container cp hello.html web:/usr/local/apache2/htdocs

docker container cp web:/usr/local/apache2/htdocs/index.html ~/

 

- 가동 컨테이너에서 새로운 프로세스 실행

▶ 백그라운드에서 실행되고 았는 컨테이너에 액세스하고 싶을 때
docker container attach 명령으로 연결해도 쉘이 작동하지 않는 경우에 유용함

# Usage: docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]

docker container run -d --name=web httpd:2.4

docker container attach web
-- 컨테이너의 1번 process인 httpd에게 STDIN, STDOUT을 연결해도 기타 명령을 내릴 수가 없다.
-- “ctrl + c” httpd 프로세스를 종료하면, 결국에는 1번 proces가 종료되기 때문에 컨테이너도 종료되게 된다

 

- 컨테이너 상세 정보 확인

# Usage: docker container inspect
docker container run -d --name=web httpd:2.4

docker container inspect web

 

 

728x90