#####. docker
###. docker 설치
#. net filter
- 리눅스의 network는 결국 패킷으로 정보를 주고 받는다.
- application 패킷을 까보면 많은 정보들이 있다 대표적인 것이 https 프로토콜이다.
- 리눅스에서 소스와 타겟 패킷을 관리하는 것은 커널의 하위 시스템으로 돌고 있는 netfilter이다.
- firewall은 netfilter정책의 iptables의 명령어로 설정하는 것이다.
- 그래서 방화벽은 내려야한다.
- iptables -t filter -vnL
: -v: 상세한 출력을 표시합니다. 패킷 수와 바이트 수도 포함됩니다.
: -n: 숫자 형태로 IP 주소와 포트 번호를 표시합니다. 호스트 이름이나 서비스 이름으로 변환하지 않습니다.
: -L: 규칙 목록을 나열합니다.
- 그리고 selinux도 해제한다.
###. 설치
#. 운영에 필요한 필수 패키지를 설치
- yum-utils
: yum 명령어와 관련된 유틸리티를 제공하며, 패키지 설치, 업데이트, 제거, 저장소 관리, 의존성 확인 등 다양한 작업을 수행
- device-mapper-persistent-data
: Device Mapper의 영속 데이터 저장을 위한 라이브러리와 도구를 제공하여 볼륨 그룹, 논리 볼륨 등을 관리하는 데 사용
- lvm2
: Logical Volume Manager(LVM) 파티션, 볼륨 그룹, 논리 볼륨의 생성, 확장, 축소, 이동 등의 작업을 수행
- 명령어 입력
: yum install -y yum-utils lvm2
- docker repository 추가
: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- yum install -y docker-ce 해당 명령어로 도커 설치
: systemctl enable docker
: systemctl start docker
: systemctl status docker
- ifconfig 명령어로 docker0 라는 네트워크 카드가 붙은 것을 확인할 수 있다.
- 앞서 배웠던 network space 공간이 확보 된 것을 확인 할 수 있다.
- docker 명령어 --help의 사용법
- docker run -d -p 8080:80 httpd:2.4
- 아래와 같이 local에서는 172.21.111.112 : 8080으로 vm의 ip주소 값을 갖는다.
- vm에서는 docker의 ip를 받는다.
- iptables -t filter -vnL
- iptables -t nat -vnL
#. docker container ls
- 도커 컨테이너의 목록을 표시할 때 쓰인다.
- option으로는
: --all : -a : 모든 컨테이너를 표시
: --filter filter : -f : 필터링 할 조건
: --quiet : -q : 컨테이너의 id만 표시 : docker container rm -f $(docker container ls -aq) 모든 컨테이너 삭제 유용
###. docker lifecycle
- 도커의 라이프 사이클은 아래 그림과 같다.
#. docker container create
- docker container create [option] image [command] [arg...]
- 컨테이너를 생성하고 실행하지는 않음
- 명령어로는 : docker container create -it centos:7.6.1810
- status에서 created인 상태를 확인 할 수 있다.
#. docker container start
- 컨테이너를 시작하는 명령어
- 옵션
: --attach -i : 표준 출력, 표준 에러를 표현
: --interactive : -i : 컨테이너의 표준 입력에 접근
#. docker container rm
- 컨테이너를 삭제 시켜주는 명령어
- 옵션
: --force : -f : 운영중인 컨테이너도 강제 종료
: --volumes : -v : 컨테이너의 볼륨을 제거
- 추가로 위에서 설명한 것 처럼 docker container rm -f $(docker container ls -aq) 이 명령어를 사용하면 다 지울 수 있다.
&&. 여기서의 볼륨은 컨테이너 내부의 데이터를 영구적으로 보존하기 위해 사용되며, 컨테이너가 삭제되어도 데이터가 유지됨, 따라서 볼륨을 제거하면 해당 볼륨도 할께 삭제 한다는 의미
###. docker container run
#. -i, -t
- 생성된 도커를 실행하는 기능
- 옵션
: --interactive : -i : 컨테이너가 터미널에 연결되지 않은 상태에서도 STDIN을 계속해서 열어두라는 의미
: 백그라운드에서 실행되거나 다른 프로세스와 상호작용할 때 STDIN을 통해 입력을 계속 받음
: --tty : -t : "Allocate a pseudo-TTY"라는 명령은 가상의 터미널을 할당하여 컨테이너 내부의 프로세스가 터미널과 상호작용할 수 있도록 만듬
: 컨테이너 내부의 프로세스에 터미널 입력을 전달하고, 터미널 출력을 받을 수 있습니다. 이는 대화형 세션을 유지하거나 터미널 명령어를 실행하는 등의 작업에 유용
#. --name string
- 컨테이너의 이름을 지정
- docker container run --name con01 centos
#. --detach : -d
- 컨테이너를 백그라운드에서 실행하고 컨테이너 ID를 출력
- 컨테이너의 고유한 식별자인 컨테이너 ID를 출력하라는 의미.
- 컨테이너를 백그라운드에서 실행한다는 것은 컨테이너를 백그라운드에서 독립적으로 실행하여, 현재 터미널 세션에 종속되지 않고 실행되도록 하는 것을 의미.
- 이렇게 하면 컨테이너가 실행 중일 때 터미널 세션을 사용할 수 있고, 다른 작업을 수행할 수 있게 됨
#. --follow : -f
#. --timestamps : -t
- 위는 로그를 확인하는 명령어로
- 형식은 docker container logs [option] [container name]
- -f : 출력되는 로그를 따라가는 것
- -t : timestamps 를 출력
#. port
- 호스트의 포트를 컨테이너의 포트로 매핑
- --publish list : -p
- docker container run -d --name T01 -p 7070:8080 tomcat:6
#. docker env (환경변수)
- 도커에 환경변수를 추가하는 명령어
- 옵션
: --env list : -e : 환경변수를 추가
: --env -file
#. --workdir string : -w
- 현재 작업 디렉토리 설정 : 해당 디렉토리가 없으면 생성
- docker container run -it -w=/tensorflow centos
#. prune
- 사전적 의미 : 가지치기 / 필요없는 부분을 제거
- docker container prune
#. docker container cp
- echo "Hello Docker" > hello.html
- docker container cp hello.html web:/usr/local/apache2/htdocs
#. docker container exec
- 백그라운드에서 실행되는 컨테이너에 접속할 때 유용
- 명령어는 docker container exec [option] [container command] [arg..] 형식으로 한다.
- --interactive : -t : 접속 되지 않았다면 표준 입력을 열어주고 유지시킨다.
- --tty : -t : llocate a pseudo-TTY는 의사-TTY를 생성하고, 마스터와 슬레이브 파일 디스크립터를 반환하는 작업을 의미
- attach를 사용해도 ctrl + c로 나와야 함으로 해당 컨테이너는 exited 된다.
#. docker container diff
- 컨테이너 파일 시스템의 변경내역 확인
- docker container diff [container names]
#. docker container inspect
- 컨테이너의 상세 정보 확인
- docker container insperct [container names]
'IT' 카테고리의 다른 글
CentOS 7 설치 VirtualBox7 다운로드부터 설치까지 차근차근!! (0) | 2023.07.19 |
---|---|
CNCF란?? 오픈 허브?? 알기 쉽게 풀어 쓴 개념 (0) | 2023.07.19 |
프로세스 개요 (0) | 2023.07.18 |
리눅스 쉘 개요 및 이해 (0) | 2023.07.18 |
가상 메모리 (0) | 2023.07.17 |