도커 이미지 만들기
1. docker를 사용해서 httpd 이미지에서 쉘을 실행하기
1
| $ docker run -it httpd /bin/bash
|
명령어 뜯어보기
docker run
: docker 컨테이너 실행-it
: 컨테이너와 상호작용하기 위한 옵션i
: interactive(대화형)를 의미, 표준 입력을 유지하고 컨테이너를 유지시키는 역할t
: tty를 의미, 가상 터미널 장치를 사용하여 컨테이너와 상호작용할 수 있게 해줌
httpd
: 실행할 docker 이미지 이름/bin/bash
: 쉘을 실행하는 명령어(컨테이너 내부에서 실행할 명령어)
2. 기본 디렉토리 지정하기
1
| /usr/local/apache2# grep DocumentRoot /usr/local/apache2/conf/httpd.conf
|
명령어 뜯어보기
grep
: 주어진 파일에서 지정된 패턴을 검색하는 명령어DocumentRoot
: Apache 설정파일에서 웹서버가 문서를 제공하는 기본 디렉토리를 지정하는 지시문httpd.conf
: 웹 서버의 주요 설정 파일
3. 현재 작업 디렉토리 확인하기
1
| /usr/local/apache2# pwd
|
4. 현재 디렉토리에 있는 파일과 목록 확인하기
1
| /usr/local/apache2# ls -l
|
💡결과
1
2
3
4
5
6
7
8
9
10
11
| total 40
drwxr-xr-x 2 root root 4096 Feb 13 01:55 bin
drwxr-xr-x 2 root root 4096 Feb 13 01:55 build
drwxr-xr-x 2 root root 4096 Feb 13 01:55 cgi-bin
drwxr-xr-x 4 root root 4096 Feb 13 01:55 conf
drwxr-xr-x 3 root root 4096 Feb 13 01:55 error
drwxr-xr-x 2 root root 4096 Feb 13 01:55 htdocs
drwxr-xr-x 3 root root 4096 Feb 13 01:55 icons
drwxr-xr-x 2 root root 4096 Feb 13 01:55 include
drwxr-xr-x 2 root root 4096 Feb 13 01:55 logs
drwxr-xr-x 2 root root 4096 Feb 13 01:55 modules
|
5. htdocs폴더로 이동
1
| /usr/local/apache2# cd htdocs
|
명령어 뜯어보기
6. hotdocs에 있는 파일 목록 확인하기
1
| /usr/local/apache2/htdocs# ls -l
|
💡결과
1
2
| total 4
-rw-r--r-- 1 504 staff 45 Jun 11 2007 index.html
|
7. index.html 내용 확인하기
1
| /usr/local/apache2/htdocs# cat index.html
|
명령어 뜯어보기
💡결과
1
| <html><body><h1>It works!</h1></body></html>
|
8. index.html 파일 내용 변경하기
1
2
| /usr/local/apache2/htdocs# cat > index.html
<html><body><h1>New Page!</h1></body></html>
|
위의 명령어를 입력하고 변경할 내용을 모두 작성했다면, ctrl + d
를 눌러서 입력 종료하기
명령어 뜯어보기
cat
: 파일의 내용을 화면에 출력하는 명령어>
: 리다이렉트(연결)<html><body><h1>New Page!</h1></body></html>
: 변경할 내용
9. 변경된 내용 확인하기
1
| /usr/local/apache2/htdocs# httpd-foreground
|
명령어 뜯어보기
httpd-foreground
: 웹 서버를 실행할 때 사용하는 명령어
9-1. 또는 커멘드 라인에서 확인하기
1
| /usr/local/apache2/htdocs# cat index.html
|
💡결과
1
| <html><body><h1>New Page!</h1></body></html>
|
10. 쉘 실행 종료하기
1
| :/usr/local/apache2/htdocs# exit
|
11. docker 컨테이너 목록 확인하기
💡결과
1
2
| CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b5e38aee50 httpd "/bin/bash" About an hour ago Exited (127) About a minute ago optimistic_khayyam
|
12. 중단된 컨테이너에 다시 쉘을 붙이기
1
| docker start a1b5e38aee50
|
명령어 뜯어보기
start
: 정지된 컨테이너를 다시 시작하는데 사용하는 명령어`docker start [컨테이너 ID | 컨테이너 이름] |
연결되었는지 확인
현재 실행중인 docker 컨테이너의 목록을 확인하는 명령어를 입력하여 잘 실행되고 있는지 확인할 수 있음
💡결과
1
2
| CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b5e38aee50 httpd "/bin/bash" About an hour ago Up 40 seconds 80/tcp optimistic_khayyam
|
13. 실행하고 있는 컨테이너에 새로운 터미널을 붙여서 bash shell 얻기
1
| docker exec -it a1b5e38aee50 /bin/bash
|
💡결과
14. 변경했던 index.html 내용 다시 확인하기
1
| /usr/local/apache2# cat ./htdocs/index.html
|
htdocs 폴더에 있는 index.html의 내용을 확인하기 위해 cat 명령어와 파일의 경로를 작성
💡결과
1
| <html><body><h1>New Page!</h1></body></html>
|
15. docker 컨테이너의 상태를 이미지로 저장하기
1
| docker commit a1b5e38aee50 my_httpd:0.1
|
명령어 뜯어보기
commit
: docker 컨테이너의 상태를 이미지로 저장하는 명령어commit [컨테이너 ID] [이미지 이름:태그]
a1b5e38aee50
: 커밋하려는 컨테이너 아이디my_httpd:0.1
: 새 이미지의 이름과 태그
제대로 이미지가 저장되었는지 확인해보기
💡결과
1
2
| REPOSITORY TAG IMAGE ID CREATED SIZE
my_httpd 0.1 d42c557b5e46 19 seconds ago 167MB
|
16. 새롭게 만든 이미지 실행하기
1
| docker run my_httpd:0.1 httpd-foreground
|
💡결과
1
2
3
4
| AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.4. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.4. Set the 'ServerName' directive globally to suppress this message
[Mon Mar 11 08:30:42.093345 2024] [mpm_event:notice] [pid 1:tid 139715227473792] AH00489: Apache/2.4.58 (Unix) configured -- resuming normal operations
[Mon Mar 11 08:30:42.093818 2024] [core:notice] [pid 1:tid 139715227473792] AH00094: Command line: 'httpd -D FOREGROUND'
|
이미지 생성 자동화하기
개념
Dockerfile
- 계층 구조를 이용하여 도커 이미지를 만드는 절차를 작성하는 파일
FROM [--platform=<platform>] <image> [AS <name>]
RUN <command>
ENTRYPOINT ["executable","param1","param2"]
이미지 빌드 명령어
docker build [옵션] PATH | URL
이미지 레지스트리에 올리기
1. 도커 허브에 로그인
위의 명령어를 입력하고, 이메일과 비밀번호를 입력하면 로그인이 됨
1
2
3
4
5
6
7
8
| Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: [이메일 주소]
Password:
WARNING! Your password will be stored unencrypted in /home/hm/snap/docker/2915/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
|
2. 만든 이미지에 태그를 붙이기
1
| docker tag my_httpd:0.1 hyeem66/my_httpd:0.1
|
명령어 뜯어보기
push
:push [컨테이너이름:태그] [docker_hub_id/image name]
my_httpd:0.1
: 올리려고 하는 컨테이너 이름:태그hyeem66/my_httpd:0.1
: 도커 허브 사용자 이름와 이미지 이름:태그
제대로 태그가 되었는지 확인해보기
💡결과
1
2
3
| REPOSITORY TAG IMAGE ID CREATED SIZE
my_httpd 0.1 d42c557b5e46 20 minutes ago 167MB
hyeem66/my_httpd 0.1 d42c557b5e46 20 minutes ago 167MB
|
3. 빌드하고, 도커 허브에 업로드하기
1
| docker push hyeem66/my_httpd:0.1
|
명령어 뜯어보기
push
: 이미지를 레지스트리에 업로드하는 명령어hyeem66/my_httpd:0.1
: 업로드할 docker 이미지의 이름과 태그hyem66
: docker hub 사용자 이름my_httpd:0.1
: 이미지이름:태그
💡결과
1
2
3
4
5
6
7
8
9
| The push refers to repository [docker.io/hyeem66/my_httpd]
4509f1dadbc3: Pushed
83e84e8d7bd1: Pushed
ee9a39d3b67e: Pushed
70d67450158d: Pushed
5f70bf18a086: Pushed
8f562cbc866f: Pushed
ceb365432eec: Pushed
0.1: digest: sha256:ec09f8... size: 1779
|
이미지 레지스트리에서 다운 받아서 사용하기
1
| docker run hyeem66/my_httpd:0.1
|
💡결과
local에 이미지가 없으면 허브에서 pull 받아서 사용
1
2
3
4
5
6
7
8
9
10
| Unable to find image 'hyeem66/my_httpd:0.1' locally
0.1: Pulling from hyeem66/my_httpd
e1caac4eb9d2: Already exists
87b0fe460fd9: Already exists
4f4fb700ef54: Already exists
9cebd3e3b523: Already exists
e9304da947c5: Already exists
b60d4b66b268: Already exists
be2abe826808: Pull complete
...
|