일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 개발자 채용연계형인턴
- 도커
- Linux
- 식단
- 신입 개발자 면접 질문
- 프로그래머스
- 개발자 정규직
- 플레이팅
- .dockerignore
- 개발자 면접 질문
- Plating
- 신입 개발자 자바 면접 질문
- docker image
- docker
- 샐러드
- 직장인점심구독
- 자바 stream
- 코딩테스트 연습
- 신입 개발자 필수 면접 질문
- 신입 개발자 자바 면접
- 개발자 면접
- 자바 암호화 복호화
- 개발자 인턴
- 개발자 코딩테스트
- 식단일기
- 셰프의찾아가는구내식당
- 신입 개발자 면접
- 프로그래머스 코딩테스트
- 자바 암호화
- 자바 암호화 알고리즘
- Today
- Total
달리는 두딘
[Docker] Docker Next.js 프로젝트 배포 본문
바야흐로 .. 작년 4월
혼자 토이프로젝트로 Next.js를 이용해 개인 블로그를 준비하고 있었는데,
너무 바쁜 나머지 내팽개쳐버린 프로젝트가 있었다.
일단 이 프로젝트를 이미지 파일로 만들어서 컨테이너에 띄우는 게 목표!
가보자고
DockerFile 구성
FROM node:14-slim
WORKDIR /usr/src/app
COPY package.json .
# COPY yarn.lock .
RUN yarn
COPY . .
EXPOSE 3000
CMD ["yarn", "dev"]
.dockerignore 설정
// .dockerignore
node_modules
.next
이미지 파일 생성
docker build -t doodin_blog .
빌드 완!
이미지 파일 목록을 보면 정상적으로 생성이 됐다.
오우 2.4GB..
오늘은 일단 띄워보는 것이 목표니까
크기 줄이는 건 나중에 해보자
찾아보니 도커파일만 잘 만들어도
크기를 확 줄일 수 있다고 한다!
Docker Desktop에서 이미지 파일 목록으로도 확인 가능
자 이제 그럼 이 이미지 파일을
컨테이너에 띄워보기!!
컨테이너 생성
docker run -dp 3000:3000 doodin_blog .
--name 옵션을 사용해서 컨테이너에 이름을 부여해주면 해당 이름으로 컨테이너를 식별 가능하다고 함
일단 난 그냥 해봄
Docker Desktop에서 보면 serene_feistel라는 이름으로 컨테이너 생성이 완료됐고, 현재 run 상태인 것도 확인 가능하다.
잘 구동중~~
Docker Desktop에서 로그도 확인 가능하다.
{
"Id": "f4f5624060122fdf559ba645edb10783f864108a234651b2eaf0f9b8c5a4b03e",
"Created": "2024-01-31T15:12:18.157660271Z",
"Path": "docker-entrypoint.sh",
"Args": [
"yarn",
"dev"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 1281,
"ExitCode": 0,
"Error": "",
"StartedAt": "2024-01-31T15:12:18.59166914Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:da6358c8aa74d89eff6418f76a8b590c26d9f8cad9ba7fda87d41acdbf80e3ae",
"ResolvConfPath": "/var/lib/docker/containers/f4f5624060122fdf559ba645edb10783f864108a234651b2eaf0f9b8c5a4b03e/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/f4f5624060122fdf559ba645edb10783f864108a234651b2eaf0f9b8c5a4b03e/hostname",
"HostsPath": "/var/lib/docker/containers/f4f5624060122fdf559ba645edb10783f864108a234651b2eaf0f9b8c5a4b03e/hosts",
"LogPath": "/var/lib/docker/containers/f4f5624060122fdf559ba645edb10783f864108a234651b2eaf0f9b8c5a4b03e/f4f5624060122fdf559ba645edb10783f864108a234651b2eaf0f9b8c5a4b03e-json.log",
"Name": "/serene_feistel",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": [
"68429ebcb28e52cb8ca5e94a8b52ac11e2066828bb214a22f62ba7d5b5ec0fe3"
],
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {
"3000/tcp": [
{
"HostIp": "",
"HostPort": "3000"
}
]
},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"ConsoleSize": [
32,
215
],
"CapAdd": null,
"CapDrop": null,
"CgroupnsMode": "host",
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": [],
"BlkioDeviceWriteBps": [],
"BlkioDeviceReadIOps": [],
"BlkioDeviceWriteIOps": [],
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DeviceRequests": null,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware",
"/sys/devices/virtual/powercap"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/31aacf2ac1ef5992213b7a212b7d81aebb95d4f1378bc6882304541c4ed275b2-init/diff:/var/lib/docker/overlay2/nqbpeeuzdyiwjdz395gp7hd64/diff:/var/lib/docker/overlay2/u70tm9tiit6xnfbtrqoucyqr6/diff:/var/lib/docker/overlay2/ddvg4m0buebkaba857s10gbjw/diff:/var/lib/docker/overlay2/hgpn5qzdliybi0yo7n45yqeos/diff:/var/lib/docker/overlay2/5f097528529822b911c6e87cdca215464735692e628f24747190023304b86d91/diff:/var/lib/docker/overlay2/25ffb545c1693ea85926acf7cc28fdf8486866f513f9da0e65d59f56e782a017/diff:/var/lib/docker/overlay2/bb4b82298881dba892d65e9ebca1e9caa265095bf4a00a280c21a8380dd2a4a8/diff:/var/lib/docker/overlay2/34875b8074c0ab031c611807e943fcfe1312e21b22ba63148115547418011de4/diff:/var/lib/docker/overlay2/52a615f27325e1a0c9cdd8adf0d731fde6eb7b99c8f991b6ee9fb26d4be7a764/diff",
"MergedDir": "/var/lib/docker/overlay2/31aacf2ac1ef5992213b7a212b7d81aebb95d4f1378bc6882304541c4ed275b2/merged",
"UpperDir": "/var/lib/docker/overlay2/31aacf2ac1ef5992213b7a212b7d81aebb95d4f1378bc6882304541c4ed275b2/diff",
"WorkDir": "/var/lib/docker/overlay2/31aacf2ac1ef5992213b7a212b7d81aebb95d4f1378bc6882304541c4ed275b2/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "f4f562406012",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"3000/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NODE_VERSION=14.21.3",
"YARN_VERSION=1.22.19"
],
"Cmd": [
"yarn",
"dev"
],
"Image": "doodin_blog",
"Volumes": null,
"WorkingDir": "/usr/src/app",
"Entrypoint": [
"docker-entrypoint.sh"
],
"OnBuild": null,
"Labels": {}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "eab129b5f639d2dce115ebd9a18601e748faeaccf557b1f06390bff8a8f6c6dd",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"3000/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "3000"
}
]
},
"SandboxKey": "/var/run/docker/netns/eab129b5f639",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "174bbc564d6581104d0084d06cf750280e58dab35ea1a141ee3c165c3b041de5",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"MacAddress": "02:42:ac:11:00:02",
"NetworkID": "03607c78977124599b313bc5bd3b0d05ad1d1595b2e31ab597381b6eb22ad0fd",
"EndpointID": "174bbc564d6581104d0084d06cf750280e58dab35ea1a141ee3c165c3b041de5",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"DriverOpts": null
}
}
}
}
Docker Inspect
DockerFile에 설정한 경로에 내 프로젝트가 구성되어 있는 것이 확인 가능함
DockerFile에 EXPOSE 3000으로 했기 때문에 http://localhost:3000/ 으로 접속해봄
내 프로젝트다!!!!!! 박수~!!! 야호
이럴줄 알았으면 더 열심히 만들어놓을걸 싶네요
문제는 누군가 이 이미지 파일을 받는다면
주기적으로 supabase 활성화를 해야한다는 것 ..
안 하면 비활성화 되어버려서 에러가 날 것임다 ㅜ
도커에 한 걸음 다가 간 듯 합니다!
왜 다들 도커도커 하는지 알 거 같네요...........
이 이미지 파일을 push해서 docker hub로 올리고
다른 사람들이 이미지 파일을 pull 한다면 제 프로젝트를 확인하는 것이 가능할 것 같네욧!
너무 뜻 깊고 재밌었습니다! 꾸우벅
'끄적' 카테고리의 다른 글
[PostgreSQL] PostgreSQL 설치 (4) | 2024.02.10 |
---|---|
[Next.js + TypeScript] 프로젝트 생성 및 초기 설정 (Styled-Components 적용) (6) | 2024.02.10 |
[Docker] Docker File을 이용하여 Docker Image 만들기 (0) | 2024.01.31 |
[Docker] Docker Desktop 설치 (3) | 2024.01.28 |
두둥~~! 사이드 프로젝트 시작 (2) | 2024.01.28 |