목차
1. Docker Image
2. Image & Layer
3. Docker Container
4. Docker 설치
5. Docker 기본 명령어
6. 원격 저장소에 올리기
1. Docker Image
- Docker에서 서비스 운영에 필요한 서버 프로그램, 소스코드 및 라이브러리, 컴파일된 실행 파일을 묶는 형태를 Docker Image라 한다. 즉, 특정 프로세스를 실행하기 위한(즉, 컨테이너 생성(실행)에 필요한) 모든 파일과 설정값(환경)을 지닌 것으로, 더 이상의 의존성 파일을 컴파일하거나 이것저것 설치 할 필요 없는 상태의 파일을 의미한다.
ex) Ubuntu 이미지는 Ubuntu를 실행하기 위한 모든 파일을 가지고 있으며, Oracle이미지는 Oracle을 실행하는데 필요한 파일과 실행 명령어, Port정보 등을 모두 가지고 있다.
1.1 하나의 이미지는 여러 컨테이너를 생성할 수 있고, 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아 있다.
1.2 Docker 이미지들은 DockerHub를 통해 버전 관리 및 배포(push&pull)가 가능하다.
1.3 Docker는 Dockerfile이라는 파일로 이미지를 만든다. Dockerfile에는 소스와 함께 의존성 패키지 등 사용했던 설정 파일을 버전 관리하기 쉽도록 명시되어 진다. (그래서 누구나 이미지 생성 과정을 확인할 수 있으며 수정 할 수 있다.)
2. Image & Layer
- Layer란 기존 이미지에 추가적인 파일이 필요할 때 다시 다운로드 받는 방법이 아닌 해당 파일을 추가하기 위한 개념이다. 이미지는 여러 개의 읽기 전용(read only) Layer로 구성되고, 파일이 추가되면 새로운 Layer가 생성된다. 그리고 도커는 여러개의 Layer를 묶어서 하나의 파일시스템으로 사용할 수 있게 해준다. 그래서 이미지와 레이어는 같은 의미로도 사용된다.
- DockerHub 및 개인 저장소에서 이미지를 공유할 때는 바뀐 부분(Layer = Image)만 주고받기 가능하다.
3. Docker Container
- 이미지(Image)를 실행한 상태로, 응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징 or 캡슐화하여 격리된 공간에서 프로세스를 동작 시키는 기술이다.
3.1 컨테이너 이미지 Layer에 읽기/쓰기(read-write) Layer를 추가하는 것으로 생성/실행된다. 따라서 여러 개의 컨테이너를 생성해도 최소한의 용량만 사용되며, 바뀐 부분을 읽기/쓰기 Layer에 적는다.
3.2 컨테이너가 종료되었다고 메모리에서 삭제되지 않고 남아있다. 삭제하려면 명시적으로 삭제해야 한다. 즉, 종료가 되어도 컨테이너&읽기/쓰기 Layer 또한 그대로 존재하기 때문에 다시 시작할 수 있다.
3.3 컨테이너를 삭제했다는 것은 컨테이너에서 생성한 파일이 사라진다는 것이다.
3.4 한 서버는 여러 개의 컨테이너를 가져도 당연히 상관없으며, 컨테이너는 각각 독립적으로 실행된다.
3.5 컨테이너는 커널 공간과 호스트OS 자원을 공유한다.
4. Docker 설치
- CentOS7 환경에서 설치 후 사용해 볼 것이다.
yum install -y yum-utils
- config를 사용하기 위해 먼저 설치해준다.
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- Repository 설정
yum install –y docker-ce docker-ce-cli containerd.io
- Docker CE(Community Edition) 설치
- 무료로 사용할 수 있는 커뮤니티 버전을 설치해준다.
systemctl start docker
systemctl enable docker
- Docker 실행 및 재시작시 작동 실행
5. Docker 기본 명령어
docker --help
* --help 명령어를 통해 docker에서 사용 가능한 명령어들을 볼 수 있다.
docker ps -a
- ps -a 명령어를 통해 현재 프로세스들을 확인 할 수 있다.
docker run -itd -p 8080:80 --name h1 httpd
( h1이라는 container를 만들어 실행해야 한다. -> host의 8080 포트 번호와 h1이라는 container의 80 포트 번호와 연결 시켜야 한다. -> 이런 작업을 수행하는 image는 httpd 이미지에서 실행되어야 한다.)
- docker 명령어로 container 이름 지정 및 포트포워딩 작업을 해주는 명령어다.
- 만약 해당 이미지가 없으면 자동으로 다운 받는다.
* -itd
옵션 | 설명 |
-it | -i와 -t를 동시에 사용한 것으로 터미널 입력을 윈한 옵션 |
-d | detached mode 흔히 말하는 백그라운드 모드 |
* 8080:80
8080 | 80 |
호스트 시스템에서 사용되는 포트 번호 | 컨테이너 내에서 사용되는 포트 번호 |
* --name : 컨테이너 이름을 설정한다.
h1 | httpd |
container name | image name |
- 하나의 이미지로 여러개의 컨테이너를 생성할 수 있고 한번에 여러개의 컨테이너를 실행 시킬 수 있다.
- 이미지가 실행된 상태가 컨테이너다.
docker stop [Container ID]
docker stop [Names]
* stop : 실행되고 있는 컨테이너를 정지 시킨다.
- Container ID 또는 Names를 가지고 정지 시킬 수 있다.
- docker ps -a 명령어를 이용하여 현재 실행중인 컨테이너를 확인 할 수 있다.
docker rm [container id]
- 프로세스 종료시 컨테이너를 자동 제거한다.
docker pull nginx
* pull : 해당 이미지를 가져온다.
docker rmi [이미지이름:이미지태그]
- 이미지 이름은 Repository에 해당하는 이름이다.
docker rmi nginx
* rmi : 해당 이미지를 삭제한다.
docker images
- image들을 보여주는 명령어다.
docker tag centos:7 eco112/test:centos7
* tag : repository명 및 tag명을 변경한다.
- tag를 이용해 repository명 및 tag명을 변경해도 같은 Image에 해당하기 때문에 Image ID가 동일한 것을 볼 수 있다.
6. 원격 저장소에 올리기
- Docker는 DockerHub라는 원격 저장소가 있다. 이 저장소에 이미지들을 저장하고 언제든지 가져다가 사용할 수 있다. 또 다른 사람의 이미지도 가져다가 사용할 수 있다.
docker login
docker push [사용자계정/repository명:tag명]
* push : 저장소에 이미지를 업로드 한다.
- 원격 저장소에 업로드 할때 사용자 계정, repository명, 태그명에 유의하여 업로드 해야한다.
- 이미지를 업로드 했을때 공개 저장소가 없다면 자동으로 생성한다.
'Programming > Docker' 카테고리의 다른 글
Docker - HAProxy, Network, Port Forwarding (0) | 2022.05.30 |
---|---|
Docker - Network (0) | 2022.05.30 |
Docker - Copy, Volume (0) | 2022.05.30 |
Docker - 프로세스 동작 과정 (cat, cp, signal, /etc/hosts, exec, attach) (0) | 2022.05.27 |
Docker - 프로세스, 쉘, 데몬, 포그라운드, 백그라운드 (kill 명령어) (0) | 2022.05.26 |