
*도커 설치 [ Rocky 와 Ubuntu는 설치 방법에 차이가 있음 ]
컨테이너 기반 가상화 플랫폼으로, 애플리케이션을 개발, 배포 및 실행하기 위한 오픈 플랫폼입니다.
도커를 사용하면 애플리케이션과 그 애플리케이션의 종속성을 격리된 환경으로 패키징하여 이식성이 뛰어난 가상화된 환경에서 실행할 수 있습니다.
도커는 리눅스 컨테이너(Linux Containers) 기술을 기반으로 하며, 애플리케이션을 컨테이너로 패키징하여 호스트 시스템과는 독립된 환경에서 실행할 수 있습니다.
이를 통해 애플리케이션의 이식성, 확장성 및 효율성을 향상시킬 수 있습니다.
이미지를 다운 받는 곳?
도커 이미지를 다운로드하는 곳은 도커 허브(Docker Hub)입니다.
도커 허브는 도커 컨테이너를 빌드, 테스트, 저장 및 배포하기 위한 클라우드 기반의 이미지 레지스트리 서비스입니다.
도커 허브에는 다양한 공식 및 커뮤니티에서 제공하는 도커 이미지가 포함되어 있습니다.
필요한 이미지를 검색하고 다운로드하여 로컬 시스템에서 실행할 수 있습니다.
컨테이너란?
도커에서 컨테이너는 격리된 환경에서 애플리케이션 및 그 애플리케이션의 종속성을 실행하기 위한 실행 가능한 소프트웨어 패키지입니다.
컨테이너는 도커 이미지를 기반으로 만들어지며, 호스트 시스템과는 독립된 파일 시스템, 네트워크 및 프로세스 공간을 제공합니다.
이러한 격리된 환경을 통해 컨테이너는 이식성이 뛰어나며, 다양한 환경에서 일관된 실행을 보장합니다.
또한 컨테이너는 가벼우면서도 빠르게 생성하고 제거할 수 있어서, 애플리케이션을 효율적으로 배포하고 확장하는 데 유용합니다.
볼륨이란?
도커에서 볼륨은 컨테이너가 사용하는 데이터를 호스트 시스템과 공유하기 위한 메커니즘입니다.
볼륨을 사용하면 컨테이너 간에 데이터를 공유하거나, 호스트 시스템과 데이터를 공유할 수 있습니다.
이를 통해 데이터의 영속성을 확보하고, 컨테이너의 생명주기와는 독립적으로 데이터를 관리할 수 있습니다.
도커 볼륨을 사용하면 데이터를 컨테이너에 영구적으로 저장하고, 여러 컨테이너 간에 데이터를 공유하거나 백업할 수 있습니다.
또한 호스트 시스템과의 데이터 공유를 통해 컨테이너가 실행 중에도 데이터를 유지할 수 있습니다.
*명령어로 설치
도커 이전 버전 삭제
- docker 이전 버전 삭제
docker 업데이트
- dnf check-update
- dnf -y update ( dnf 업데이트 )
저장소 추가
- docker 저장소를 시스템에 추가
docker 설치
- docker 패키지 설치 (docker-ce)
- dnf install -y docker-ce

