일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 리눅스 파일동기화
- 3D프린터
- 네이버클라우드
- octoprint
- data serialization formats
- docker container
- nas
- 3D 프린터 용어
- 데이터 직렬화 포맷
- 3D모델링
- Token인증방식
- IoTNetwork
- kubernetes
- 3D프린터 입문
- git
- NAS HDD교체
- Kotlin
- github
- ci/cd
- linux job
- OnlineIDE
- Notification
- C언어
- Jenkins
- 3D
- 3d프린터 초보
- 코틀린개발환경
- docker
- 3D프린터입문
- gitlab
- Today
- Total
0과 1을 공부하다.
[Docker] Docker 맛보기 - 컨테이너 실행/중단 (2) 본문
본 게시물에서는 리눅스에 docker를 설치한 이후에 image를 내려받고 실행 및 중단하는 방법에 대해 기술한다.
Docker client - server
도커(Docker)는 client - server 구조이다. Docker에서 Client와 Server가 하는 각각의 역할은 아래와 같다.
1. 도커 클라이언트 (Docker Client)
- 도커 명령어를 실행하고 도커 호스트와 상호 작용하는 사용자 인터페이스
- CLI(Command Line Interface)를 통해 사용자가 컨테이너를 생성하고 관리할 수 있음
2. 도커 서버 (Docker Server 또는 Docker Daemon):
- 도커 엔진이라고도 불리며, 컨테이너를 관리하고 실행하는 주요 역할을 수행함
- REST API를 통해 클라이언트 요청을 받아들이고, 컨테이너를 생성하거나 관리하는 등의 작업을 수행함
즉, 우리가 도커를 이용하여 원하고자 하는 목적을 달성하기 위해서는 도커 클라이언트를 통해 CLI를 통해 적절한 명령어를 전달해야 한다.
Docker image
- Docker image는 애플리케이션을 실행하기 위한 가상화된 환경을 포함하는 패키지이며, 컨테이너라고 불리는 가상 환경에서 실행된다.
- 도커 이미지는 여러 계층으로 구성되어 있으며, 각 계층은 파일 시스템의 변경 사항을 캡처한다. 이미지의 각 계층은 이전 계층을 기반으로 만들어지며, 파일이나 디렉토리가 추가, 수정 또는 삭제된다.
- 이미지는 Dockerfile이라는 특수한 파일에 정의되며, 개발자는 Dockerfile을 사용하여 필요한 소프트웨어 및 라이브러리를 설치하고 구성할 수 있다.
- 도커 이미지는 도커 허브(Docker Hub)와 같은 리포지토리에 저장되며, 필요할 때 리포지토리에서 이미지를 다운로드하여 사용할 수 있다.
아래는 Docker image를 관리하는 명령어를 기술한다.
- 시스템 이미지 목록 조회
$ docker image ls
- Official Image pull
$ docker pull [image_name]
# ex. rockylinux 8 pull
$ docker pull rockylinux:8
- User Image pull
$ docker pull [user_name]/[repository_name]:[tagname]
- Image commit
$ docker commit git{컨테이너 이름} ubuntu:git{태그} # git이라는 컨테이터를 우분투 git 태그로 커밋 하겠다는 뜻
- image remove
$ docker rmi [이미지 ID] # 특정 이미지를 삭제함.
$ docker image prune -a --force # 모든 이미지를 삭제함. --force 플래그를 사용하여 사용자 확인을 요구하지 않고 즉시 삭제 가능
네트워크 생성 / 수정 / 제거
- 네트워크 목록 확인
$docker network ls
위 명령어를 통해 목록을 살펴보면 아래와 같이 기본으로 bridge, host, none 이 존재한다.
NETWORK ID NAME DRIVER SCOPE
fbc7e43d07d6 bridge bridge local
8ecaca286a39 host host local
04625adda5bd none null local
bridge는 host 아래 동적할당 네트워크, host는 host와 동일한 네트워크, none은 네트워크가 없는 상태를 의미한다.
- 네트워크 상세정보
$docker network inspect [network_name]
- 컨테이너 네트워크 확인
$ docker container inspect [컨테이너명]
- 네트워크 생성
$ docker network create [option] network
#option
--driver, -d 네트워크 브리지 또는 오버레이 (기본값 : bridge)
--ip-range 컨테이너에 할당하는 IP 주소의 범위를 지정
--subnet 서브넷을 CIDR 형식으로 지정
--ipv6 IPv6 네트워크 유효화 여부(true/false)
-label 네트워크에 설정하는 라벨
--gateway 게이트웨이 지정
- 컨테이너 적용
run명령어를 통해 컨테이너를 생성할 때 --net 옵션을 통해 네트워크 이름을 지정하고 --add-host=[hostname:IP_Addr]으로 컨테이너의 /etc/hosts에 호스트명과 IP 주소를 정의한다.
$ docker run --net test_net --add-host=[test:127.0.0.1]
- 네트워크 삭제
$ docker network rm [network_name]
- Static IP 할당
1. 네트워크 생성
$ docker network create --subnet 10.52.3.0/24 --gateway 10.52.3.1 --driver host testnet
볼륨 생성 / 수정 / 제거
- volume 생성
$ docker volume create [볼륨명]
- volume 조회
$ docker volume ls
- volume 상세정보
$ docker volume inspect [볼륨명]
[
{
"CreatedAt": "2022-08-10T15:53:10+09:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/test/_data",
"Name": "test",
"Options": {},
"Scope": "local"
}
]
- volume 마운트
$ docker run -v [volume_name]:container_mount_dir]
# ex
$ docker run -v test:/root/test
- volume 삭제
$ docker volume rm [volume_name]
container 생성 / 삭제
- 시스템 내 생성된 컨테이너 목록
$ docker container ls (실행중)
$ docker container ls -a (모든 항목)
- 컨테이너 생성 및 실행
$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
# options
-d detached mode 흔는 백그라운드 모드
-p 호스트와 컨테이너의 포트를 연결 (포워딩) ex) 10443/443 이라면 좌측은 호스트PC, 우측은 도커 내부
-v 호스트와 컨테이너의 디렉토리를 연결 (마운트)
-e 컨테이너 내에서 사용할 환경변수 설정
–-name 컨테이너 이름 설정
–rm 프로세스 종료시 컨테이너 자동 제거
-it -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션
–link 컨테이너 연결 [컨테이너명:별칭]
--net 네트워크 설정
--privileged Privileged 모드로 실행
# ex. rockylinux 8
$ docker run -it rockylinux:8 /bin/bash
- 컨테이너 삭제
$ docker rm [container_id]
container 실행
- 컨테이너 실행/중단/재시작
$ docker start [container_name]
$ docker stop [container_name]
$ docker restart [container_name]
- Foreground / Background 전환
1. Foreground 전환
$ docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
# [OPTIONS]은 run명령어의 옵션과 같다.
ex. docker exec -it test_container /bin/bash
2. Background 전환
> Ctrl + P,Q
- 컨테이너 삭제
$ docker rm
- 컨테이너 전부삭제
$ docker rm -f $(docker ps -aq)
- container 내부에서 systemctl 명령어 사용 [centos/rocky]
centos 또는 rocky 컨테이너 생성 후 내부에서 systemctl 명령어를 사용 할 경우 "System has not been booted with systemd as init system (PID 1). Can't operate." 에러와 함께 실행되지 않는다.
이를 해결하기 위해 컨테이너를 생성 할 때 -privileged 파라미터로 전달하고 실행 스크립트를 /sbin/init 로 지정한다.
$ docker run --privileged -d --name <컨테이너이름> <이미지이름> /sbin/init
이후 컨테이너에 bash 쉘로 접근하기 위해 아래 명령어로 접근한다.
$ docker exec -it <컨테이너이름> bash
container Log
$ docker logs -f {container_name}
# -f, --follow : 로그 결과를 실시간으로 따라감
# --tail: 로그에서 보고 싶은 마지막으로 보고 싶은 줄의 수를 지정함.
container 상태 확인
$ docker ps # 시스템에 실행중인 컨테이너 확인 (실행중만)
$ docker ps -a # 시스템에 실행중인 컨테이너 확인 (전부)
ETC
- Docker System Data 정리
$ docker system prune -a -f # Docker 시스템에서 사용하지 않는 데이터를 강제로 삭제하는 데 사용.
# a, -all : 모든 사용하지 않는 데이터를 삭제하는 옵션. 사용되지 않는 이미지, 컨테이너, 볼륨 및 네트워크가 모두 삭제.
# f, -force : 삭제 작업을 강제로 실행하는 옵션. 사용자에게 확인을 요구하지 않고 즉시 삭제를 수행.
참고 사이트
- [Docker] Docker 맛보기 - 특징과 설치 (1) 와 같음
※ 본 게시글의 정보가 잘못 되었거나 부족한 부분에 대한 피드백을 환영합니다.
* CopyRight 2024. Jay Park All rights reserved.
'Study > Server' 카테고리의 다른 글
[Kube] Kubernetes - 실습 환경 구성 (3) (0) | 2024.07.16 |
---|---|
[Kube] Kubernetes - 특징 및 아키텍처 (2) (0) | 2024.07.16 |
[Kube] Kubernetes - 컨테이너 오케스트레이션이란 ? (1) (0) | 2024.07.15 |
[Docker] Docker 맛보기 - Dockerfile/Docker-Compose (3) (0) | 2024.04.12 |
[Docker] Docker 맛보기 - 특징과 설치 (1) (0) | 2022.08.11 |