보라코딩
Day 10, 도커 본문
도커 이미지 만드는 법
- commit : 이미 사용하는 컨테이너를 이미지로 만들기 (back up)
- build : 도커파일을 통해 구체적으로 이미지 생성

VSC에서 터미널에서 실습
docker run --name web-server -it ubuntu:22.04
: 우분투 이미지 다운 받고, 컨테이너 이름은 web-server로 컨테이너 실행- docker commit
docker commit
: 아래와 같이 사용하라고 명령어 알려줌docker commit web-server web-server-commit
: 이미지 만들어짐docker images
: 이미지 만들어졌는지 확인
- docker build
- Dockerfile 생성하기
FROM ubuntu:22.04
: 내용 입력하고 저장
docker build
: 아래와 같이 build 형식 알려줌docker build -t web-server-build .
: 현재 폴더에 위치해 있으면 위치 대신 . 으로
- Dockerfile 생성하기
파이썬 설치하기
apt update
: 우분투 최신상태로 업데이트apt install python3
: 오류나면 앞에 sudo 붙여서 해결했다- 위에 두 개 명령 && 사용해서 합치기
- RUN apt update && apt install -y python3 : Dokerfile 내 이미지 생성 과정에서 실행할 명령어
mkdir -p /var/www/html
: 폴더 생성cd /var/www/html
: 이동- WORKDIR /var/www/html : 이미지 내에서 명령어를 실행할 디렉토리 설정
echo "Hello, <strong>Docker</strong> > index.html
: 요청 응답해줄 기본 웹페이지 생성하여 index.html 파일에 저장- Run echo "Hello, Docker > index.html : 아래 코드가 더 좋음
- COPY "index.html", "."] : 호스트에 있는 index.html을 /var/www/html로 복사하라는 의미
python3 -m http.server
: 파이썬3에 내장되어 있는 웹서버 시작되면서 기본 포트인 8000번 포트에 리스닝...- CMD ["python3", "-u", "-m", "http,server"] : 컨테이너 실행시 실행할 명령어
docker build -t web-server-build .
docker rm --force web-server
: 같은 이름이 있을 수도 있으니 지우고 진행docker run -p 8888:8000 --name web-server web-server-build pwd
- web-server-build를 바탕으로 web-server라는 이름의 컨테이너 생성 (호스트 8888, 컨테이너 8000 포트 연결)
- pwd 붙이면 pwd가 cmd 대신에 시작됨. 즉, 시작 명령을 변경 가능 (오버라이딩)
- RUN과 CMD 차이
- run은 이미지 생성 시점에 생성
- cmd는 이미지로부터 컨테이너가 가동될 때 실행됨
참고
- /var/www/html 경로는 리눅스 서버의 기본 홈디렉토리
Docker compose
Web Browser -> 워드프레스(설치형 블로그) -> MySQL

docker network create wordpress_net
참고) mysql 컨테이너 실행
docker \
run \
--name "db" \
-v "$(pwd)/db_data:/var/lib/mysql" \
-e "MYSQL_ROOT_PASSWORD=123456" \
-e "MYSQL_DATABASE=wordpress" \
-e "MYSQL_USER=wordpress_user" \
-e "MYSQL_PASSWORD=123456" \
--network wordpress_net \
mysql:5.7.16
참고) wordpress 컨테이너 실행
docker \
run \
--name app \
-v "$(pwd)/app_data:/var/www/html" \
-e "WORDPRESS_DB_HOST=db" \
-e "WORDPRESS_DB_USER=wordpress_user" \
-e "WORDPRESS_DB_NAME=wordpress" \
-e "WORDPRESS_DB_PASSWORD=123456" \
-e "WORDPRESS_DEBUG=1" \
-p 8080:80 \
--network wordpress_net \
wordpress:latest
http://localhost:8080/
들어가면 워드프레스 화면 나옴- 지우고 docker-compose로 사용해보자
- docker rm --force app
- docker rm --force db
- docker network rm workpress_net
- 생성된 파일도 직접 다 지우기
compose 진짜 해보기!
- `docker-compose.yml' 파일 생성 후 아래와 같이 입력
version: "3.7"
services:
db:
image: mysql:5.7.16
volumes:
- ./db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress_user
MYSQL_PASSWORD: 123456
app:
depends_on:
- db
image: wordpress:latest
volumes:
- ./app_data:/var/www/html
ports:
- "8080:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wordpress_user
WORDPRESS_DB_PASSWORD: 123456
- docker-compose up 코드 실행 시, 오류 발생!!!
docker.credentials.errors.InitializationError: docker-credential-desktop.exe not installed or not available in PATH
- 해결방법
nano ~/.docker/config.json
- CredsStore를 CredStore로 변경
sudo snap install docker
sudo apt install docker-compose
docker-compose down
: compose 종료하기
compose 파일 작성 규칙
version
필수 입력services
: 지시어 안에 컨테이너 넣기db
: 컨테이너 이름./db_data:/var/lib/mysql
: 현재 디렉토리의 db_data와 /var/lib/mysql 연결environment
: 환경변수 setting

- 워드프레스 컨테이너 : Web Server, PHP, /var/www/html/에 소스코드 보관
image:wordpress:lattest
: 워드프레스 최신버전depends_on: -db
: mysql이 먼저 만들어지게 하려면name은 app
으로 설정./app_data:/var/www/html
: app_data와 /var/www/html 연결ports: -"8080:80"
: 앱 컨테이너의 80번 포트와 호스트의 8080 포트 연결- 도커 컴포즈는 네트워크 만들고 연결하는 작업 필요 없음 (자동)
shell은 직접 네트워크 만들고 연결 필요
docker network create wordpress_net
: 네트워크 형성network wordpress_net
: 데이터베이스 컨테이너를 네트워크에 연결 / 워드프레스를 네트워크에 연결
compose 진행과정 설명
- 브라우저에 입력
http://localhost:8080
- 8080번 포트로 들어오면 80번 포트 연결된 앱 컨테이너로 접속
- 웹서버 접속 -> PHP 요청 넘기고 -> var/www/html 읽어서 동작
- 같은 네트워크에 있는 db로 가서 3306을 리스닝하는 mysql 서버가 받아
- var/lib/mysql 디렉토리에 연결된 db_data에서 데이터 꺼내서 결과를 php해줌
- php는 웹서버에 응답해서 웹 브라우저에 결과 알려줌
- 워드프레스 실행됨

'개발자가 되었다?' 카테고리의 다른 글
Day 12, C# (0) | 2023.08.31 |
---|---|
Day 11, 도커 (0) | 2023.08.30 |
Day9, 도커 설치, 명령어 + 참고자료 (0) | 2023.08.28 |
Day 8, Mongo DB (1) | 2023.08.25 |
대댓글 DB (0) | 2023.08.25 |