Photo by Unsplash

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
1
FROM ruby:2.7.2-alpine
2
RUN \
3
# Mise à jour
4
apk update && apk upgrade && \
5
apk --no-cache add make gcc libc-dev && \
6
apk add --update --no-cache \
7
build-base curl-dev git libxslt-dev libxml2-dev ruby-rdoc mysql-dev \
8
yaml-dev zlib-dev nodejs yarn tzdata
9
10
WORKDIR /app
11
12
# Gems obligatoires
13
RUN gem install nokogiri -- --use-system-libraries
14
RUN gem install bundler
15
16
COPY package.json yarn.lock ./
17
RUN yarn install --check-files
18
19
COPY Gemfile Gemfile.lock ./
20
RUN bundle install
21
22
COPY . .
23
24
# Effacer les packages après l'installation
25
RUN rm -rf /var/cache/apk/*
26
27
ENV PATH=./bin:$PATH
28
29
EXPOSE 3000
30
CMD ["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.
1
version: '3'
2
services:
3
app:
4
container_name: rails_project_backend
5
command: ["rails", "server", "-b", "0.0.0.0"]
6
depends_on:
7
- db
8
build:
9
context: .
10
dockerfile: .docker/Dockerfile
11
ports:
12
- "3000:3000"
13
restart: always
14
volumes:
15
- ".:/app"
16
- "node-modules:/app/node_modules"
17
environment:
18
RAILS_ENV: development
19
DATABASE_HOST: db
20
DATABASE_USER: rails_db_user
21
DATABASE_PASSWORD: rails_db_password
22
DATABASE_NAME: rails_db
23
db:
24
container_name: rails_project_db
25
image: "mysql:8.0"
26
environment:
27
MYSQL_ROOT_PASSWORD: password
28
MYSQL_DATABASE: rails_db
29
MYSQL_USER: rails_db_user
30
MYSQL_PASSWORD: rails_db_password
31
volumes:
32
- './dbdocker:/var/lib/mysql'
33
- './dbdocker_init:/docker-entrypoint-initdb.d'
34
ports:
35
- "3306:3306"
36
phpmyadmin:
37
depends_on:
38
- db
39
image: phpmyadmin/phpmyadmin
40
restart: always
41
ports:
42
- '3500:80'
43
environment:
44
PMA_HOST: db
45
PMA_PORT: 3306
46
MYSQL_USER: root
47
MYSQL_ROOT_PASSWORD: password
48
volumes:
49
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.
1
/dockerdb/*
2
!/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.
Mes articles ne sont pas generés par l'IA, cependant ils pourrait y être corrigés. Le premier brouillon est ma création originale

Auteur

Écrit par Helmer Davila