반응형
1. 컨테이너를 commit 하여 이미지를 생성하는 방법과 더불어 dockerfile을 이용하여 이미지를 생성할 수 있다.
## Dockerfile 생성.(이름은 꼭 Dockerfile 이어야한다.)
## FROM : 원본 이미지
## RUN : 원본이미지에 실행할 작업
[root@docker_test]# cat Dockerfile
FROM centos:latest
RUN yum update -y
## 생성한 Dockerfile을 가지고 build 해본다
[root@docker_test]# docker build -t centos:test .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM centos:latest
---> 831691599b88
Step 2/2 : RUN yum update -y
---> Running in 853918858d0f
CentOS-8 - AppStream 1.5 MB/s | 5.8 MB 00:03
CentOS-8 - Base 864 kB/s | 2.2 MB 00:02
CentOS-8 - Extras 5.3 kB/s | 7.0 kB 00:01
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Upgrading:
bind-export-libs x86_64 32:9.11.13-5.el8_2 BaseOS 1.1 M
gnutls x86_64 3.6.8-11.el8_2 BaseOS 915 k
libnghttp2 x86_64 1.33.0-3.el8_2.1 BaseOS 77 k
Installing dependencies:
trousers-lib x86_64 0.3.14-4.el8 BaseOS 169 k
Installing weak dependencies:
trousers x86_64 0.3.14-4.el8 BaseOS 153 k
Transaction Summary
================================================================================
Install 2 Packages
Upgrade 3 Packages
Total download size: 2.4 M
Downloading Packages:
(1/5): trousers-0.3.14-4.el8.x86_64.rpm 148 kB/s | 153 kB 00:01
(2/5): trousers-lib-0.3.14-4.el8.x86_64.rpm 153 kB/s | 169 kB 00:01
(3/5): bind-export-libs-9.11.13-5.el8_2.x86_64. 587 kB/s | 1.1 MB 00:01
(4/5): gnutls-3.6.8-11.el8_2.x86_64.rpm 704 kB/s | 915 kB 00:01
(5/5): libnghttp2-1.33.0-3.el8_2.1.x86_64.rpm 44 kB/s | 77 kB 00:01
--------------------------------------------------------------------------------
Total 752 kB/s | 2.4 MB 00:03
warning: /var/cache/dnf/BaseOS-f6a80ba95cf937f2/packages/trousers-0.3.14-4.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS-8 - Base 1.6 MB/s | 1.6 kB 00:00
Importing GPG key 0x8483C65D:
Userid : "CentOS (CentOS Official Signing Key) <security@centos.org>"
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : trousers-lib-0.3.14-4.el8.x86_64 1/8
Running scriptlet: trousers-lib-0.3.14-4.el8.x86_64 1/8
Running scriptlet: trousers-0.3.14-4.el8.x86_64 2/8
Installing : trousers-0.3.14-4.el8.x86_64 2/8
Running scriptlet: trousers-0.3.14-4.el8.x86_64 2/8
Upgrading : gnutls-3.6.8-11.el8_2.x86_64 3/8
Upgrading : libnghttp2-1.33.0-3.el8_2.1.x86_64 4/8
Upgrading : bind-export-libs-32:9.11.13-5.el8_2.x86_64 5/8
Running scriptlet: bind-export-libs-32:9.11.13-5.el8_2.x86_64 5/8
Cleanup : libnghttp2-1.33.0-1.el8_0.1.x86_64 6/8
Cleanup : gnutls-3.6.8-10.el8_2.x86_64 7/8
Cleanup : bind-export-libs-32:9.11.13-3.el8.x86_64 8/8
Running scriptlet: bind-export-libs-32:9.11.13-3.el8.x86_64 8/8
Verifying : trousers-0.3.14-4.el8.x86_64 1/8
Verifying : trousers-lib-0.3.14-4.el8.x86_64 2/8
Verifying : bind-export-libs-32:9.11.13-5.el8_2.x86_64 3/8
Verifying : bind-export-libs-32:9.11.13-3.el8.x86_64 4/8
Verifying : gnutls-3.6.8-11.el8_2.x86_64 5/8
Verifying : gnutls-3.6.8-10.el8_2.x86_64 6/8
Verifying : libnghttp2-1.33.0-3.el8_2.1.x86_64 7/8
Verifying : libnghttp2-1.33.0-1.el8_0.1.x86_64 8/8
Upgraded:
bind-export-libs-32:9.11.13-5.el8_2.x86_64 gnutls-3.6.8-11.el8_2.x86_64
libnghttp2-1.33.0-3.el8_2.1.x86_64
Installed:
trousers-0.3.14-4.el8.x86_64 trousers-lib-0.3.14-4.el8.x86_64
Complete!
Removing intermediate container 853918858d0f
---> 245b08b27f6f
Successfully built 245b08b27f6f
Successfully tagged centos:test
## image 확인
[root@docker_test]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 8cf1bfb43ff5 Less than a second ago 132MB
centos test 245b08b27f6f 29 seconds ago 253MB
nginx add_plo 1ce4194fd0ba About an hour ago 132MB
centos latest 831691599b88 3 weeks ago 215MB
[root@ docker_test]# docker run -it centos:latest bash
## history 확인
[root@docker_test]# docker history centos:test
IMAGE CREATED CREATED BY SIZE COMMENT
245b08b27f6f About a minute ago /bin/sh -c yum update -y 37.9MB
831691599b88 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 3 weeks ago /bin/sh -c #(nop) ADD file:84700c11fcc969ac0… 215MB
2. Dockerfile 커맨드
## 기반이 되는 이미지 레이어입니다.
## <이미지 이름>:<태그> 형식으로 작성
FROM ubuntu:14.04
## 도커이미지가 생성되기 전에 수행할 쉘 명령어
## app 디렉토리 생성
RUN mkdir -p /app
## Docker 이미지 내부에서 RUN, CMD, ENTRYPOINT의 명령이 실행될 디렉터리를 설정합니다.
WORKDIR /app
## 현재 디렉터리에 있는 파일들을 이미지 내부 /app 디렉터리에 추가함
## ADD <현재디렉토리> <이미지 내부 디렉토리>
## 주의 : <현재디렉토리>는 상대경로 이며 절대경로는 들어 갈수 없다.
ADD . /app
RUN apt-get update
RUN apt-get install apache2
RUN service apache2 start
## VOLUME은 디렉터리의 내용을 컨테이너에 저장하지 않고 호스트에 저장하도록 설정합니다.
## 데이터 볼륨을 호스트의 특정 디렉터리와 연결하려면 docker run 명령에서 -v 옵션을 사용해야 합니다.
## ex) -v /root/data:/data
VOLUME ["/data", "/var/log/httpd"]
## 하기 포트를 외부로 노출합니다.
## 호스트와 연결할 포트 번호입니다.
EXPOSE 80
## 쉘을 사용하지 않고 컨테이너가 시작되었을 때 logbackup 스크립트를 실행
## 컨테이너가 시작되었을 때 실행할 실행 파일 또는 셸 스크립트입니다.
## 해당 명령어는 DockerFile내 1회만 쓸 수 있습니다.
CMD ["/app/log.backup.sh"]
3. CMD와 ENTRYPOINT의 차이점.
- CMD : 컨테이너가 실행될 때의 인자값으로 주로 사용.
- ENTRYPOINT : 컨테이너가 실행될 때의 default 실행.
## CMD의 예
## 아래와 같이 이미지 빌드
CMD ["/bin/df", "-h"]
## 컨테이너 실행
## CMD의 명령이 실행됨
❯ docker run --name plo-df plo/df
Filesystem Size Used Avail Use% Mounted on
overlay 59G 5.6G 50G 11% /
tmpfs 64M 0 64M 0% /dev
tmpfs 1000M 0 1000M 0% /sys/fs/cgroup
/dev/sda1 59G 5.6G 50G 11% /etc/hosts
shm 64M 0 64M 0% /dev/shm
tmpfs 1000M 0 1000M 0% /proc/acpi
tmpfs 1000M 0 1000M 0% /sys/firmware
## 컨테이너 실행시 추가 인자값을 주면
## CMD의 내용은 무시되고 추가 인자값의 내용이 출력 됨.
docker run --name plo-df plo/df ps -aef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 15:19 ? 00:00:00 ps -aef
## ENTRYPOINT 의 예
## 아래와 같이 이미지 빌드
ENTRYPOINT ["/bin/df", "-h"]
## 컨테이너 실행
## ENTRYPOINT 명령이 실행되며 CMD와 다르지 않음.
❯ docker run --name plo-df plo/df
Filesystem Size Used Avail Use% Mounted on
overlay 59G 5.6G 50G 11% /
tmpfs 64M 0 64M 0% /dev
tmpfs 1000M 0 1000M 0% /sys/fs/cgroup
/dev/sda1 59G 5.6G 50G 11% /etc/hosts
shm 64M 0 64M 0% /dev/shm
tmpfs 1000M 0 1000M 0% /proc/acpi
tmpfs 1000M 0 1000M 0% /sys/firmware
## 컨테이너 실행 시 추가 인자값을 주면
## ENTRYPOINT의 인자값으로 넘겨지며 다음과 같이 에러 발생
❯ docker run --name plo-df plo/df:entry ps -aef
/bin/df: invalid option -- 'e'
Try '/bin/df --help' for more information.
## 컨테이너 inspect 확인
❯ docker inspect plo-df
...
"Cmd": [ "ps", "-aef" ],
...
"Image": "plo/df:entry",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": [ "/bin/df", "-h" ],
...
## 컨테이너가 실행될 때 실행할 default 명령은 ENTRYPOINT로 정의 하는 것이 좋으며
## CMD는 인자 값으로 정의 목적으로 사용하는 것이 좋다.
반응형
'Micro Service Architecture > Docker' 카테고리의 다른 글
5. [docker] container run (0) | 2021.03.16 |
---|---|
4. [docker] container, image 삭제 (0) | 2021.03.16 |
2. [docker] images commit (0) | 2021.03.16 |
1. [docker] images (0) | 2021.03.16 |
0. [docker] 설치 (0) | 2021.03.16 |