더보기
68일 차 회고.
오늘도 도커에 대해서 배우고 실습했는데 조금 졸리긴 했지만 재미있었다. 쉬는 시간 중간중간에 인적성 문제도 풀고 있는데 시간이 너무 촉박한 것 같아서 걱정이 된다.
1. Docker
1-0. Login & Logout
docker login # Docker login
docker logout # Docker logout
1-1. Nginx
Image
- 만약 오류가 날 경우, Docker를 실행한다.
docker search nginx # 'nginx' image 검색
docker pull nginx # 'nginx' image 다운로드
docker images # image 목록 확인
"""
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 4e1b6bae1e48 10 hours ago 192MB
"""
Container
docker run --name nginx-container -d -p 80:80 nginx:latest # container 생성 및 실행
docker ps # 실행 중인 container 목록 확인
"""
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d711fae47f0b nginx:latest "/docker-entrypoint.…" 29 seconds ago Up 28 seconds 0.0.0.0:80->80/tcp nginx-container
"""
Container 삭제
docker stop d711fae47f0b # container id가 'd711fae47f0b'인 container 중지
docker ps -a # container 전체 목록 확인
"""
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d711fae47f0b nginx:latest "/docker-entrypoint.…" 5 minutes ago Exited (0) About a minute ago
"""
docker rm d711fae47f0b # container id가 'd711fae47f0b'인 container 삭제
docker ps -a # container 전체 목록 확인
"""
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
"""
Image 삭제
docker rmi 4e1b6bae1e48 # image id가 '4e1b6bae1e48'인 image 삭제
docker images # image 목록 확인
"""
REPOSITORY TAG IMAGE ID CREATED SIZE
"""
1-2. Docker Hub 업로드
Dockerfile
FROM node:12
LABEL version="1.0"
LABEL description="This is a simple Node.js application"
COPY hello.js /
CMD ["node", "hello.js"]
Image
docker build -t hello-js:latest .
docker images
Container
docker run -d -p 8080:8080 --name hello-js-web hello-js
docker ps
Container 삭제
docker stop hello-js-web
docker ps
docker rm hello-js-web
docker ps -a
Docker Hub Image 업로드
docker images
"""
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-js latest b009c8249229 7 minutes ago 918MB
"""
docker tag hello-js:latest ine94/hello-js:latest
docker images
"""
REPOSITORY TAG IMAGE ID CREATED SIZE
ine94/hello-js latest b009c8249229 9 minutes ago 918MB
hello-js latest b009c8249229 9 minutes ago 918MB
"""
docker push ine94/hello-js:latest
Image 삭제
docker rmi hello-js:latest
docker rmi ine94/hello-js:latest
docker images
Docker Hub Image 다운로드
docker search ine94
docker pull ine94/hello-js
docker images
Container
docker run -d -p 8080:8080 --name hello-js-web ine94/hello-js
1-3. Mount
MySQL
- Image
docker pull mysql
docker images
- Container
docker run `
--name mysql-container `
-d -p 3306:3306 `
-e MYSQL_ROOT_PASSWORD= `
-v C:\dev\docker\database:/var/lib/mysql `
mysql:latest
docker ps
- MySQL Server
docker exec -it mysql-container /bin/bash
mysql -u root -p
SHOW DATABASES;
exit
exit
Nginx
- Image & Container
docker run `
--name web `
-d -p 80:80 `
-v C:\dev\docker\web:/usr/share/nginx/html `
nginx:1.14
docker ps
권한 제어
- Container에서 수정이 불가능하다.
docker run `
--name web `
-d -p 80:80 `
-v C:\dev\docker\web:/usr/share/nginx/html:ro `
nginx:1.14
docker ps
docker exec -it web /bin/bash
cd /usr/share/nginx/html
echo "<h1>Hello World</h1>" > index.html
# bash: index.html: Read-only file system
1-4. Network
Network
- bridge
- 기본 네트워크 드라이버
- 같은 호스트 내 여러 컨테이너들이 서로 통신할 수 있다.
- host
- 컨테이너가 호스트와 동일한 네트워크 공간을 사용한다.
- Port Mapping이 필요하지 않다.
- overlay
- 여러 호스트에 분산된 컨테이너 간 통신을 가능하게 한다.
- Kubernetes와 같은 오케스트레이션 환경에서 주로 사용한다.
- 독립적인 가상 네트워크를 구성하여 서비스 간 안전한 통신을 보장한다.
Network 명령어
- 네트워크 조회
docker network ls
- 네트워크 생성
docker network create my-net
docker network ls
- 네트워크 상세 정보
docker network inspect my-net
"""
[
{
"Name": "my-net",
"Id": "a0dea5d9b7a4a1f23c8d775bc7f5d0d50e2ae68753ef2abe3ed548a55e5f1c15",
"Created": "2025-04-17T05:21:13.317311709Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv4": true,
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.21.0.0/16",
"Gateway": "172.21.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
"""
- 컨테이너 연결
# docker run --name nginx-container -d -p 80:80 nginx
# docker ps
"""
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
39bdeb173dd9 nginx "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp nginx-container
"""
docker network connect my-net nginx-container
docker network inspect my-net
"""
[
{
"Name": "my-net",
"Id": "a0dea5d9b7a4a1f23c8d775bc7f5d0d50e2ae68753ef2abe3ed548a55e5f1c15",
"Created": "2025-04-17T05:21:13.317311709Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv4": true,
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.21.0.0/16",
"Gateway": "172.21.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"39bdeb173dd997b02b0b60fa50ebea83237b20b8e2786d8aa582908f94769dbc": {
"Name": "nginx-container",
"EndpointID": "6e9ea77681f038641784719ced9ad745fac369d77fb273272f58ce9b880b84be",
"MacAddress": "aa:63:e6:ba:d3:e5",
"IPv4Address": "172.21.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
"""
- 컨테이너 연결 해제
docker network disconnect my-net nginx-container
docker network inspect my-net
"""
[
{
"Name": "my-net",
"Id": "a0dea5d9b7a4a1f23c8d775bc7f5d0d50e2ae68753ef2abe3ed548a55e5f1c15",
"Created": "2025-04-17T05:21:13.317311709Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv4": true,
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.21.0.0/16",
"Gateway": "172.21.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
"""
- 네트워크 제거
docker network rm my-net
docker network ls
- 네트워크 청소
docker network prune
Network 연결
- MySQL
docker run --name db-container -d -e MYSQL_ROOT_PASSWORD= mysql
docker ps
docker exec -it db-container /bin/bash
mysql -u root -p
SHOW DATABASES;
exit
exit
# Network
docker network create my-net
docker network ls
docker network connect my-net db-container
docker network inspect my-net
"""
[
{
"Name": "my-net",
"Id": "692e9d9e739808ed01938cbe39cfbf6bbf5519edd5b4943c2144a58cd31a6352",
"Created": "2025-04-17T06:09:11.456423383Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv4": true,
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"264706c0a2cfd8af3bd284efb6e8bc6e0ef82bb730722a3024fc3ce921900eb8": {
"Name": "db-container",
"EndpointID": "9df43d964a217755bae22b8f68f72070a00f114bb790ace43a4b65eb6724e493",
"MacAddress": "d6:cd:0d:46:bb:df",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
"""
- Streamlit
# Dockerfile
FROM python:3.12
WORKDIR /app
COPY app.py /app/app.py
COPY .streamlit /app/.streamlit
COPY requirements.txt /app/requirements.txt
RUN pip3 install --upgrade pip && \
pip3 install -r requirements.txt
EXPOSE 8501
ENTRYPOINT [ "streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0" ]
docker build -t streamlit-image .
docker images
docker run --name streamlit-container -d -p 8501:8501 streamlit-image
docker ps
# Network
docker network connect my-net streamlit-container
docker network inspect my-net
"""
[
{
"Name": "my-net",
"Id": "692e9d9e739808ed01938cbe39cfbf6bbf5519edd5b4943c2144a58cd31a6352",
"Created": "2025-04-17T06:09:11.456423383Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv4": true,
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"264706c0a2cfd8af3bd284efb6e8bc6e0ef82bb730722a3024fc3ce921900eb8": {
"Name": "db-container",
"EndpointID": "9df43d964a217755bae22b8f68f72070a00f114bb790ace43a4b65eb6724e493",
"MacAddress": "d6:cd:0d:46:bb:df",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
},
"2ac22fc73f272b5cc2da810c6605f0b27c7afe95064367015b041000588df282": {
"Name": "streamlit-container",
"EndpointID": "a0555cf88fa6ec11aa91b9c861bb013ffbb84a218eb7dc57858b5266e347f837",
"MacAddress": "a2:36:56:fc:92:b7",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
"""
- 연결 확인

1-5. Compose
Compose
- 여러 컨테이너를 하나의 서비스처럼 정의하고 관리할 수 있는 도구
- 복잡한 실행 명령어들을 하나의 docker-compose.yml 파일에 정리해서, 한 줄의 명령어로 시스템 전체를 실행, 중지, 삭제까지 자동화할 수 있다.
Compose 항목
- version
- Compose 파일 버전 지정
- services
- 실행할 컨테이너 정의
- image
- 사용할 Docker Image
- restart
- 컨테이너 종료 시 재시작 정책 설정
- environment
- 환경변수 설정
- ports
- 포트 포워딩 설정
- depends_on
- 다른 서비스에 대한 의존 관계 설정
- networks
- 사용할 네트워크 정의 및 지정
Docker Compose
- docker-compose
# docker-compose.yml
version: '3'
services:
mysql-service:
image: mysql
container_name: db-container
restart: always
environment:
MYSQL_ROOT_PASSWORD: r1234
networks:
- my-network
streamlit-service:
build: .
container_name: streamlit-container
restart: always
ports:
- "8501:8501"
depends_on:
- mysql-service
networks:
- my-network
networks:
my-network:
driver: bridge
name: my-net
- Container 실행
docker-compose up -d
docker images
"""
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-streamlit-service latest 2c5e88e93c2c 56 minutes ago 1.54GB
mysql latest 4b2d796bebc2 2 days ago 859MB
"""
docker ps
"""
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e48cd8612d15 docker-streamlit-service "streamlit run app.p…" About a minute ago Up About a minute 0.0.0.0:8501->8501/tcp streamlit-container
848e4c2fdbb0 mysql "docker-entrypoint.s…" About a minute ago Up About a minute 3306/tcp, 33060/tcp db-container
"""
docker network inspect my-net
"""
[
{
"Name": "my-net",
"Id": "b78bc0e08c6ddd13f8c3a6650afe89243f2dca7f3be5147a00ba192ad4b3e119",
"Created": "2025-04-17T07:31:40.480158024Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv4": true,
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"848e4c2fdbb0104c6dab9094ef5778e17b2ee62f9998d63f93e9596c4533ce54": {
"Name": "db-container",
"EndpointID": "2dadd9e8cce3fdc01cbfc4d3bd59d9682daacb7ccebc0c75cef5fc22d554606d",
"MacAddress": "92:a6:b3:06:4e:66",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
},
"e48cd8612d15feb951d5106d04638b7b20bb91d0e3bbf6741588c777e8ad21ad": {
"Name": "streamlit-container",
"EndpointID": "45d7b4b42578881b69763d44bbcb8a3cc92c12e83e4cc04273dcc4502f2f62c9",
"MacAddress": "7a:f3:a5:04:8e:71",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.config-hash": "0a413f0519614e47e8917fd02b9ee30e4816d4e6caa357cce90e09515e2f4cc2",
"com.docker.compose.network": "my-network",
"com.docker.compose.project": "docker",
"com.docker.compose.version": "2.34.0"
}
}
]
"""
- 연결 확인

- Container & Network 삭제
docker-compose down
'SK네트웍스 Family AI캠프 10기 > Daily 회고' 카테고리의 다른 글
| 70일차. HTML & CSS (0) | 2025.04.21 |
|---|---|
| 69일차. Linux (0) | 2025.04.18 |
| 67일차. Docker (0) | 2025.04.16 |
| 65-66일차. 단위 프로젝트(LLM(초거대언어모델)) (0) | 2025.04.15 |
| 64일차. Modular RAG - LangGraph / MCP (0) | 2025.04.11 |