설치 확인
- docker version
- 시스템 영구 동작
동작 확인
- Pull: 다운 받아졌다는 것, docker engine test
- 컨테이너 2개 실행 확인
- 컨테이너 ID를 통해 삭제 (docker container rm 컨테이너 ID)
- 컨테이너가 실행중일 때는 삭제 불가능
웹 서버 만들기 (이미지 다운로드 후 동작, nginx)
- nginx 이미지 검색 (docker search nginx , stars( 별 표시, 많을수록 안정적 )
- nginx 이미지 다운로드 (docker image pull nginx)
- 이미지 다운로드 확인 ( docker image ls )
- docker 시스템 정보 (docker system info)
- docker 디스크 용량 확인
docker image 삭제
- docker image 확인 후 삭제 ( docker image rm 이미지ID )
*다운받은 이미지 동작
docker webserver 생성 ( 다운로드 받은 이미지 동작 )
- docker 컨테이너 이름을 webserver로 지정하고 포트 번호와 이미지를 지정 후 동작
- 생성한 컨테이너 확인 ( docker container ps, 백그라운드로 동작 )
- 웹 페이지에 접속해서 확인 ( http://localhost:80 )
*중지/동작 시키기
웹서버 모니터링 및 동작과 중지
- docker container stats webserver , 웹서버 모니터링
- docker container 리스트 확인 (상태 up , port 번호 바뀌었고 이름 webserver 확인)
- 다운로드 받은 이미지 확인
*일반사용자도 도커 명령어 사용할 수 있도록 권한 할당.
-이미지 관리 ( 도커 허브 )
도커 명령어 (이미지 관리)
- 이미지 관리 ( 도커 허브 )
docker [ search , image pull , ps , inspect( -i ): 자세한 정보확인, tag, rmi , login , push ]- 필터를 이용한 이미지 검색( stars 100개 이상 )
- 이미지 검색 ( 중요한 이미지 5개만 )
도커 관련 명령어 (이미지 관리)
- #docker image pull 이미지이름:버전[생략하면 최선 버전으로 다운]
- docker 이미지 다운로드 (URL에서)
#docker image pull 이미지이름:버전[생략하면 최선 버전으로 다운]

[root@www ~]# docker image list

도커 관련 명령어 ( 태그 생성 )
- 태그 생성 ( 업로드 할 때 사용 )
- docker ps -a ( stop 되어 있는 컨테이너도 보여준다, 삭제 후 이미지 삭제 가능 )
*도커 컨테이너 확인

*도커 이미지 삭제
최초 허브가입시 구글 연동 해서 가입하면 접속시 구글메일 입력하면됨.
사용자 홈디렉토리에 저장되어짐
docker hub에 로그인
- docker login 후 logout 하면 아이디와 비밀번호 입력 안해도 접속 가능
- ./docker/config.json에 아이디와 비밀번호 저장
- ./docker/config.json 내용 확인
*업로드 확인은 검색 해보기
docker hub에 이미지 업로드 ( 허브에 로그인 후 )
- 다운 받은 nginx를 태그 설정 ( test/webser : 1.0 )
- docker image push를 이용해서 태그로 만든 이미지 업로드
- 이미지 업로드 확인
- docker hub에서 이미지 업로드 확인
*컨테이너 라이프 사이클
-한꺼번에 컨테이너 삭제
*쉘 스크립트를 이용해서 컨테이너 생성

-생성된 컨테이너 일괄삭제
쉘 스크립트를 이용해서 컨테이너 생성 ( 이미지 준비 후에 )
- con.sh 파일에서 컨테이너 생성 코드 입력
- con.sh 쉘 스크립트 실행 (sh con.sh)
- 생성된 container 확인
- 생성된 container ID만 확인
- 한꺼번에 cintainer 삭제
- 삭제된 container 확인
*컨테이너 생성 옵션
*컨테이너를 생성 하면서 컨테이너 안으로 진입
*-it 옵션을 주고 실행하면 아래와 같이 컨테이너 안으로 진입이 됨.
docker create와 run ( 이미지 삭제 후 )
- docker container create 명령어로 이름과 포트번호 지정하여 container 생성 ( 이미지 자동으로 생성 )
- 생성된 container 확인
- create로 생성된 docker image(nginx) 삭제 후
- -d 옵션: 백그라운드로 동작,
- -a 옵션: add(추가),
- -i 옵션: interactive( 상호작용 모드, 입력 가능 ) ,
- -t 옵션 : ssh (terminal),
- --rm 옵션 : 컨테이너 종료시 삭제
- 8080(외부 포트), 80(내부 포트)
- docker container run 명령어로 container 생성
- 생성된 container 확인 ( 활성화된 상태 )
- 한꺼번에 container 삭제 ( docker container prune )
container 생성하면서 ssh 접속
- container 로 접속하면서 생성 ( exit로 나오기, ca735abdf355 ( container ID ) )
- 생성된 container 확인
- 명령어를 실행시키면서 container 생성
- container 한꺼번에 삭제 및 확인
-우분투 14.04버전 설치 컨테이너 안으로 진입 하고, 외부에 포트 노출 80:80 이름은 mywebserver 로 설정
우분투 container 생성 후 접속 ( 이름 지정, 포트 지정, 14.04 버전 )
- docker run -it --name mywebserver -p 80:80 ubuntu:14.04
- apt-get update
- update 이후
- apt-get install -y apache2
- apache2 다운로드
- service apache2 start
- 서비스 동작 실행
docker kill testweb ⇒ -9 생략된것 .
docker ps ⇒ Exited(137) 강제종료 137로 표시됨
docker kill -s 15 testweb -> 15은 stop 명령어와 동일 ⇒ Exited(0)
docker top 명령어와 kill 명령어 (container)
- 도커 상태 확인
- restart하면 PID, PPID가 바뀐다
- kill 명령어로 삭제 가능 , -9 옵션 생략 ( 상태: Exited (137), docker ps -a 하면 볼 수 있다 )
- kill 명령어 옵션: -s 15 ( 동작을 멈추는 것, 상태: Exited (0) )
- docker 강제 삭제 명령어, 시스템에 좋지는 않다 ( docker rm -f )

-volume 방식
볼륨 생성 확인
- 볼륨 생성 ( docker volume create ), 생성된 볼륨 리스트 확인 ( docker volume ls )
- 볼륨의 세부 정보 확인 ( inspect )
- Mount point 지점 확인 ( /var/lib/docker/volumes )
container와 연결 ( volume(저장소)를 만든 후 mysql과 연결 )
- MySQL 5.7 이미지를 사용하여 "testvol"이라는 볼륨을 사용하여 데이터를 영구적으로 저장하는 "demodb1"이라는 이름의 컨테이너 생성
- MySQL 5.7 이미지를 사용하여 "newvol"이라는 볼륨을 사용하여 데이터를 영구적으로 저장하는 "demodb1"이라는 이름의 컨테이너 생성
- 생성된 컨테이너와 볼륨 확인 ( docker inspect demodb1로 볼륨과의 마운트 확인 )
마운트 확인
- mysql 이미지 다운로드
- mysql:5.7의 볼륨 설정을 확인 ( "Volumes" 섹션에서 "/var/lib/mysql" 경로가 비어있지 않고, 빈 객체로 표시, 해당 경로가 볼륨으로 설정되어 있음 )
- 컨테이너 삭제 (docker container rm -f)
- 볼륨 삭제 (docker volume rm -f)
-시스템 내 아무곳에나 저장 가능 하기에 중요한 파일 보관시 좋음.
*bind mount 방식 생성 3가지 방식
bind 방식 ( 볼륨 관리 )
- "nginx" 이미지를 사용하여 호스트의 "/web" 디렉토리를 컨테이너 내부의 "/usr/share/nginx/html" 디렉토리에 읽기 전용으로 마운트하는 것( 컨테이너를 백그라운드에서 실행 )
- volume 생성 방식과 차이점은 volume을 생성하지 않고 컨테이너를 바로 생성
- 호스트의 "/usr/share/nginx/html" 디렉토리를 컨테이너 내부의 동일한 경로에 마운트합니다( name: w2 )
- 호스트의 "/usr/share/nginx/html" 디렉토리를 컨테이너 내부의 동일한 경로에 마운트합니다( name: w3 )
- 생성된 볼륨 확인
*생성한 컨테이너와 볼륨 삭제
컨테이너와 볼륨 삭제
- 생성된 컨테이터 삭제 ( 한번에 )
- 생성된 볼륨 삭제 ( 한번에 )