Finally, the portfolio has been completed and deployed. I would like to output hard.
** Created app ToDoGame **
github
** Technology used **

Docker is growing in demand and will become an essential technology for engineers.
A container for storing things inside. The container contains the application.
It's quite convenient, such as carrying your home application to work in a portable container.
[What is Docker? What is a Dockerfile? ](Https://qiita.com/matsugaknight/items/c77fec14ec3c281a47b4#:~:text=Dockerfile%20%E3%81%A8%E3%81%AF-,Docker%E4%B8%8A%E3%81% A7% E5% 8B% 95% E4% BD% 9C% E3% 81% 95% E3% 81% 9B% E3% 82% 8B% E3% 82% B3% E3% 83% B3% E3% 83% 86% E3% 83% 8A% E3% 81% AE% E6% A7% 8B% E6% 88% 90% E6% 83% 85% E5% A0% B1,% E3% 81% 99% E3% 82% 8B% E3 % 81% 9F% E3% 82% 81% E3% 81% AE% E3% 83% 95% E3% 82% A1% E3% 82% A4% E3% 83% AB% E3% 81% A7% E3% 81 % 99% E3% 80% 82)
It is a file to describe the configuration information of the container to be operated on Docker.
Create a Docker image with the docker build command based on the information described in the Dockerfile.
When I read this article, I was inspired by my own respect, saying, "It's too amazing ... I don't think I'm in the same job hunting." [Part 1] WEB service created with Rails + Nuxt + MySQL + Docker is automatically tested and deployed with ECS / ECR / CircleCI and converted to terraform
ToDoGame
├─docker-compose.yml 
├─frontend
|   ├─Dockerfile
└─backend
    ├─Dockerfile
    ├─Gemfile
    └─Gemfile.lock
Dockerfile
#Specifying the base image(Use alpine to reduce the weight of the image)
FROM ruby:2.7.1-alpine3.10
#Download required packages
ENV RUNTIME_PACKAGES="linux-headers libxml2-dev make gcc libc-dev nodejs tzdata mysql-dev mysql-client yarn" \
    DEV_PACKAGES="build-base curl-dev" \
    HOME="/app" \
    LANG=C.UTF-8 \
    TZ=Asia/Tokyo
#Move to working directory
WORKDIR ${HOME}
#Copy the necessary files from the host (files on your computer) to Docker
ADD Gemfile ${HOME}/Gemfile
ADD Gemfile.lock ${HOME}/Gemfile.lock
RUN apk update && \
    apk upgrade && \
    apk add --update --no-cache ${RUNTIME_PACKAGES} && \
    apk add --update --virtual build-dependencies --no-cache ${DEV_PACKAGES} && \
    bundle install -j4 && \
    apk del build-dependencies && \
    rm -rf /usr/local/bundle/cache/* \
    /usr/local/share/.cache/* \
    /var/cache/* \
    /tmp/* \
    /usr/lib/mysqld* \
    /usr/bin/mysql*
#Copy the necessary files from the host (files on your computer) to Docker
ADD . ${HOME}
#Open port 3000
EXPOSE 3000
#Execute command
CMD ["bundle", "exec", "rails", "s", "puma", "-b", "0.0.0.0", "-p", "3000", "-e", "development"]
★ Use the ENV command to set a value in an environment variable
★ RUNTIME_PACKAGES are ** parts required to run programs ** "Runtime" + "Package" is "Runtime Package". When the runtime "runs a program (at runtime)"
FROM node:12.5.0-alpine
ENV HOME="/app" \
    LANG=C.UTF-8 \
    TZ=Asia/Tokyo
ENV HOST 0.0.0.0
WORKDIR ${HOME}
RUN apk update && \
    apk upgrade && \
    npm install -g n && \
    yarn install &&\
    rm -rf /var/cache/apk/*
★ Access from outside the container is allowed by specifying 0.0.0.0 for the environment variable HOST.
Docker compose is a function that automates the procedure for building and executing a service consisting of multiple containers, making it easier to manage. With Docker compose, you can prepare a compose file and execute the command once to read the settings from that file and start all container services.
docker-compose.yml
docker-compose.yml
version: "3"
services:
  db:
    image: mysql:5.7
    env_file:
      - ./backend/config/environments/db.env
    restart: always
    volumes:
      - db-data:/var/lib/mysql:cached
  back:
    build: backend/
    # rm -f tmp/pids/server.Useful when you fail to erase the rails server with pid
    command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" 
    env_file:
      - ./backend/config/environments/db.env
    volumes:
      - ./backend:/app:cached
    depends_on:
      - db
    #Host computer port: Port in Docker
    ports:
      - 3000:3000
  front:
    build: frontend/
    command: yarn run dev
    volumes:
      - ./frontend:/app:cached
    ports:
      #Host computer port: Port in Docker
      - 8080:3000
    depends_on:
      - back
volumes:
  public-data:
  tmp-data:
  log-data:
  db-data:
** Interesting because there are still many things I don't understand (finished) **
I made an API container with Rails on Docker (alpine)
When I changed jobs from November, I had a period of time within myself, so I'm really disappointed that I couldn't introduce AWS ... But now I have no time to dent! I will do my best to change jobs.
Recommended Posts