리눅스 환경위에서 이미지 파일을 컨테이너화 시켜 프로세스를 운영체제에 종속받지 않도록 만들어 이식성을 증가시킨다.
(리눅스 환경위에서 도커를 동작시켜야 하지만 도커를 설치함과 동시에 도커가 윈도우 또는 맥에서 리눅스 가상운영체제를 구축하기 때문에 사용자는 리눅스 환경을 구축하기 위한 신경을쓸 필요가 없다)
WSL(windows subsystem from linux) – 윈도우 에서 리눅스를 사용하기 위한 시스템
이미지(Image)를 실행한 상태로, 응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징 or 캡슐화하여 격리된 공간에서 프로세스를 동작시키는 기술이다.
Software A와 B가 동일한 Library를 사용하지만 서로 다른 버전을 필요로 하는 경우라던지 두 software의 운영 체제가 다를 경우 등 다양한 경우에서 문제가 발생할 수 있기 때문에 이러한 문제점을 해결하기 위해 사용한다.
도커는 이미지를 만들기 위해 Dockerfile이라는 파일에 자체 DSLDomain-specific language언어를 이용하여 이미지 생성 과정을 적는다.
도커에서 서비스 운영에 필요한 서버 프로그램, 소스코드 및 라이브러리, 컴파일된 실행 파일을 묶는 형태를 Docker Image라한다. 다시 말해, 특정 프로세스를 실행하기 위한(즉, 컨테이너 생성(실행)에 필요한) 모든 파일과 설정값(환경)을 지닌 것으로, 더 이상의 의존성 파일을 컴파일하거나 이것저것 설치할 필요 없는 상태의 파일을 의미한다. 예를 들어 Ubuntu이미지는 Ubuntu를 실행하기 위한 모든 파일을 가지고 있으며, Oracle 이미지는 Oracle을 실행하는데 필요한 파일과 실행명령어, port 정보 등을 모두 가지고 있다.
이미지는 컨테이너를 실행하기 위한 소스, 환경설정등 모든 정보를 담고 있기 때문에 수백MB가 넘어갈 수 있다. 하지만 소스코드가 수정될 때마다 매번 수백MB를 다운받게 된다면 효율성이 매우 떨어지기 때문에 이미지를 레이어(계층)으로 구성하여 필요한 레이어만 수정 할 수 있게한다.
도커파일을 작성에 build 명령어를 통해 이미지를 생성하는 방법
현재 실행되는 컨테이너를 commit 명령어를 통해 캡처하여 이미지를 생성하는 방법
실행하기
docker run [OPTIONS] IMAGE[:TAG|@DIGEST][COMMAND] [ARG...]
컨테이너 목록 확인
docker ps [OPTIONS]
컨테이너 제거
docker rm [OPTIONS] CONTAINER [CONTAINER...]
이미지 목록 확인
docker images [OPTIONS]REPOSITORY[:TAG]]
이미지 다운로드 하기
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
이미지 삭제하기 – 컨테이너가 실행중인 이미지는 삭제되지 않음
docker rmi [OPTIONS] IMAGE [IMAGE...]
컨테이너 명령어 실행하기 – 실행중인 컨테이너에 들어가 컨테이너 관리
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
컨테이너 로그 보기
docker logs [OPTIONS] CONTAINER
톰캣 이미지 다운 – docker pull tomcat (https://hub.docker.com)
새로운 컨테이너 생성하기
1) 새로운 컨테이너 실행
포워딩이란? 로컬8080포드로 입력이 들어오면 컨테이너의 80번 포트로 연결시킴
2) 이미 생성된 컨데이너실행하기
아래의 옵션추가가능
오류 - 2번 과정을 수행하고 로컬의8080포트에 접속을 했음에도 톰캣으로 연결되지 않는 오류
원인 - 일반적으로 톰캣은 8080포트에서 대기하고 있는데 80포트로 접속을 하면 당연히 연결되지 않는다. 마찬가지로 컨테이너를 하나의 물리머신으로 보았을 때 80포트로 포워딩하였기 때문에 접속이 되지 않았음
docker cp C:\Users\SampleWebApp.war tomcat1:/usr/local/tomcat/webapps/ROOT.war
컨테이너에서 수정한 사항을 이미지로 저장하는법
docker commit tomcat1 tomcat2
- 현재 컨테이너명, 새로만들기 원하는 이미지명 순으로 입력
- 원본에서 복제된 새로운 이미지 tomcat2가 생겨있음
docker pull mysql
docker run -d -p 3307:3306 -e MYSQLROOT_PASSWORD=root --name mysql1 mysql
-e옵션은 컨테이너가 생성될 때 외부 파라미터를 입력받기 위해 사용되는 환경변수
https://hub.docker.com//mysql 에서 환경변수 확인가능
docker exec -it mysql1 bash
mysql1컨테이너에 접속, -it는 컨테이너를 종료하지 않고 터미널의 명령을 계속해서 컨테이너에 전달하기 위해 사용한다.
로그인후 테이블 생성과정 – 기존 mysql사용방식과 동일하다.
mysql -uroot -proot
create database testdb;
use testdb;
create table test( name varchar(20) primary key, age int );
insert into test values('hwangharam', 24);
tomcat와 mysql의 ip주소체크 – docker inspect “컨테이너 이름”