
Rails 6: Execution de Docker avec PHPMyAdmin
Depuis WSL est arrivé à Windows, je veux pratiquer dans une application en Rails. Ça était seulement amusant pour pratiquer mes habiletés en Docker. L’unique exigence? Utiliser Alpine Linux, très populaire par le petit lourd d’images qui génère.
Après deux heures de douleur et de souffrance, je l’ai fait. Mes conteneurs Docker fonctionnaient comment je le voulais et ensuite, je suis prêt pour travailler. Je vous présente ici tous les fichiers.
🐳 Dockerfile
En premier lieu, j’ai créé le fichier Dockerfile
pour le conteneur de Ruby. La route est .docker/Dockerfile
FROM ruby:2.7.2-alpineRUN \ # Mise à jour apk update && apk upgrade && \ apk --no-cache add make gcc libc-dev && \ apk add --update --no-cache \ build-base curl-dev git libxslt-dev libxml2-dev ruby-rdoc mysql-dev \ yaml-dev zlib-dev nodejs yarn tzdata
WORKDIR /app
# Gems obligatoiresRUN gem install nokogiri -- --use-system-librariesRUN gem install bundler
COPY package.json yarn.lock ./RUN yarn install --check-files
COPY Gemfile Gemfile.lock ./RUN bundle install
COPY . .
# Effacer les packages après l'installationRUN rm -rf /var/cache/apk/*
ENV PATH=./bin:$PATH
EXPOSE 3000CMD ["rails", "console"]
📦 Docker compose
Après cela, on peut créer notre fichier docker-compose.yml
. Pour ce cas, on utilise un combo de Ruby + MySQL 8.0 + PHPMyAdmin. Tu demandes probablement: et pourquoi PHPMyAdmin? Parce que je n’ai pas un autre outil UI SQL dans mon ordinateur Linux et je ne veux pas utiliser le terminal maintenant.
version: '3'services: app: container_name: rails_project_backend command: ["rails", "server", "-b", "0.0.0.0"] depends_on: - db build: context: . dockerfile: .docker/Dockerfile ports: - "3000:3000" restart: always volumes: - ".:/app" - "node-modules:/app/node_modules" environment: RAILS_ENV: development DATABASE_HOST: db DATABASE_USER: rails_db_user DATABASE_PASSWORD: rails_db_password DATABASE_NAME: rails_db db: container_name: rails_project_db image: "mysql:8.0" environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: rails_db MYSQL_USER: rails_db_user MYSQL_PASSWORD: rails_db_password volumes: - './dbdocker:/var/lib/mysql' - './dbdocker_init:/docker-entrypoint-initdb.d' ports: - "3306:3306" phpmyadmin: depends_on: - db image: phpmyadmin/phpmyadmin restart: always ports: - '3500:80' environment: PMA_HOST: db PMA_PORT: 3306 MYSQL_USER: root MYSQL_ROOT_PASSWORD: passwordvolumes: node-modules:
Dans le conteneur PHPMyAdmin, on a besoin de mot de passe pour l’utiliser root, parce qu’on veut exécuter des opérations de haut niveau en notre base de données.
Les dossiers supplémentaires dbdocker
et dbdocker_init
, tu les peux ajouter à votre projet si tu veux exécuter des commandes dans ton conteneur MySQL. Pas oublier qu’une fois ils sont ajoutés, tu dois les ignorer depuis Git, où les fichiers de la base de données resteront. C’est une bonne pratique créer un ficher vide .gitkeep
ou .keep
dans le dossier et de l’ignorer. Ensuite, la règle que j’utilise dans mon .gitignore
.
/dockerdb/*!/dockerdb/.gitkeep
N’oublier pas que tu peux utiliser un fichier .env et ensuite ajouter
env_file: - .env
à ton fichier docker-compose (si tu supprimes la section environment par conteneur, avant), si tu ne veux pas envoyer des commits avec tes valeurs env ou si tu les changes souvent.