Continuous Integration/Continuous Deployment(Delivery)의 약자
지속적인 통합과 지속적인 제공란 의미를 가지고 있다
1) 코드작성 : 개발자들은 소스코드를 작성하고 저장소에 업로드
2) 빌드: 저장소에서 최신 소스코드를 가져와 빌드를 수행 / 빌드는 소스코드를 컴파일하고, 라이브러리를 추가하고 필요한 파일을 생성하는 과정
3) 테스트: 빌드된 결과물을 대상으로 테스트를 수행. 테스트는 기능이 정상적으로 작동하는지 확인하고, 버그를 발견하고 수정하는 과정.
4)배포: 테스트를 통과한 결과물을 배포. 배포는 서버에 업로드하거나, 사용자에게 제공하는 과정
애플리케이션 개발과 배포가 편해짐
표준화된 배포
를 구성할 수 있음여러 애플리케이션의 독립성, 확장성이 높아짐
Docker가 가상화에서 사실상 표준의 위치이다
# docker for mac설치
brew install docker docker-compose
# docker version 확인
docker --version
# docker compose version 확인
docker-compose --version
docker info
# docker에 nginx image 다운받기
docker image pull nginx:1.25.3-alpine
# docker image 확인하기
docker images
# image가 어떻게 구성되었는지 확인
docker image history nginx:1.25.3-alpine
# nginx 실행 (서버 이름 : webserver01)
docker run -d -p 8001:80 --name webserver01 nginx:1.25.3-alpine
# nginx 서버가 잘 싱행되고 있는지 확인
docker ps | grep webserver01
# nginx 서버 port가 어떤건지 확인 -> 8001
docker port webserver01
# 8081 포트에 어떤 내용이 나오는지 확인 가능
curl localhost:8001
docker pull
docker image inspect nginx:latest
[
{
"Id": "sha256:593aee2afb642798b83a85306d2625fd7f089c0a1242c7e75a237846d80aa2a0",
"RepoTags": [
"nginx:latest"
],
"RepoDigests": [
"nginx@sha256:add4792d930c25dd2abf2ef9ea79de578097a1c175a16ab25814332fe33622de"
],
"Parent": "",
"Comment": "",
"Created": "2023-10-25T01:21:47.343274012Z",
"Container": "1e4063a23e5d6d56cbf5478ff7227b8c6940152770a0770585c3ae9480478b66",
"ContainerConfig": {
"Hostname": "1e4063a23e5d",
"Domainname": "",
"User": "",
"AttachStdin": false,
…
-> 여러개의 계층 구조로 구성
login
logout
Dokcer Image: 컨테이너에 대한 OS, Application, Library 등의 정보를 담고 있음
Docker Container : Image를 실행한 상태
- 1개의 Image로 부터 N개의 container를 생성할 수 있는 1:N의 관계
-> image : 붕어빵 틀 ( 만들고 싶은 붕어빵의 정보를 갖고 있는 틀)
-> container : 구워낸 붕어빵
- docker run 자주 사용하는 옵션
- `-d`: detached mode; 백그라운드 모드
- `-p`: 호스트와 컨테이너의 포트를 연결(포워딩)
- `-v`: 호스트와 컨테이너의 디렉토리를 연결(마운트)
- `-e`: 컨테이너 내에서 사용할 환경변수 설정
- `-name`: 컨테이너 이름 설정
- `-rm`: 프로세스 종료 시 컨테이너 자동 삭제
- `-ti`: -i 와 -t 를 동시에 사용한 것으로 터미널 입력을 위한 옵션
# 중지된 컨테이너를 포함하여 모든 컨테이너 리스트
docker container ls -a
#
docker container prune
#
docker image prune
# 남아 있는 이미지 리스트 확인 – 실행 중인 컨테이너의 이미지 등
docker image ls
docker system prune
추가적으로 공부
Docker Container 란?
컨테이너란 애플리케이션과 운영환경이 모두 들어있는 독립된 공간
애플리케이션의 가상화
- 경량의 독립 실행 형 소프트웨어 패키지
- 코드, 런타임, 시스템도구, 시스템 라이브러리 및 설정과 같이 응용 프로그램을 실행하는데 필요한 모든 것을 포함
![](https://velog.velcdn.com/images/younssue/post/0d71648d-518e-4930-a844-0fba7587dc0a/image.png)
컨테이너: 컨테이너느 하나의 프로세스 호스트 운영체제의 커널을 공유
컨테이너 내의 프로세스는 격리되어 운영
컨테이너 이미지 : 읽기 전용의 컨테이너 탬플릿 애플리케이션 실행환경, 소스, runtime 이 포함된 독립된 컨테이너 애플리 케이션
컨테이너 레지스트리 : 컨테이너 이미지가 보관된 저장소 , 컨테이너 이미지는 읽기 전용
공부하다가 docker container 실행 구조 가 이해가 가지 않아서 찾아보았다
docker container 실행 구조는 두가지로 나뉠 수 있다
docker 에서 컨테이너가 동작되기 위해서는 1) container 직접 build를 해서 이미지를 만들거나 2) 빌드된 컨테이너를 다운받아 (registry에서 이미지 pull) 만들어진
하나의 컨테이너 이미지를 저장시켜놓는다
그리고 저장된 상태의 이미지를 container 실행시켜 하나의 프로세스 (host)에서 동작될 수 있도록 한다
정리하자면,
컨테이너 직접 빌드하여 이미지 생성
docker build -t my-image
빌드된 이미지 다운로드 (image pull)
이미지 검색: Docker Hub 또는 다른 레지스트리에서 원하는 이미지를 검색
이미지 다운로드: docker pull 명령어를 사용하여 이미지를 다운로드
docker pull nginx:latest
이미지 저장: 다운로드된 이미지는 로컬 시스템에 저장
실행 과정
docker run -d --name my-container my-image