Docker Compose
๋ฉํฐ ์ปจํ
์ด๋ ํ๊ฒฝ
๋ฐ๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์์ค์ฝ๋ ๋ค์ด๋ก๋
git clone https://github.com/youngwjung/to-do.git && cd to-do์ ํ๋ฆฌ์ผ์ด์ ์์ค ์ฝ๋ ๋ฐ README ๋ฆฌ๋ทฐ
Dockerfile ์์ฑ
cat <<EOF | tee frontend/Dockerfile FROM nginx:alpine COPY . /usr/share/nginx/html EOFํ๋ก ํธ์๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ์์ฑ
docker image build -t frontend frontend/ํ๋ก ํธ์๋ ์ปจํ ์ด๋ ์์ฑ
docker container run --name frontend -d -p 8080:80 frontend์น๋ธ๋ผ์ฐ์ ์์ ์ปจํ ์ด๋๋ก ์ ๊ทผ๋๋์ง ํ์ธ - ์๋ ๋ช ๋ น์ด๋ก ์ฃผ์ ํ์ธ ๊ฐ๋ฅ
echo "$(curl -s ifconfig.io):8080"Dockerfile ๋ณ๊ฒฝ
cat <<'EOF' | tee frontend/Dockerfile FROM nginx:alpine COPY . /usr/share/nginx/html ARG API_ENDPOINT RUN sed -i 's/localhost:9000/'"$API_ENDPOINT"'/g' /usr/share/nginx/html/js/main.js EOFํ๋ก ํธ์๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ์ฌ์์ฑ
docker image build --no-cache -t frontend \ --build-arg API_ENDPOINT=$(curl -s ifconfig.io):9000 \ frontend/ํ๋ก ํธ์๋ ์ปจํ ์ด๋ ์ฌ์์ฑ
{ docker container rm frontend --force docker container run --name frontend -d -p 8080:80 frontend }์น ๋ธ๋ผ์ฐ์ ์์ ๋ก๋ฉ๋ ํ์ด์ง ๋ฆฌํ๋ ์
Dockerfile ์์ฑ
cat <<EOF | tee api/Dockerfile FROM golang:1.20-alpine as builder WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY *.go ./ RUN go build -o /api FROM alpine RUN mkdir /app WORKDIR /app COPY --from=builder /api /app/api EXPOSE 9000 CMD ["/app/api"] EOFAPI ์ปจํ ์ด๋ ์ด๋ฏธ์ง ์์ฑ
docker image build -t api api/API ์ปจํ ์ด๋ ์์ฑ
docker container run --name api -d -p 9000:9000 apiAPI ์ปจํ ์ด๋ ์ํ ํ์ธ
docker container ls -aAPI ์ปจํ ์ด๋ ๋ก๊ทธ ํ์ธ
docker logs apiMySQL ์ปจํ ์ด๋ ์์ฑ
docker container run --name mysql -d -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=asdf1234 mysql:5.7๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ์์ฑ
mysql -h 127.0.0.1 -u root -pasdf1234 < database/schema.sqlAPI ์ปจํ ์ด๋ ์ฌ์์ฑ
{ docker container rm api --force docker container run --name api -d -p 9000:9000 \ -e DATABASE_HOST=$(docker container inspect mysql --format '{{.NetworkSettings.IPAddress}}') \ -e DATABASE_PASSWORD=asdf1234 \ api }API ์ปจํ ์ด๋ ๋ก๊ทธ ํ์ธ
docker logs apiRedis ์ปจํ ์ด๋ ์์ฑ
docker container run --name redis -d redisAPI ์ปจํ ์ด๋ ์ฌ์์ฑ
{ docker container rm api --force docker container run --name api -d -p 9000:9000 \ -e DATABASE_HOST=$(docker container inspect mysql --format '{{.NetworkSettings.IPAddress}}') \ -e DATABASE_PASSWORD=asdf1234 \ -e REDIS_HOST=$(docker container inspect redis --format '{{.NetworkSettings.IPAddress}}') \ api }์คํ์ค์ธ ์ปจํ ์ด๋ ๋ชฉ๋ก ํ์ธ
docker container ls๋ณด์๊ทธ๋ฃน์ ์ธ๋ฐ์ด๋ ๊ท์น ์ถ๊ฐ
aws ec2 authorize-security-group-ingress \ --group-id $(aws ec2 describe-security-groups \ --filters Name=group-name,Values=$(curl -s http://169.254.169.254/latest/meta-data/security-groups) \ --query "SecurityGroups[0].GroupId" --output text) \ --protocol tcp \ --port 9000 \ --cidr 0.0.0.0/0 \ --output text์น ๋ธ๋ผ์ฐ์ ์์ ๋ก๋ฉ๋ ํ์ด์ง ๋ฆฌํ๋ ์
๋ฆฌ์์ค ์ ๋ฆฌ
{ docker container rm $(docker container ls -aq) --force docker image prune --all --force docker volume prune --force cd ~/environment }
Docker Compose
Docker Compose ์ค์น
{ sudo mkdir -p /usr/local/lib/docker/cli-plugins sudo curl -SL https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose }Docker Compose ์ค์น ํ์ธ
docker compose version์๋ํ๋ ์ค๋ฅผ ๊ตฌ์ฑํ Compose ํ์ผ ์์ฑ
mkdir wordpress && cd wordpress && \ cat <<EOF | tee docker-compose.yml services: wordpress: image: wordpress EOFCompose ํ์ผ์ ๋ช ์๋ ๊ตฌ์ฑ๋๋ก ์ปจํ ์ด๋ ํ๊ฒฝ ์์ฑ
docker compose up -d์คํ์ค์ธ Compose ํ๋ก์ ํธ ๋ชฉ๋ก ํ์ธ
docker compose lsCompose ํ์ผ ์์
cat <<EOF | tee docker-compose.yml name: blog services: wordpress: image: wordpress EOF์์ ์ฌํญ ๋ฐ์
docker compose up -d์คํ์ค์ธ Compose ํ๋ก์ ํธ ๋ชฉ๋ก ํ์ธ
docker compose ls์์ ํ๊ธฐ์ ๋ฒ์ ์ Compose ํ์ผ๋ก ์์ฑ๋ ๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก ์ญ์
{ docker container rm wordpress-wordpress-1 --force docker network rm wordpress_default }Compose๋ฅผ ํตํด์ ์คํ์ค์ธ ์ปจํ ์ด๋ ๋ชฉ๋ก ํ์ธ
docker compose psCompose ํ์ผ ์์
cat <<EOF | tee docker-compose.yml name: blog services: wordpress: image: wordpress container_name: wordpress EOF์์ ์ฌํญ ๋ฐ์
docker compose up -dCompose๋ฅผ ํตํด์ ์คํ์ค์ธ ์ปจํ ์ด๋ ๋ชฉ๋ก ํ์ธ
docker compose ps์คํ์ค์ธ ๋ชจ๋ ์ปจํ ์ด๋ ๋ชฉ๋ก ํ์ธ
docker container lsNGINX ์ปจํ ์ด๋ ์์ฑ
docker run --name nginx -d nginx์คํ์ค์ธ ๋ชจ๋ ์ปจํ ์ด๋ ๋ชฉ๋ก ํ์ธ
docker container lsCompose๋ฅผ ํตํด์ ์คํ์ค์ธ ์ปจํ ์ด๋ ๋ชฉ๋ก ํ์ธ
docker compose ps์๋ก์ด ํฐ๋ฏธ๋์ ์ด๊ณ Compose๋ฅผ ํตํด์ ์คํ์ค์ธ ์ปจํ ์ด๋ ๋ชฉ๋ก ํ์ธ
docker compose ps์คํ์ค์ธ Compose ํ๋ก์ ํธ ๋ชฉ๋ก ํ์ธ
docker compose ls์์ฑ๋ ๋ชจ๋ ์ปจํ ์ด๋์ ๋ถ์ฌ๋ Label ํ์ธ
docker container inspect \ $(docker container ps -aq) --format '{{.Name}} - {{json .Config.Labels}}'๊ธฐ์กด ํฐ๋ฏธ๋๋ก ์ด๋ํด์ NGINX ์ญ์
docker container rm nginx --forceCompose ํ์ผ ์์
cat <<EOF | tee docker-compose.yml name: blog services: wordpress: image: wordpress container_name: wordpress ports: - 8080:80 EOF์์ ์ฌํญ ๋ฐ์
docker compose up -d์น๋ธ๋ผ์ฐ์ ์์ ํฌํธํฌ์๋ฉํ ํฌํธ๋ฅผ ํตํด์ ์ปจํ ์ด๋๋ก ์ ๊ทผ๋๋์ง ํ์ธ - ์๋ ๋ช ๋ น์ด๋ก ์ฃผ์ ํ์ธ ๊ฐ๋ฅ
echo "$(curl -s ifconfig.io):8080"Compose ํ์ผ ์์
cat <<EOF | tee docker-compose.yml name: blog services: wordpress: image: wordpress container_name: wordpress ports: - 8080:80 environment: - WORDPRESS_DB_HOST=mysql - WORDPRESS_DB_USER=wordpress - WORDPRESS_DB_PASSWORD=wordpress - WORDPRESS_DB_NAME=wordpress depends_on: - mysql mysql: image: mysql volumes: - mysql-data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=asdf1234 - MYSQL_USER=wordpress - MYSQL_PASSWORD=wordpress - MYSQL_DATABASE=wordpress volumes: mysql-data: EOF์์ ์ฌํญ ๋ฐ์
docker compose up -d์น๋ธ๋ผ์ฐ์ ์์ ์๋ํ๋ ์ค ์ฌ์ดํธ ์ฌ์ ์ - ์๋ ๋ช ๋ น์ด๋ก ์ฃผ์ ํ์ธ ๊ฐ๋ฅ
echo "$(curl -s ifconfig.io):8080"Compose ํ์ผ ์์
cat <<EOF | tee docker-compose.yml name: blog services: wordpress: image: wordpress container_name: wordpress volumes: - plugins:/var/www/html/wp-content/plugins ports: - 8080:80 environment: - WORDPRESS_DB_HOST=mysql - WORDPRESS_DB_USER=wordpress - WORDPRESS_DB_PASSWORD=wordpress - WORDPRESS_DB_NAME=wordpress depends_on: - mysql - wordpress-init mysql: image: mysql volumes: - mysql-data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=asdf1234 - MYSQL_USER=wordpress - MYSQL_PASSWORD=wordpress - MYSQL_DATABASE=wordpress wordpress-init: image: alpine volumes: - plugins:/plugins command: - "sh" - "-c" - "wget -O https://downloads.wordpress.org/plugin/classic-editor.1.6.3.zip && unzip -o classic-editor.1.6.3.zip -d /plugins" volumes: mysql-data: plugins: EOF์์ ์ฌํญ ๋ฐ์
docker compose up -dํ๋ฌ๊ทธ์ธ์ด ์ถ๊ฐ ๋์๋์ง ํ์ธ
wp-cli๋ฅผ ํตํด์ ์๋ํ๋ ์ค ํ ๋ง ์ค์น ์๋
docker compose exec wordpress wp theme install blocksy --activate --allow-rootDockerfile ์์ฑ
cat <<EOF | tee Dockerfile FROM wordpress RUN curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && \ chmod +x wp-cli.phar && mv wp-cli.phar /usr/local/bin/wp EOFCompose ํ์ผ ์์
cat <<EOF | tee docker-compose.yml name: blog services: wordpress: build: . container_name: wordpress volumes: - plugins:/var/www/html/wp-content/plugins ports: - 8080:80 environment: - WORDPRESS_DB_HOST=mysql - WORDPRESS_DB_USER=wordpress - WORDPRESS_DB_PASSWORD=wordpress - WORDPRESS_DB_NAME=wordpress depends_on: - mysql - wordpress-init mysql: image: mysql volumes: - mysql-data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=asdf1234 - MYSQL_USER=wordpress - MYSQL_PASSWORD=wordpress - MYSQL_DATABASE=wordpress wordpress-init: image: alpine volumes: - plugins:/plugins command: - "sh" - "-c" - "wget -O https://downloads.wordpress.org/plugin/classic-editor.1.6.3.zip && unzip -o classic-editor.1.6.3.zip -d /plugins" volumes: mysql-data: plugins: EOF์์ ์ฌํญ ๋ฐ์
docker compose up -d์น ๋ธ๋ผ์ฐ์ ์์ ์๋ํ๋ ์ค ๋ฉ์ธ ํ์ด์ง๋ก ์ด๋ํด์ ํ ๋ง ํ์ธ
wp-cli๋ฅผ ํตํด์ ์๋ํ๋ ์ค ํ ๋ง ์ค์น
docker compose exec wordpress wp theme install blocksy --activate --allow-root์น ๋ธ๋ผ์ฐ์ ์์ ์๋ํ๋ ์ค ๋ฉ์ธ ํ์ด์ง๋ก ์ด๋ํด์ ํ ๋ง ํ์ธ
wordpress ์ปจํ ์ด๋์์ ์คํ์ค์ธ ํ๋ก์ธ์ค ํ์ธ
docker compose topwordpress ์ปจํ ์ด๋์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๊ณ ๊ฐ์ ํ๊ณ ์คํ์ค์ธ ํ๋ก์ธ์ค ์ข ๋ฃ
docker compose exec wordpress pkill apache2์๋ํ๋ ์ค ์ฌ์ดํธ์ ์ ์ ๋๋์ง ํ์ธ
Compose ํ๋ก์ ํธ ์ํ ํ์ธ
docker compose lswordpress ์ปจํ ์ด๋๊ฐ ์คํ์ค์ธ์ง ํ์ธ
docker compose ps -aCompose ํ์ผ ์์
cat <<EOF | tee docker-compose.yml name: blog services: wordpress: build: . container_name: wordpress restart: always volumes: - plugins:/var/www/html/wp-content/plugins ports: - 8080:80 environment: - WORDPRESS_DB_HOST=mysql - WORDPRESS_DB_USER=wordpress - WORDPRESS_DB_PASSWORD=wordpress - WORDPRESS_DB_NAME=wordpress depends_on: - wordpress-init mysql: image: mysql volumes: - mysql-data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=asdf1234 - MYSQL_USER=wordpress - MYSQL_PASSWORD=wordpress - MYSQL_DATABASE=wordpress wordpress-init: image: alpine volumes: - plugins:/plugins command: - "sh" - "-c" - "wget -O https://downloads.wordpress.org/plugin/classic-editor.1.6.3.zip && unzip -o classic-editor.1.6.3.zip -d /plugins" volumes: mysql-data: plugins: EOFCompose ํ๋ก์ ํธ ์ฌ์คํ
docker compose up -d์๋ํ๋ ์ค ์ฌ์ดํธ์ ์ ์ ๋๋์ง ํ์ธ
wordpress ์ปจํ ์ด๋์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๊ณ ๊ฐ์ ํ๊ณ ์คํ์ค์ธ ํ๋ก์ธ์ค ์ข ๋ฃ
docker compose exec wordpress pkill apache2์๋ํ๋ ์ค ์ฌ์ดํธ์ ์ ์ ๋๋์ง ํ์ธ
wordpress ์ปจํ ์ด๋๊ฐ ์คํ์ค์ธ์ง ํ์ธ
docker compose pswordpress ์ปจํ ์ด๋๊ฐ ์ญ์ ๋๋ฉด ๋ค์ ์์ฑ ๋ ๊น์?
docker container rm wordpress --forcewordpress ์ปจํ ์ด๋๊ฐ ์คํ์ค์ธ์ง ํ์ธ
docker compose ps -aCompose ํ๋ก์ ํธ ์ญ์
docker compose downCompose์ ๋ช ์ํ๋ Volume๋ค์ด ๋จ์ ์๋์ง ํ์ธ
docker volume lsCompose ํ๋ก์ ํธ ์์ฑ
docker compose up -d์น๋ธ๋ผ์ฐ์ ์์ ์๋ํ๋ ์ค ์ฌ์ดํธ ์ฌ์ ์ - ์๋ ๋ช ๋ น์ด๋ก ์ฃผ์ ํ์ธ ๊ฐ๋ฅ
echo "$(curl -s ifconfig.io):8080"Compose ํ๋ก์ ํธ ์ญ์
docker compose down --volumes๋ฉํฐ ์ปจํ ์ด๋ ํ๊ฒฝ์์ ๊ฐ๋ณ๋ก ์์ฑํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ค์ Docker Compose๋ฅผ ํตํด์ ๊ตฌ์ฑ
๋ฆฌ์์ค ์ ๋ฆฌ
{ docker compose down --volumes docker container rm $(docker container ls -aq) --force docker image prune --all --force docker volume prune --force docker system prune --all --force cd ~/environment }
Last updated