Intro of docker
- 컨테이너를 사용해 어플리케이션을 신속하게 구축,테스트 및 배포할 수 있는 소프트 웨어 프로그램
Keyword
Process 격리
DevOps: 개발과 운영의 합성어
- 운영하는 입장에서 신입 사원들에게 환경을 구축하고 배포하는 것도 코스트가 많이 듦
- 또는 인수인계 해주는 과정에서도 다른 사람에게 하던 것을 유지관리 하도록 보내기 위한 과정이 쉽지 않음
- Docker가 여기서 엄청한 장점 : 그냥 컨테이너로 만들어서 배포만 하면 돼
- 각각의 격리시켜서 실행시킬 수 있다.
- python,java 이런 버전들을 매번 달라지면 매우 어려움 but docker가 생기면서 그런 어려움들이 필요없음
client - server architecture
도커 호스트
- Cf) VMWare / VirtualBox :PC(host machine) <-> Guest matchine)
Docker hup: 레지스트리
- Docker Image들이 저장된 곳(Image에서부터 만들어지게 됌)
- Client가 Docker Resgistory에게 특정 명령어를 사용해서 그 이미지를 Dokcer host에서 만들어 컨테이너로 생성한다.
- 우분투랑 레딧이랑 화살표가 다른 것을 볼 수 있는데, 우분투 같은 경우는 자체 Docker daemon에 있는 값을 갖고와서 올린다. (cache 느낌)
- 한번 Resistory에서부터 온 이미지는 Host에 남아있게 되어서 사용자가 특정 명령어를 사용하지 않는 이상 Registry에서 지워질 필요가 없다.
- 그럼으로 clinet 요청의 flow를 생각해보면 e.g.,container 생성하라!! –> 이미지로 부터 생성됨으로 host에서 있는지 없는지 확인을 하고 없으면 resistory에서 부터 가져와서 이미지를 만든다.
이미지(image)
- 기본적으로 docker 레지스트리 hup에 있거나, docker host에 있다.
URL
- https://www.docker.com/
- https://hub.docker.com/ –> 검색해보면 이것이 레지스트리고 이것이 허브에 있다.
- https://docs.docker.com/ –> 설치
Install
- sudo docker run hello-world
this command downloads a test image and runs it in a container, it prints information message and exits!
MAC
- image의 이름이 hello-world임
- 저장소로부터 hello-world라고 있는 것을 dokcer-host로 다운로드했음
-
처음에 unable오류가 났다면 docker-host에서 값이 없기 때문에 locall에서 못찾았다는 뜻이고 download( == pull)한다는 뜻이다.
- 격리된 환경에서 레지스트리에 있는 이미지로 부터 새로 만들어지는 대상을 실행함.
- pull / create / build for run
Post-installation
- sudo 권한을 docker 명령어의 권한을 추가해주는 과정
-
도커를 자동 시작해주는 service등록 과정
docker life cycle
- hello-world 이미지 같은 경우는 바로 죽는 명령어 이기 때문에 stop 명령어를 안써도 된다.
기본 명령어 사용
docker –help
- 명령어의 도움말: docker run –help
docker run
- docker run
- docker run [option] image [command] [arg..]
- command는 image에 대한 명령어이다.
- 이 명령어는 사실 3가지의 명령어를 합친 것이다.
docker run ==.
docker pull hello-wold
docker create hello-world
docker start -a hello-world
docker ps
- -a
- 실행중인 컨테이너를 보여준다.
docker images
docker pull
- Pull an image or a repository from a registry
- image 지우기 다시 pull하기
- hash 값으로 부터 latest image id가 된 것이다.
- docker ps - a로 확인해도 없는 것이 정상
docker create
local로 이미지 다운 받은 것을 container로 올리는 과정
- docker images 로 pull 했던 docker images가 있는지 확인하기
- docker create hello-world
docker start
- docker ps -a 의 결과물로 나온 현재 올릴 수 있는 container의 아이디를 확인한 다음에 start뒤에 container의 아이디를 적어줘서 해당 이미지를 실행시킨다.
- Status가 Created 에서 ㄸExited가 된 것을 확인할 수 있다.
- 이 이유는 hello-world 이미지의 역할이 한번 뿌려지고 바로 끝나는 이미지이기 때문에, 보기 위해서는 docker attach를 사용해야하만 한다.
- docker start -a hello-world
docker attach
- docker attach 실행시켜주면 되는데
- start를 할때 -a option을 주면 된다.
docker rmi !
- Remove image
- ERR) a2945ccde2a container가 이 이미지를 사용하고 있다. 그렇다면 containter를 삭제를 해줘야한다. ( ps -a 후 rm 으로 container 삭제 )
docker rm
- id 를 지울때 다 쓸 필요는 없고 구분되는 해쉬값까지만 적어주어도 지우는 것이 가능하다.