# सुरक्षा की बुनियात — Docker Fundamentals: Images, Containers और Compose

Source: https://www.skillbyai.com/hi/docker/docker-security-basics

> Attack surface घटाने के लिए containers को non-root user के रूप में चलाएँ और base images को minimal व अद्यतन रखें।

## root के रूप में न चलाएँ

डिफ़ॉल्ट रूप से, कंटेनर का प्रोसेस उसके अंदर **root** के रूप में चलता है। एक non-root यूज़र बनाकर उसमें स्विच करें ताकि कंटेनर से बाहर निकलने की स्थिति में नुकसान कम हो।

```dockerfile
FROM node:22-alpine
WORKDIR /app
COPY . .
RUN npm ci --omit=dev

RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

CMD ["node", "server.js"]
```

## न्यूनतम बेस इमेज

कम इंस्टॉल किए गए पैकेज का मतलब है कम ज्ञात कमज़ोरियाँ। `alpine` या `distroless` बेस को प्राथमिकता दें, और सुरक्षा पैच पाने के लिए नियमित रूप से रीबिल्ड करें।

**Quiz:** कंटेनर को अपने प्रोसेस को root के रूप में चलाने से क्यों बचना चाहिए?

- [ ] इससे इमेज तेज़ी से बिल्ड होती है
- [x] अगर हमलावर कंटेनर से बाहर निकल जाए तो नुकसान सीमित रहता है
- [ ] root यूज़र वॉल्यूम उपयोग नहीं कर सकते
- [ ] यह networking बंद कर देता है

*Answer:* अगर हमलावर कंटेनर से बाहर निकल जाए तो नुकसान सीमित रहता है. non-root यूज़र के रूप में चलाने से, कंटेनर के समझौता होने पर उपलब्ध अधिकार कम हो जाते हैं।

## अंतिम क्विज़ 1/8

अंतिम क्विज़

**Quiz:** Container image क्या है?

- [ ] A running process
- [ ] A virtual disk drive
- [x] A read-only template used to start containers
- [ ] A network

*Answer:* A read-only template used to start containers. Containers images के चलते instances हैं।

## अंतिम क्विज़ 2/8

अंतिम क्विज़

**Quiz:** कौन-सा flag container port को host पर publish करता है?

- [ ] -e
- [ ] -v
- [ ] -d
- [x] -p

*Answer:* -p. -p host:container ports map करता है।

## अंतिम क्विज़ 3/8

अंतिम क्विज़

**Quiz:** Container हटने के बाद database data कैसे बचाएँ?

- [x] Use a named volume
- [ ] Write inside the container
- [ ] Use --rm
- [ ] Use EXPOSE

*Answer:* Use a named volume. Volumes container की writable layer के बाहर रहते हैं।

## अंतिम क्विज़ 4/8

अंतिम क्विज़

**Quiz:** Dockerfile में EXPOSE क्या करता है?

- [ ] Publishes the port
- [x] Documents the intended port only
- [ ] Opens the firewall
- [ ] Starts the app

*Answer:* Documents the intended port only. Publish करने के लिए -p या Compose ports चाहिए।

## अंतिम क्विज़ 5/8

अंतिम क्विज़

**Quiz:** कौन-सा Compose command stack को रोकता और हटाता है?

- [ ] docker compose up
- [ ] docker compose logs
- [x] docker compose down
- [ ] docker compose pull

*Answer:* docker compose down. named volumes हटाने के लिए -v जोड़ें।

## अंतिम क्विज़ 6/8

अंतिम क्विज़

**Quiz:** Multi-stage build क्यों उपयोग करें?

- [ ] To skip tests
- [ ] To avoid tags
- [ ] To use root
- [x] To ship a smaller final image

*Answer:* To ship a smaller final image. Build tools build stage में रहते हैं।

## अंतिम क्विज़ 7/8

अंतिम क्विज़

**Quiz:** Production में latest tag से क्यों बचें?

- [x] It makes rollbacks and audits hard
- [ ] It is slower
- [ ] It is private
- [ ] It disables logs

*Answer:* It makes rollbacks and audits hard. Versions या commit hashes pin करें।

## अंतिम क्विज़ 8/8

अंतिम क्विज़

**Quiz:** Containers को non-root user के रूप में क्यों चलाएँ?

- [ ] It builds faster
- [x] It limits damage if the app is compromised
- [ ] It enables volumes
- [ ] It saves RAM

*Answer:* It limits damage if the app is compromised. Least privilege जोखिम घटाता है।
