docker는 etc/apt/source-list 라는 저장소에 없기 때문에 url을 통해서 직접 설치를 해주어야한다.
// repository 인덱스 갱신하기(최신 패키지로 저장소에 있는 패키지들을 업데이트)
sudo apt update
//docker 에 필요한 패키지 설치
sudo apt install apt-transport-https //패키지 관리자가 https 통해 데이터 및 패키지 통신
sudo apt install ca-certificates //SSL 기반의 인증서를 연결
sudo apt install curl //데이터를 다운로드 받을때 사용
sudo apt install software-properties-common//개인 패키지 저장소나 패키지화 추가 및 제거
//curl 명령어 사용해서 docker 다운
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add
//repositroy에 경로 추가해서 update 할때 갱신할수있개 한다.
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
//apt 갱신
sudo apt update
//도커 설치
apt-cache policy docker-ce// 터미널에서 라이브러리 검색
sudo apt install docker-ce// 도커 설치
sudo systemctl status docker//도커 시스템 확인
pull 명령어를 사용하면 docker-hub에서 해당 되는 이미지를 불러온다.
sudo docker pull hello-world // hello world 이미지 불러오기
sudo docker images// image 확인
sudo docker run hello-world//해당 pull 받은 이미지 실행하여 컨테이너 실행
sudo docker ps -a //docker 컨테이너 확인하기
sudo docker rm 컨테이너ID // 컨테이너 삭제
sudo docker images // 이미지 삭제
컨테이너가 지워져도 이미지는 살아있으며, 컨테이너를 지워야 이미지를 지울수있다.
컨테이너는 exit 상태일때만 지울수있다, sudo docker stop container 로 멈춘다음에 지울수이싿

가상화된 애플리케이션에 애플리케이션 과 필요한 라이브러리, 운영체제가 필요하다.

도커 엔진 컨테이너 해당 애플리케이션에 필요한 라이브러리만 가지고있다, 운영체제느 사용자공간에 격리된 프로세스로 실행되기때문에 가상머신을 장점을 가지고있으면서 이동성이 뛰어나다.
하드웨어 가상화는 필요한자원들을 모두 가상화 시켜야되기 때문에 부팅하는 시간이 올래걸린다. 반대로 컨테이너화된 가상화는 OS를 장착하고 사용하기 때문에 부팅속도가 빠르다.
오버헤드
오버헤드 하드웨어 가상화는 기존에 가상화 되는 하드웨어와 하이퍼바이저를 통해 처리되기때문에 오버헤드가 발생할수 밖에 없다, 하지만 컨테이너화 가상화는 커널을 공유하고 개별 프로세스가 작업을 하는것만큼에 시간이 걸리지않기 때문에 오버헤드가 거의 없다.

//도커 버전 확인
docker -v
//도커 헙 에서 도커이미지 pull 받기
sudo docker pull 도커이미지
//도커 이미지 확인
sudo docker images
//도커 컨테이너 생성
sudo docker run --name 이름 -e MYSQL_ROOT_PASSWORD = <password> -d -p 원하는포트번호:3306 mysql:5.6
--name : 식별자 만들어주기
-e : 컨테이너에서 사용할 환경변수 설정
-it : 컨테니어를 종료하지 않은체로 CLI을 사용하기 위해 i:--interactive , -t : tty
-p : 호스트와 포트번호 연결
-d : 백그라운드 모드
//도커 컨테이너 리스트 출력
sudo docker ps -a
//컨테이너 시작/중지/재시작
sudo docker stop 컨테이너이름
sudo docker start 컨테이너이름
sudo docker restart 컨테이너이름
//컨테이너에 접속
sudo docker exec -it 컨테이너이름 /bin/bash
//mysql 접속
mysql -u root -p
//도커 컨테이너 IP 확인
sudo docker inspect 컨테이너 id
명령어 설명
FROM : Docker Base Image (기반이 되는 이미지, <이미지 이름>:<태그> 형식으로 설정)
MAINTAINER : 메인테이너 정보 (작성자 정보)
RUN : 쉘 커맨드를 도커 이미지에서 실행합니다.
CMD : 쉘 커맨드를 도커 이미지에서 실행합니다. 단, 이 커맨드는 도커 컨테이너가 시작될 때 실행합니다.
LABEL : KEY-VALUE 의 LABEL을 생성합니다. docker inspect 명령어로 생성한 LABEL을 확인할 수 있습니다
EXPOSE : 호스트와 연결할 포트 번호를 설정한다.
ENV : 환경변수 설정
ADD : 파일과 디렉토리를 호스트에서 지정한 도커이미지 디렉토리 안으로 복사 합니다. 만약 디렉토리가 없다면 새로 생성해서 복사합니다. 디렉토리를 ADD하려면 끝이 “/”로 끝나야 합니다
COPY : 파일 복사
ENTRYPOINT : 도커 이미지가 실행될 때 기본 커맨드를 지정합니다. 컨테이너가 시작되었을 때 스크립트 실행
VOLUME : 볼륨 마운트
USER : 명령 실행할 사용자 권한 지정
WORKDIR : 현재 작업폴더를 지정합니다. 리눅스 cd 커맨드와 동일. "RUN", "CMD", "ENTRYPOINT" 명령이 실행될 작업 디렉터리
ARG : Dockerfile 내부 변수
ONBUILD : 다른 이미지의 Base Image로 쓰이는 경우 실행될 명령 수행
SHELL : Default Shell 지정
sudo docker build --tag [이름][도커파일 위치 경로]
sudo docker build --tag example:1.0 .
--tag 는 새로 생성할 이미지 지정
--file 은 Dockerfile 아닌 경우 파일 이름 지정
sudo docker run -rm example:1.0
sudo docker run -rm 이미지이름
sudo docker tag 이미지이름 [도커허브계정]/[레포지토리이름]
sudo docker tag example:1.0 nowrobin/test
sudo docker login
sudo docker push 도커허브계정/레포지토리이름
sudo docker push nowrobin/test