03_이미지_제작 : 컨테이너 개발
1. 이미지 제작(build, 빌드)의 개요 : 베이스(기본) 이미지 선택
why? IT에서 개발한다는 것은 세상에 없는 것을 만드는것이 아니라 있는 것에서 기능/모양을 발전시켜 개량한 것,
기본 이미지(샘플)를 활용해서 만듬
베이스 이미지 선택 : 이미지를 만들 때 기본이 되는 이미지(샘플)를 말함
2. 이미지 제작의 선택 OS : 리눅스 선택
- 리눅스 종류 : 2가지 구분 (데비안 계열(무료), 레드헷 계열(무료, 상용))
가. 데비안 계열 : ubuntu(우분투, 제일 유명), 수세리눅스 등
나. 레드헷 계열 : redhat(상용, 기업용, 상용이라 A/S가능),
centos:7(무료, 무료라 redhat를 아무도 안써서 버전 8부터는 서비스 종료함) 등
cf) sunjava의 java를 oracle 회사가 java를 사서 oracle java는 유료, 우리가 쓰는건 무료
3. 애플리케이션 응용 소스 코드 넣기
1) Docker file 작성
(1) 이미지 제작(build) 처리 순서를 작성한 파일 Dockerfile
(2) 가. 기본 이미지 선택(OS, OS 설치된 프로그램 등) FROM ubuntu:latest
(3) 리눅스 : 설치시 기본적인 기능이 빠져있음. 도커 제작할때 설치하기위함(생략가능) RUN apt-get update -y
(4) 프로그램 코드와 설정 파일 복사 ADD ./message.txt /message.txt
(5) 최초 컨테이너 실행시 자동 실행할 명령어 작성(생략가능) CMD cat /message.txt
예시 1) hello world가 작성된 message.txt 파일이 있습니다. 컨테이너를 가동하면 파일을 읽어서 화면에 출력하는 이미지와 컨테이너를 만들어보세요.
(주의 : 실행 시 Dockerfile이 있는 경로에서 위의 명령어를 실행해야함)
0. 02_Docker 안에 03_build 폴더 생성
1. message.txt 카카오톡에서 파일 저장 (또는 vscode에서 직접 만들어도 됨)
hello world
2. Dockerfile 파일 생성
# 1. 필수사항 : 베이스 이미지 선택 (OS 선택)
FROM ubuntu:18.04
# 2. 선택사항 : 도커 컨테이너 내부에서 실행할 명령어(생략가능)
# 리눅스 업데이트 실행
RUN apt-get update -y
# 3. 실제작업 : 윈도우: message.txt => 리눅스:/message.txt 에 복사
ADD ./message.txt /message.txt
# 4. 컨테이너 실행 후에 1번 실행할 명령어(생략가능)
CMD cat /message.txt
3. 탐색기 열기 - Dockerfile이 들어있는곳까지 와서 - 주소창에 cmd
4. 제작(build) 명령어 : docker build --tag 생성할이미지명:버전(태그) .
C:\Work\04_MSA\02_docker\03_build>docker build --tag hello .
2024/02/23 16:02:18 http2: server: error reading preface from client //./pipe/docker_engine: file has already been closed
[+] Building 19.4s (6/8) docker:default
[+] Building 50.1s (9/9) FINISHED docker:default
### Dockerfile 읽어서 이미지 빌드(제작) 시작
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 406B 0.0s
### 1/3 기본이미지 선택 : ubuntu:18.04
=> [internal] load metadata for docker.io/library/ubuntu:18.04 2.6s
=> [auth] library/ubuntu:pull token for registry-1.docker.io 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/3] FROM docker.io/library/ubuntu:18.04@sha256:152dc042452c496007f07ca9127571cb9c29697f42acbfad72324b2bb2e4 0.1s
=> => resolve docker.io/library/ubuntu:18.04@sha256:152dc042452c496007f07ca9127571cb9c29697f42acbfad72324b2bb2e4 0.0s
=> => sha256:f9a80a55f492e823bf5d51f1bd5f87ea3eed1cb31788686aa99a2fb61a27af6a 2.30kB / 2.30kB 0.0s
=> => sha256:152dc042452c496007f07ca9127571cb9c29697f42acbfad72324b2bb2e43c98 1.33kB / 1.33kB 0.0s
=> => sha256:dca176c9663a7ba4c1f0e710986f5a25e672842963d95b960191e2d9f7185ebe 424B / 424B 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 49B 0.0s
### 2/3 : Run ap-get update -y => 리눅스 이미지 업데이트(= 윈도우 업데이트)
=> [2/3] RUN apt-get update -y 46.9s
### 3/3 : ADD ./message.txt /message.txt => 윈도우:message.txt를 리눅스:/message.txt에 복사
=> [3/3] ADD ./message.txt /message.txt 0.1s
=> exporting to image 0.2s
=> => exporting layers 0.2s
=> => writing image sha256:66f3e236d63d50b7713cf01901cbcdd2242ad3a708e76ff15da8948ae94cfc1d 0.0s
=> => naming to docker.io/library/hello 0.0s
View build details: docker-desktop://dashboard/build/default/default/vmmd3pao83gp5z6uogq89fyha
What's Next?
View a summary of image vulnerabilities and recommendations → docker scout quickview
C:\Work\04_MSA\02_docker\03_build>
5. docker decktop images 에 생성 완료
6. 컨테이너에 띄워서 hello world 뜨는지 확인하기 : docker run hello
-it 옵션 생략 : 컨테이너 생성은 되지만 접속은 안함(결과만 출력)
C:\Work\04_MSA\02_docker\03_build>docker run hello
hello world
C:\Work\04_MSA\02_docker\03_build>
연습 1) 위와 동일하게 message_exam.txt 파일안에 Hello Docker Exam 작성하고, 이미지를 빌드(제작) 하고 컨테이너를 실행해서 화면에 출력해 보세요. 이미지명은 hello2
0. 02_Docker 안에 03_exam 폴더 생성
1. message_exam.txt 생성 : hello Docker Exam
hello Docker Exam
2. Dockerfile 파일 생성 : ./message.txt -> ./message_exam.txt로 다 수정
# 1. 필수사항 : 베이스 이미지 선택 (OS 선택)
FROM ubuntu:18.04
# 2. 도커 컨테이너 내부에서 실행할 명령어(생략가능)
# 리눅스 업데이트 실행
RUN apt-get update -y
# 3. 실제작업 : 윈도우: message.txt => 리눅스:/message.txt 에 복사
ADD ./message_exam.txt /message_exam.txt
# 4. 컨테이너 실행 후에 마지막에 실행할 명령어(생략가능)
CMD cat /message_exam.txt
3. 탐색기 열기 - Dockerfile이 들어있는곳까지 와서 - 주소창에 cmd
4. 제작(build) 명령어 : docker build --tag 생성할이미지명:버전(태그) .
C:\Work\04_MSA\02_docker\03_exam>docker build --tag hello2 .
2024/02/23 16:33:14 http2: server: error reading preface from client //./pipe/docker_engine: file has already been closed
[+] Building 1.9s (8/8) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 406B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:18.04 1.7s
=> [auth] library/ubuntu:pull token for registry-1.docker.io 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/3] FROM docker.io/library/ubuntu:18.04@sha256:152dc042452c496007f07ca9127571cb9c29697f42acbfad72324b2bb2e4 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 2B 0.0s
=> CACHED [2/3] RUN apt-get update -y 0.0s
=> ERROR [3/3] ADD ./message.txt /message.txt 0.0s
------
> [3/3] ADD ./message.txt /message.txt:
------
Dockerfile:7
--------------------
5 | RUN apt-get update -y
6 | # 윈도우: message.txt => 리눅스:/message.txt 에 복사
7 | >>> ADD ./message.txt /message.txt
8 | # 컨테이너 실행 후에 1번 실행할 명령어(생략가능)
9 | CMD cat /message.txt
--------------------
ERROR: failed to solve: failed to compute cache key: failed to calculate checksum of ref 8538d8bf-1b0f-45fd-b4f7-69ec8f3e2ae9::mh9pyr90sk75qmsuala1kxvra: "/message.txt": not found
View build details: docker-desktop://dashboard/build/default/default/dd63keeoiyw9044tntgerypn7
[+] Building 0.9s (7/7) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0se
=> => transferring dockerfile: 406B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:18.04 0.8s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/3] FROM docker.io/library/ubuntu:18.04@sha256:152dc042452c496007f07ca9127571cb9c29697f42acbfad72324b2bb2e4 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 2B 0.0s
=> CACHED [2/3] RUN apt-get update -y 0.0s
=> ERROR [3/3] ADD ./message.txt /message.txt 0.0s
------
> [3/3] ADD ./message.txt /message.txt:
------
Dockerfile:7
--------------------
5 | RUN apt-get update -y
6 | # 윈도우: message.txt => 리눅스:/message.txt 에 복사
7 | >>> ADD ./message.txt /message.txt
8 | # 컨테이너 실행 후에 1번 실행할 명령어(생략가능)
9 | CMD cat /message.txt
--------------------
ERROR: failed to solve: failed to compute cache key: failed to calculate checksum of ref 8538d8bf-1b0f-45fd-b4f7-69ec8f3e2ae9::fj39x85dmsyr2rwxg19rq9dx2: "/message.txt": not found
View build details: docker-desktop://dashboard/build/default/default/oq5m7j2vw4yl849dobmw5fwu3
[+] Building 1.0s (8/8) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0se
=> => transferring dockerfile: 421B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:18.04 0.7s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/3] FROM docker.io/library/ubuntu:18.04@sha256:152dc042452c496007f07ca9127571cb9c29697f42acbfad72324b2bb2e4 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 60B 0.0s
=> CACHED [2/3] RUN apt-get update -y 0.0s
=> [3/3] ADD ./message_exam.txt /message_exam.txt 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:dfd3d13fde3e794f01b29087fbe32dcbe4becbd791dcbe3ebce86214477449a0 0.0s
=> => naming to docker.io/library/hello2 0.0s
View build details: docker-desktop://dashboard/build/default/default/5vzipd2vvxh2ampqeabdgpvd7
What's Next?
View a summary of image vulnerabilities and recommendations → docker scout quickview
C:\Work\04_MSA\02_docker\03_exam>
5. docker desktop images 에 생성 완료
6. 컨테이너에 띄워서 hello Docker Exam 뜨는지 확인하기 : docker run hello2
C:\Work\04_MSA\02_docker\03_exam>docker run hello2
hello Docker Exam
C:\Work\04_MSA\02_docker\03_exam>
예제 3) 자신의 리눅스 이미지를 만들고, docker hub에도 올리기
0. 02_Docker 안에 03_linux 폴더 생성
1. Dockerfile 파일 생성 (message.txt 없어도 됨. 없으면 안에 내용이 없는것뿐)
# 1. 최신버전 22, 우리는 18
FROM ubuntu:18.04
# 2. 리눅스 설치 : 유틸리티 프로그램 설치 : apt-get
# iputils-ping net-tools git sudo vim
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y iputils-ping
RUN apt-get install -y net-tools
RUN apt-get install -y git
RUN apt-get install -y sudo
RUN apt-get install -y vim
2. 탐색기 열기 - Dockerfile이 들어있는곳까지 와서 - 주소창에 cmd : docker build --tag 생성할이미지명:버전(태그) .
C:\Work\04_MSA\02_docker\03_linux>docker build --tag yujeong/linux .
[+] Building 139.2s (12/12) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 389B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:18.04 0.8s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> CACHED [1/8] FROM docker.io/library/ubuntu:18.04@sha256:152dc042452c496007f07ca9127571cb9c29697f42acbfad72324 0.0s
=> [2/8] RUN apt-get update 22.5s
=> [3/8] RUN apt-get upgrade -y 3.3s
=> [4/8] RUN apt-get install -y iputils-ping 5.7s
=> [5/8] RUN apt-get install -y net-tools 3.1s
=> [6/8] RUN apt-get install -y git 71.8s
=> [7/8] RUN apt-get install -y sudo 3.8s
=> [8/8] RUN apt-get install -y vim 27.4s
=> exporting to image 0.5s
=> => exporting layers 0.5s
=> => writing image sha256:9d1812147f5c7047e5de985f42f379558b5ecd94367da4295bf6d7b8e35f05b5 0.0s
=> => naming to docker.io/yujeong/linux 0.0s
View build details: docker-desktop://dashboard/build/default/default/k4t485byisjdh0wv60n46z3q8
What's Next?
View a summary of image vulnerabilities and recommendations → docker scout quickview
C:\Work\04_MSA\02_docker\03_linux>
3. 컨테이너 실행하기 : docker run -it --name 컨테이너명 이미지명 셀
C:\Work\04_MSA\02_docker\03_linux>docker run -it --name linux yujeong/linux bash
root@c692e7353984:/#
'Linux' 카테고리의 다른 글
#41 [docker] 셀 스크립트 : vi로 작성, 실행권한주기, 셀 스크립트 실행, 셔뱅, 변수 작성, 명령어 변수 작성 (0) | 2024.02.23 |
---|---|
#41 [docker] 컨테이너 활용 : 접속 run, 유틸리티 프로그램 설치, ifconfig eth0, attach, exec -it (0) | 2024.02.23 |
#40 [docker] 컨테이너 (0) | 2024.02.22 |
#40 [Linux] 권한 : chmod [사용자(u,g,o)][+/-][권한(r,w,x)] 파일명, chmod 숫자 파일명 (0) | 2024.02.22 |
#40 [Linux] 셀, 셀변수, 프롬프트, echo $SHELL, echo $PATH, locale -a, 환경설정 파일 (0) | 2024.02.22 |