도커(Docker)는 리눅스의 응용 프로그램들을 소프트웨어 컨테이너 안에 배치시키는 일을 자동화하는 오픈 소스 프로젝트이다. 도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싸며 리눅스에서 운영 체제 수준 가상화의 추상화 및 자동화 계층을 추가적으로 제공한다. 도커는 cgroups와 커널 이름 공간과 같은 리눅스 커널, 또 aufs와 같은 유니언 가능 파일 시스템의 리소스 격리 기능을 사용하며, 이를 통해 독립적인 "컨테이너"가 하나의 리눅스 인스턴스 안에서 실행할 수 있게 함으로써 가상 머신을 시작하여 유지보수 해야 하는 부담을 없애준다.
1.2 도커(docker) 사용 도구
1.2.1 Docker Compose (해당 문서는 이 도구를 사용함)
Compose는 멀티 컨테이너 도커 애플리케이션을 정의하고 실행하는 도구이다. YAML 파일을 사용하여 애플리케이션의 서비스를 구성하며 하나의 명령을 가지고 모든 컨테이너의 생성 및 시작 프로세스를 수행한다.
1.2.2 Docker Swarm
Docker Swarm은 도커 컨테이너의 네이티브 클러스터링 기능을 제공하며 도커 엔진을 하나의 가상 도커 엔진으로 탈바꿈시킨다. 도커 1.12 이상부터 Swarm 모드가 도커 엔진에 통합되어 있다.
1.3 WordPress 란?
2003년 매트 물렌웨그가 개발한 워드프레스는 세계 최대의 오픈 소스 저작물 관리 시스템이며, 워드프레스 기반 웹사이트는 전세계 웹사이트의 30%를 차지한다.
1.4 MySQL 이란?
MySQL은 세계에서 가장 많이 쓰이는 오픈 소스의 관계형 데이터베이스 관리 시스템이다. 다중 스레드, 다중 사용자 형식의 구조질의어 형식의 데이터베이스 관리 시스템으로서 오라클이 관리 및 지원하고 있으며, Qt처럼 이중 라이선스가 적용된다.
1.5 레플리케이션(Replication) 이란?
레플리케이션(Replication)은 데이터 저장과 백업하는 방법과 관련이 있는 데이터를 호스트 컴퓨터에서 다른 컴퓨터로 복사하는 것인데 이때 다른 컴퓨터가 반드시 떨어진 지역에 있어야 하는 것은 아니다. 컴퓨터 네트워크 상태에서는 데이터 저장을 할 수 있게 하는데 로컬 데이터 물리적 기억 장치와는 완전하게 구분된다. 레플리케이션은 유명한 데이터베이스 관리 시스템 (RDBMS, Relational DataBase Management Systems)에서 추가적으로 제공하거나 여러 대의 데이터베이스 서버의 부하를 맞추어 줄 용도로 제공한다.
1.6 텐서플로(TensorFlow) 란?
텐서플로(TensorFlow)는 다양한 작업에 대해 데이터 흐름 프로그래밍을 위한 오픈소스 소프트웨어 라이브러리이다. 심볼릭 수학 라이브러리이자, 인공 신경망같은 기계 학습 응용프로그램에도 사용된다. 이것은 구글내 연구와 제품개발을 위한 목적으로 구글 브레인팀이 만들었고 2015년 11월 9일 아파치 2.0 오픈 소스 라이선스로 공개되었다.
1.7 아파치 하둡(Apache Hadoop) 이란?
아파치 하둡(Apache Hadoop, High-Availability Distributed Object-Oriented Platform)은 대량의 자료를 처리할 수 있는 큰 컴퓨터 클러스터에서 동작하는 분산 응용 프로그램을 지원하는 프리웨어 자바 소프트웨어 프레임워크이다. 원래 너치의 분산 처리를 지원하기 위해 개발된 것으로, 아파치 루씬의 하부 프로젝트이다. 분산처리 시스템인 구글 파일 시스템을 대체할 수 있는 하둡 분산 파일 시스템(HDFS: Hadoop Distributed File System)과 맵리듀스를 구현한 것이다.
2. 도커(Docker) 컨테이너 실행 및 사용법
2.1 도커(Docker)는 어떻게 작동 하나?
Docker기술은 Linux 커널과 함께 Cgroups 및 네임스페이스와 같은 커널의 기능을 사용하여 프로세스를 분리함으로써 독립적으로 실행될 수 있도록 합니다. 이러한 독립성은 컨테이너의 본래 목적입니다. 다시 말해서, 여러 프로세스와 애플리케이션을 서로 개별적으로 실행하여 인프라를 더 효과적으로 활용하고 개별 시스템을 사용할 때와 동일한 보안을 유지할 수 있습니다.
Docker를 포함한 컨테이너 툴은 이미지 기반 배포 모델을 제공하므로 여러 환경 전반에서 애플리케이션 또는 서비스를 모든 종속 항목과 손쉽게 공유할 수 있습니다. 또한 Docker는 이 컨테이너 환경 내에서 애플리케이션(또는 앱을 구성하는 결합된 프로세스) 배포를 자동화합니다.
이러한 툴은 Linux 컨테이너를 기반으로 구축되어 Docker를 사용자 친화적이고 고유하게 만들어 주므로 사용자는 그 어느 때보다도 쉽게 앱에 액세스해 빠르게 배포하고 버전 및 버전 배포를 관리할 수 있습니다.
2.2 도커(Docker) 기술이 기존의 Linux 컨테이너와 동일한가?
그렇지 않습니다. Docker 기술은 처음에 LXC 기술을 기반으로 구축되긴 했으나, 그 이후로는 종속 관계를 벗어났습니다. 하지만 대부분의 사용자는 "기존의" Linux 컨테이너와 연결지어 생각하고 있습니다. LXC는 경량의 가상화 방법으로 유용하게 사용되었지만 개발자 또는 사용자에게 우수한 경험을 제공하지는 못했습니다. Docker 기술은 컨테이너를 실행하는 기능 이상의 것을 제공하며 무엇보다도 컨테이너 생성 및 구축, 이미지 전송, 이미지 버전 관리 프로세스를 용이하게 해 줍니다.
전통적인 Linux 컨테이너는 멀티플 프로세스를 관리할 수 있는 초기화 시스템을 사용합니다. 즉, 전체 애플리케이션을 하나로 실행할 수 있습니다. Docker 기술은 애플리케이션이 개별 프로세스로 세분화되도록 하며 이를 수행할 수 있는 툴을 제공합니다. 이 세분화된 접근 방식에는 이점이 있습니다.
2.3 도커(Docker) 컨테이너의 이점은?
2.3.1 모듈성
Docker의 컨테이너화 접근 방식은 전체 애플리케이션을 분해할 필요 없이 애플리케이션의 일부를 분해하고, 업데이트 또는 복구하는 능력에 집중되어 있습니다. 사용자는 이 마이크로서비스 기반 접근 방식 외에도 SOA(service-oriented architecture)의 작동 방식과 동일하게 멀티플 애플리케이션 사이에서 프로세스를 공유할 수 있습니다.
2.3.2 계층 및 이미지 버전 제어
각 Docker 이미지 파일은 일련의 계층으로 이루어져 있으며 이 계층들은 단일 이미지로 결합됩니다. 이미지가 변경될 때 계층이 생성되고, 사용자가 실행 또는 복사와 같은 명령을 지정할 때마다 새 계층이 생성됩니다.
Docker는 새로운 컨테이너를 구축할 때 이러한 계층을 재사용하므로 구축 프로세스가 훨씬 더 빨라집니다. 중간 변경 사항이 이미지 사이에서 공유되므로 속도, 규모, 효율성이 더 개선됩니다. 계층화에는 버전 관리가 내재되어 있으며 새로운 변경 사항이 발생할 때마다 내장 변경 로그가 기본적으로 적용되므로 컨테이너 이미지를 완전히 제어할 수 있습니다.
새로운 하드웨어를 준비하고, 실행하고, 프로비저닝하고, 사용할 수 있게 하려면 일반적으로 며칠이 소요되었습니다. 많은 노력과 부가적인 업무가 필요하므로 부담도 상당했습니다. Docker 기반 컨테이너는 배포 시간을 몇 초로 단축할 수 있습니다. 각 프로세스에 대한 컨테이너를 생성함으로써 사용자는 유사한 프로세스를 새 앱과 빠르게 공유할 수 있습니다. 또한, 컨테이너를 추가하거나 이동하기 위해 OS를 부팅할 필요가 없으므로 배포 시간이 크게 단축됩니다. 이뿐만 아니라 배포 속도가 빨라 컨테이너에서 생성된 데이터를 비용 효율적으로 쉽게 생성하고 삭제할 수 있고 사용자는 우려를 할 필요가 없습니다.
즉, Docker 기술은 효율성을 중시하며 더 세분화되고 제어 가능한 마이크로서비스 기반 접근 방식입니다.
2.4 도커(docker) 및 도커 컴포즈(docker-compose) 사용 방법
도커 컴포즈(docker-compose)는 컨테이너 실행에 사용되는 옵션과 컨테이너 사이의 의존성을 모두 docker-compose.yml 파일에 저장 하여 컨테이너의 실행 및 설정 관리 한다.
## docker-compose.yml 파일이 있는 폴더로 이동 후에 아래와 같이 실행$cd./docker-compose/tenserflow# docker-compose.yml 이 있는 폴더 이동$ls-alhdocker-compose.yml# docker-compose.yml 파일 확인-rw-r--r--1rootroot79100Apr1905:46docker-compose.yml$docker-composeup-d# docker-compose.yml 에 설정된 컨테이너를 deamon 으로 실행
2.4.3 docker-compose 중지/재시작
## 중지 할 컨테이너의 설정 값이 있는 docker-compose.yml 파일이 있는 폴더로 이동 후에 아래와 같이 실행$cd./docker-compose/tenserflow# docker-compose.yml 이 있는 폴더 이동$ls-alhdocker-compose.yml# docker-compose.yml 파일 확인-rw-r--r--1rootroot79100Apr1905:46docker-compose.yml$docker-composerestart# docker-compose.yml 에 설정 된 컨테이너 재시작$docker-composedown# docker-compose.yml 에 설정 된 컨테이너 중지
2.4.4 docker 컨테이너 접속 하기(docker exec -it 사용)
## 실행된 컨테이너에 접속 하기$dockerps# docker 이미지를 보여줌CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES2f85b4b5942dtensorflow/tensorflow:latest-jupyter"bash -c 'source /et…"2hoursagoUp2hours0.0.0.0:8888->8888/tcptensorflow-jupyter$dockerexec-ittenserflow-jupyter/bin/bash# docker exec -it 옵션을 이용하여 /bin/bash 로 접속root@2f85b4b5942d:/tf#
2.4.5 docker 컨테이너 logs 확인
## 실행된 컨테이너 Log 확인$dockerlogs-ftenserflow-jupyter# 해당 시스템의 중요 Log 를 보여줌.[I 05:12:30.229 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret[I 05:12:30.664 NotebookApp] Serving notebooks from local directory: /tf[I 05:12:30.665 NotebookApp] Jupyter Notebook 6.2.0 is running at:[I 05:12:30.665 NotebookApp] http://2f85b4b5942d:8888/?token=3d3c18bfc2ebfe222e8f46245722ed7cfb387f3816398cef[I 05:12:30.665 NotebookApp] or http://127.0.0.1:8888/?token=3d3c18bfc2ebfe222e8f46245722ed7cfb387f3816398cef[I 05:12:30.665 NotebookApp] Use Control-C to stop this server and shut down all kernels (twicetoskipconfirmation).[C 05:12:30.671 NotebookApp]Toaccessthenotebook,openthisfileinabrowser:file:///root/.local/share/jupyter/runtime/nbserver-1-open.htmlOrcopyandpasteoneoftheseURLs:http://2f85b4b5942d:8888/?token=3d3c18bfc2ebfe222e8f46245722ed7cfb387f3816398ceforhttp://127.0.0.1:8888/?token=3d3c18bfc2ebfe222e8f46245722ed7cfb387f3816398cef
2.5 docker 이미지 형식
태그
설명
latest
바이너리 이미지의 최신 출시입니다. 기본값입니다.
nightly
이미지의 나이틀리 빌드입니다(불안정).
version
바이너리 이미지의 버전을 지정합니다(예: 2.1.0).
devel
개발 환경의 나이틀리 빌드입니다.
아래와 같이 TensorFlow 이미지를 다운로드 할 수 있습니다.
## 다양한 tenserflow 에 대한 이미지 $dockerpulltensorflow/tensorflow# latest stable release$dockerpulltensorflow/tensorflow:latest-jupyter# latest stable release Jupyter$dockerpulltensorflow/tensorflow:nightly-jupyter# nightly dev release Jupyter$dockerpulltensorflow/tensorflow:devel-gpu# nightly dev release w/ GPU support$dockerpulltensorflow/tensorflow:latest-gpu-jupyter# latest release w/ GPU support and Jupyter
3. WordPress, MySQL 이용하여 홈페이지 만들기 (1분 완성)
Step 1. 사전 준비 단계
폴더 구조
메인 폴더
서브 폴더
파일
설명
wordpress+mysql5.7
wp
wordpress 소스파일 저장 폴더
mysql
mysql 저장 폴더
docker-compose.yml
docker-compose.yml 설정 파일
Step 2. Docker-compose.yml 설정
docker-compose.yml
version: '2' # 파일 규격 버전
services: # 이 항목 밑에 실행하려는 컨테이너 들을 정의 ( 컴포즈에서 컨테이너 : 서비스 )
db: # 서비스 명
image: mysql:5.7 # 사용할 이미지
container_name: db # 컨테이너 이름 설정
volumes:
- ./mysql:/var/lib/mysql
restart: always
ports:
- "3306:3306" # 접근 포트 설정 (컨테이너 외부:컨테이너 내부)
environment:
MYSQL_ROOT_PASSWORD: wp
MYSQL_DATABASE: wp
MYSQL_USER: wp
MYSQL_PASSWORD: wp
wordpress:
image: wordpress:latest
container_name: wordpress
volumes:
- ./wp:/var/www/html
ports:
- "8080:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wp
WORDPRESS_DB_USER: wp
WORDPRESS_DB_PASSWORD: wp
dockerexec-itmaster-db/bin/bashmysql-uroot-pmysql> SHOWMASTERSTATUS\G #MASTER 데이터가 없음
dockerlogs-fmaster-db#에러 또는 오류 메시지 확인 docker-compose.yml파일에서volumes:에경로를확인mysql5.7-ha/conf폴더에master-db,slave-db에config_file.cnf파일및데이터확인master-db와slave-db에config_file.cnf파일확인
* master-db 또는 slave-db 가 중단 되었을 때 다시 데이터를 연동 하는 방법dockerlogs-fslave-db#로그인 확인 아래와같은에러발생시2021-04-14T08:31:54.946584Z9 [ERROR] Error reading packet from server for channel '': Client requested master to start replication from position > file size (server_errno=1236)
dockerexec-itslave-db/bin/bashmysql-uroot-p# 설정값을 확인 후 STOPSLAVE; RESETSLAVE; CHANGEMASTERTOMASTER_HOST='master-db',MASTER_USER='user001',MASTER_PASSWORD='user001pw',MASTER_LOG_FILE='mysql-bin.000010',MASTER_LOG_POS=154;STARTSLAVE; SHOWSLAVESTATUS\G
MySQL 시작 시 config_file.cnf is ignored worning 발생 시
mysql-uroot-p# 실행 시 아래에 config_file.cnf 파일에 대한 ignored 가 발생 로그가 보임SHOWMASTERSTATUS\G #상태 값이 반환 되지 않음
cd/etc/mysql/conf.d#폴더 이동ls-alconfig_file.cnf#파일은 (644) 권한 필요chmod644config_file.cnf#실행 하여 권한을 변경 함.** docker-compose.yml 파일에 volumes 에 config_file.cnf 경로를 다시 한번 확인 해야 함.
5. TensorFlow 시스템 구축 (1분 완성)
Step 1. 사전 준비 단계
폴더 구조
메인 폴더
서브 폴더
파일
설명
tensorflow
upload
tensorflow 업로드 폴더 지정
result
tensorflow 저장 폴더 지정
tmp
tensorflow 임시 저장 폴더
docker-compose.yml
docker-compose.yml 설정 파일
Step 2. Docker-compose.yml 설정
docker-compose.yml
version: '2' # 파일 규격 버전
services: # 이 항목 밑에 실행하려는 컨테이너 들을 정의 ( 컴포즈에서 컨테이너 : 서비스 )
tensorflow-jupyter: # 서비스 명
image: tensorflow/tensorflow:latest-jupyter # 사용할 이미지
container_name: tensorflow-jupyter # 컨테이너 이름 설정
volumes:
- ./tensorflow/result:/tf/tensorflow-tutorials/result # result 폴더에 결과 저장
- ./tensorflow/upload:/tf/tensorflow-tutorials/upload # upload 폴더
- ./tensorflow/tmp:/tmp # 임시 파일
restart: always
ports:
- "8888:8888" # 접근 포트 설정 (컨테이너 외부:컨테이너 내부)
docker logs -f tensorflow-jupyter # 실행 후 URL Log 확인
Docker 로그를 통해 token 을 이용하 크롬에 접속
크롬에 URL 을 정상적으로 입력 하면 아래와 같은 화면을 볼 수 있음
Step 5. TensorFlow 실행 및 저장
크롬 localhost:8888 접속 후 tensorflow-tutorials 폴더 확인
ipynb 파일 클릭 후 아래와 같이 확인
상단에 Run or restart 버튼을 클
Main 화면에서 Upload 버튼 클릭 후 파일 선택
업로드 후에 2번과 같이 진행
진행 결과 확인
결과 확인(Running) 및 파일 저장(File > Save as)
6. Hadoop 시스템 구축 (5분 완성)
Step 1. 사전 준비 단계
폴더 구조
메인 폴더
서 폴더
서 폴더
파일
설명
hadoop
logs
Hadoop 로그 파일 저장
dfs
name
NameNode 저장 위치
data
DataNode 저장 위치
namesecondary
NameNodeSecondary 저장 위치
docker-compose.yml
docker-compose.yml 설정 파일
Step 2. Docker-compose.yml 설정
docker-compose.yml
version: '2' # 파일 규격 버전
services: # 이 항목 밑에 실행하려는 컨테이너 들을 정의 ( 컴포즈에서 컨테이너 : 서비스 )
hadoop-dev: # 서비스 명
image: harisekhon/hadoop-dev # 사용할 이미지
container_name: hadoop-dev # 컨테이너 이름 설정
restart: always
volumes:
#- ./hadoop/dfs/name:/tmp/hadoop-root/dfs/name
#- ./hadoop/dfs/data:/tmp/hadoop-root/dfs/data
#- ./hadoop/dfs/namesecondary:/tmp/hadoop-root/dfs/namesecondary
- ./hadoop/logs:/hadoop/logs
ports:
- 8042:8042 # node
- 8088:8088 # cluster
dockerexec-ithadoop-dev/bin/bash[root@4bb51d4c894c]# hadoop fs -ls /data_outFound2items-rw-r--r--1rootsupergroup02021-04-2100:53/data_out/_SUCCESS-rw-r--r--1rootsupergroup242021-04-2100:53/data_out/part-r-00000[root@4bb51d4c894c]# hadoop fs -cat /data_out/*count1812length13184[root@4bb51d4c894c]### ---> 컨테이너 재시작 또는 중지 후 시작
docker logs -f hadoop-dev (hadoop-dev log 확인)
docker-compose.yml 의 volumes 파라미터 경로 확인
hadoop-dev log 확인
PSC:\Users\user1\docker-compose\hadoop>dockerlogs-fhadoop-devGeneratingpublic/privatersakeypair.Youridentificationhasbeensavedin/root/.ssh/id_rsa.Yourpublickeyhasbeensavedin/root/.ssh/id_rsa.pub.Thekeyfingerprintis:SHA256:L9lYtwzxrlF6HqevI8yaUlXhuoihLxHNrwIMXjv1Yowroot@2d5becf8894fThekey's randomart image is:+---[RSA 1024]----+| .. || .. || o ... ||. ...o .+ ||.o. =.o.S.+ + || .oE.= +oB O . || .+.oo=o* * . || o.o o+=.+ || o..o...++. |+----[SHA256]-----+'/root/.ssh/id_rsa.pub' -> '/root/.ssh/authorized_keys'mode of '/root/.ssh/authorized_keys' changed from 0644 (rw-r--r--) to 0400 (r--------)Generating SSH2 RSA host key: [ OK ]Generating SSH2 ECDSA host key: [ OK ]Generating SSH2 ED25519 host key: [ OK ]
docker-compose.yml 의 volumes 경로 확인
version: '2' # 파일 규격 버전
services: # 이 항목 밑에 실행하려는 컨테이너 들을 정의 ( 컴포즈에서 컨테이너 : 서비스 )
hadoop-dev: # 서비스 명
image: harisekhon/hadoop-dev # 사용할 이미지
container_name: hadoop-dev # 컨테이너 이름 설정
restart: always
volumes:
- ./hadoop/dfs/name:/tmp/hadoop-root/dfs/name
- ./hadoop/dfs/data:/tmp/hadoop-root/dfs/data
- ./hadoop/dfs/namesecondary:/tmp/hadoop-root/dfs/namesecondary
- ./hadoop/logs:/hadoop/logs
ports:
- 8042:8042 # node
- 8088:8088 # cluster
- 50070:50070 # dfshealth
- 50075:50075 # datanode
- 50090:50090 # status
docker-compose.yml 파일을 다운로드 받아서 시작
Step 6 를 다시 한번 해 본다
$dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEtomcatlatestc43a65faae573daysago667MB$dockerhistoryc43a65faae57# image의 history 를 확인 IMAGECREATEDCREATEDBYSIZECOMMENTc43a65faae573daysago/bin/sh-c#(nop) CMD ["catalina.sh" "run"] 0B<missing> 3 days ago /bin/sh -c #(nop) EXPOSE 8080 0B<missing> 3 days ago /bin/sh -c set -eux; nativeLines="$(catalin…0B<missing> 3 days ago /bin/sh -c set -eux; savedAptMark="$(apt-m…20.3MB<missing> 3 days ago /bin/sh -c #(nop) ENV TOMCAT_SHA512=4a82ed5… 0B<missing> 3 days ago /bin/sh -c #(nop) ENV TOMCAT_VERSION=9.0.46 0B<missing> 3 days ago /bin/sh -c #(nop) ENV TOMCAT_MAJOR=9 0B<missing> 3 days ago /bin/sh -c #(nop) ENV GPG_KEYS=05AB33110949… 0B<missing> 3 days ago /bin/sh -c #(nop) ENV LD_LIBRARY_PATH=/usr/… 0B<missing> 3 days ago /bin/sh -c #(nop) ENV TOMCAT_NATIVE_LIBDIR=… 0B<missing> 3 days ago /bin/sh -c #(nop) WORKDIR /usr/local/tomcat 0B<missing> 3 days ago /bin/sh -c mkdir -p "$CATALINA_HOME" 0B<missing> 3 days ago /bin/sh -c #(nop) ENV PATH=/usr/local/tomca… 0B<missing> 3 days ago /bin/sh -c #(nop) ENV CATALINA_HOME=/usr/lo… 0B<missing> 4 days ago /bin/sh -c #(nop) CMD ["jshell"] 0B<missing> 4 days ago /bin/sh -c set -eux; arch="$(dpkg--print-…342MB<missing> 4 days ago /bin/sh -c #(nop) ENV JAVA_VERSION=11.0.11+9 0B<missing> 4 days ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0B<missing> 4 days ago /bin/sh -c #(nop) ENV PATH=/usr/local/openj… 0B<missing> 4 days ago /bin/sh -c { echo '#/bin/sh'; echo 'echo "$J… 27B<missing> 4 days ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/local/… 0B<missing> 4 days ago /bin/sh -c set -eux; apt-get update; apt-g… 11.1MB<missing> 5 days ago /bin/sh -c apt-get update && apt-get install… 146MB<missing> 5 days ago /bin/sh -c set -ex; if ! command -v gpg > /… 17.5MB<missing> 5 days ago /bin/sh -c set -eux; apt-get update; apt-g… 16.5MB<missing> 5 days ago /bin/sh -c #(nop) CMD ["bash"] 0B<missing> 5 days ago /bin/sh -c #(nop) ADD file:1a1eae7a82c66d673… 114MB
4. docker images 삭제
4.1 docker images 를 rmi 또는 rmi -f 로 이미지 삭제(rmi or rmi -f command)
docker rmi 또는 rmi -f 로 이미지 삭제(rmi Command 는 이미지 삭제)
$dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEtomcat<none>c0e850d7b9bb3weeksago667MBtomcat10.0.5-jdk8-openjdk698d4f634b6a3weeksago534MB$dockerrmic0e850d7b9bb# docker image 삭제 Untagged:tomcat@sha256:0509684774ac53d8b152f4a50dd92889218a8633c0feddb4b35d092e55cd215dDeleted:sha256:c0e850d7b9bb0aa55db12991bd0fe825cdab4f5d4be72b2a94cc760bcc3aa82fDeleted:sha256:de48848504882240b92b703da9601af0709e38a64a9a40a07109b78446aa9e95Deleted:sha256:1a0e354e31a0ab7456bbad4f060ea6c6f7ab7b144dc74c874bf689c7e519e27cDeleted:sha256:cd25cd758181de964bdfb328f5c630c25263557f5a46793356c93e0e369af7a4Deleted:sha256:b824ca3e73f4984338fc3eb212702bcadd7770320c8297fc21b2d1d265146d16Deleted:sha256:d8b838beea6f90d6556650b670930f58d16bf0007b1a7d9effe3dd1735fdfa8d$dockerrmi-f698d4f634b6a# 컨테이너와 이미지를 강제로 삭제 Untagged:tomcat:10.0.5-jdk8-openjdkUntagged:tomcat@sha256:d71aea6d7ea381800fe822bd4703f618f1fa5d549d95745fe2f9307747d38f94Deleted:sha256:698d4f634b6a5d5ff99f8e283ef79d7a4bffdf57555755d6684d4fae111cb9b5Deleted:sha256:9e223a6dc64bb093d14d86326d1ba3be286b7147ab92e50ef0d63f5e1c91e0caDeleted:sha256:a0eb2d97f87c1451c26f62d850b7b940bbe051496bd1fc75145cb64503754d82Deleted:sha256:db7de79a03f68b3e8f9e4d2df4067151c5974d3b917bcc4d589e1e80385651beDeleted:sha256:322cc15a236c54f0447628c4203d59a01f99ff6719d5ffa184ef629bfc2b3381Deleted:sha256:9ed7fb822f948a4b78dfcb7e19cf7a903fc735ee2e624a38174d641f91fb3ae4Deleted:sha256:3f61a2fb8ca663bf88786884ba5f5be3274c91ee82c1ae9bb36bb1ad1fa0b3d0Deleted:sha256:ac996dca9c2f86e5d2744187de88cd328f12dde417a7950dff33448906228ae3Deleted:sha256:e4ed057c6550560fb44b9146dadd5c62bfc00404ba69937c89a44e10485c9010Deleted:sha256:985d0a2cd810a6fc7b68886aee94ee060acd63e122a1def04370dac5fa9d05f6Deleted:sha256:e2c6ff46235709f5178ab7c1939f4fba7237ffde84e13b1582fa5f0837c1d978
5. docker container 실행 및 접속 방법
5.1 docker container 실행 및 접속 방법(run/attach command :: -it[Shell connect], -d[background])
docker run 으로 실행(run Command 는 컨테이너 실행)
$dockerrun-itubuntu/bin/bash# ubuntu 실행 후 bash 접속 root@611214af2b73:/#exit$dockerps# docker container 가 실행 중인 리스트 CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESeeef4fb61940ubuntu"/bin/bash"4secondsagoUp3secondssuspicious_cerf$dockerps-a# docker container 의 종료된 리스트 확인 CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESeeef4fb61940ubuntu"/bin/bash"8secondsagoExited (0) 6 seconds ago suspicious_cerf
docker run 으로 실행(run Command 는 컨테이너 실행)
$dockerrun-dubuntu# ubuntu 를 Background 실행 $dockerps# docker container 가 실행 중인 리스트 CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESeeef4fb61940ubuntu"/bin/bash"4secondsagoUp3secondssuspicious_cerf$dockerexec-iteeef4fb61940/bin/bash# 실행 된 container 에 bash 로 접속 root@611214af2b73:/#exit
실행 중인 container 에 접속
$ docker attach eeef4fb61940 # 실행 중인 container 에 접속하기
root@611214af2b73:/# exit
5.2 docker container 실행 방법(start command)
docker start 로 실행(start Command 는 종료된 컨테이너 실행)
$dockerps-a# 종료된 컨테이너 검색 CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES80d50a1f66e3ubuntu"/bin/bash"7minutesagoExited (0) 7 minutes ago vibrant_bouman$dockerstart80d50a1f66e3# 종료된 컨테이너 실행 80d50a1f66e3$dockerps# 실행 완료 후 종료 CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES$dockerps-a# 종료된 컨테이너 상태 확인 CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES80d50a1f66e3ubuntu"/bin/bash"7minutesagoExited (0) 11 seconds ago vibrant_bouman
5.3 docker container 실행 방법(restart command)
docker restart 로 실행(restart Command 는 시작 또는 종료된 container 를 재시작)
$dockerps-a# 종료된 컨테이너 검 CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES80d50a1f66e3ubuntu"/bin/bash"7minutesagoExited (0) 11 seconds ago vibrant_bouman$dockerrestart80d50a1f66e3# 종료된 컨테이너 재시작 80d50a1f66e3$dockerps-a# 컨테이너 확인 CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES80d50a1f66e3ubuntu"/bin/bash"11minutesagoExited (0) 7 seconds ago vibrant_bouman
6. docker container 중지 방법
6.1 docker container 중지 방법(stop command)
docker stop 으로 종료(stop Command 는 container 종료)
$dockerps# 컨테이너 검색 CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES80d50a1f66e3ubuntu"/bin/bash"7minutesago60secondsagovibrant_bouman$dockerstop80d50a1f66e3# 컨테이너 종료 80d50a1f66e3$dockerps-a# 컨테이너 확인 CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES80d50a1f66e3ubuntu"/bin/bash"7secondsagoExited (0) 7 seconds ago vibrant_bouman
7. docker container 삭제
7.1 docker container 삭제 방법(rm command)
docker rm 으로 container 삭제(rm Command 는 container 삭제)
$dockerps-a# 종료된 컨테이너 검색 CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES4fd7ed2b06f9ubuntu"/bin/bash"2daysagoExited (0) 2 days ago youthful_grothendieck32840b2b7e9bubuntu"/bin/bash"8secondsagoExited (0) 8 seconds ago thirsty_dhawan$dockerrm4fd7ed2b06f9#컨테이너 삭제 4fd7ed2b06f9$dockerrm $(dockerps-a-q) # 모든 컨테이너 삭제 32840b2b7e9b$dockerps-a# 종료된 컨테이너 확인CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
8. docker logs 확인
8.1 docker container 의 log 확인(logs or logs -f -t command)
docker container 의 log 를 확인(logs -f 확인)
$dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES648a49d08fe7ubuntu"/bin/bash"3minutesagoUp3minutesbusy_carver$dockerlogs648a49d08fe7# 현재 기준의 Log 만 보여줌 $dockerlogs-f648a49d08fe7# 실시간 log 를 보여줌 $dockerlogs-f-t648a49d08fe7# Server TimeStamp log 를 보여줌
9. docker stats/top 확인
9.1 docker stats 확인
docker container 의 시스템 상태 확인
$dockerstats648a49d08fe7# 컨테이너의 상태를 보여줌 CONTAINERIDNAMECPU%MEMUSAGE/LIMITMEM%NETI/OBLOCKI/OPIDS648a49d08fe7busy_carver0.00%2.879MiB/11.95GiB0.02%1.26kB/0B0B/0B1
9.2 docker top
docker container 의 process 상태 확인
$dockertop648a49d08fe7# 컨테이너 process 상태 확인 UIDPIDPPIDCSTIMETTYTIMECMDroot21532132003:04?00:00:00/bin/bashroot22282153003:24?00:00:00perl
10. docker container 파일 복사
10.1 docker container 파일 복사(container 에서 localhost 로 복사 하기)
$dockerps# 실행 중인 container 확인 CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES314a7288e569ubuntu"/bin/bash"2minutesagoUp2minuteslaughing_euclid$dockerps-a# 중지 또는 실행 중인 container 확인 CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES314a7288e569ubuntu"/bin/bash"2minutesagoUp2minuteslaughing_euclid648a49d08fe7ubuntu"/bin/bash"3minutesagoUp3minutesbusy_carver