dockerfile
FROM ruby:2.5.1
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - && apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN mkdir /myapp
ENV APP_ROOT /myapp
WORKDIR $APP_ROOT
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
entrypoint.sh Directement sous le répertoire du projet
entrypoint.sh
#!/bin/bash
set -e
rm -f /myapp/tmp/pids/server.pid
exec "$@"
docker-compose-yml
docker-compose.yml
version: '3'
services:
web:
build:
context: .
dockerfile: Dockerfile
command: bundle exec rails s -p 3000 -b '0.0.0.0'
tty: true
stdin_open: true
depends_on:
- db
ports:
- "3000:3000"
volumes:
- .:/myapp:delegated
db:
image: mysql:5.7
environment:
MYSQL_USER: root
MYSQL_ROOT_PASSWORD: password
ports:
- '3316:3306'
volumes:
- ./db/mysql/volumes:/var/lib/mysql
#Liste des conteneurs(Y compris ceux qui sont arrêtés)
$ docker ps -a
#Liste des ID de conteneur
$ docker ps -a -q
#Supprimer le conteneur
$ docker rm [ID du conteneur]
#Suppression (forcée) du conteneur
$ docker rm -f [ID du conteneur]
#Entrez dans le conteneur
$ docker-compose exec web bash
#(1) Sortie du conteneur
$ exit
# (2)Sortez du conteneur
Ctrl + P + Q (Sans arrêter le conteneur)
docker-compose build Créez uniquement l'image, pas le conteneur. Bien sûr, cela ne démarre pas le conteneur
docker-compose up S'il existe un cache d'images, créez et démarrez le conteneur à partir de là. S'il n'y a pas de cache d'image, créez l'image avec build et créez / démarrez le conteneur.
docker-compose start
Lancez des conteneurs déjà construits, le cas échéant (Arrêtez le conteneur avec docker-compose stop)
docker-compose run Exécutez la commande dans le conteneur du service spécifié par l'argument
$ docker-compose run web rails s
$ docker-compose run web rails c
etc,,,,
https://qiita.com/tegnike/items/bcdcee0320e11a928d46 [Recherche arrière de la commande docker-compose pour les débutants](https://qiita.com/okyk/items/a374ddb3f853d1688820 #) [résumé de la commande docker-compose](https://qiita.com/wasanx25/items/d47caf37b79e855af95f#%E5%8F%82%E8%80%83%E3%83%AA%E3%83%B3%E3%82 % UN F #)
[Le docker Mac sera exempt de stress lent](https://qiita.com/ysKey2/items/346c429ac8dfa0aed892 #)
docker-compose.yml
#Exemple
services:
app:
volumes:
- .:/project/sample_app:delegated
Autoprefixer doesn’t support Node v4.8.2.
web_1 | ActionView::Template::Error (Autoprefixer doesn’t support Node v4.8.2. Update it.):
web_1 | 3: <head>
web_1 | 4: <title><%= content_for?(:html_title) ? yield(:html_title) : "Japanepa.com" %></title>
web_1 | 5: <%= csrf_meta_tags %>
web_1 | 6: <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
web_1 | 7: <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
web_1 | 8: <%= Gon::Base.render_data %>
web_1 | 9: <%= include_gon %>
Autoprefixer doesn’t support Node v4.8.2. "La chose qui ajoute automatiquement les préfixes de Vender est que le Gem appelé Autoprefixer ne prend pas en charge Node v4.8.2."
Ruby on Rails - Autoprefixer doesn’t support Node v4.9.1. Update it. How to fix? Il semble que cela puisse être corrigé en insérant une gemme appelée "mini_racer"
Autoprefixer doesn’t support Node v4.8.2. Update it
#Changer avant
RUN apt-get update -qq \ && apt-get install -y nodejs postgresql-client
#Après le changement
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - && apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/*
Your Ruby version is 2.5.8, but your Gemfile specified 2.5.1 Erreur causée par une version différente de Ruby Cependant, le gemfile et le dockerfile disaient:
source 'https://rubygems.org'
ruby '2.5.1'
FROM ruby:2.5.1
Quand je l'ai recherché, la seule solution était de faire correspondre les versions ruby dans Gemfile et Dockerfile. Par conséquent, prenez les contre-mesures suivantes
«Désinstallation et réinstallation du docker»
En fait, cela a résolu le problème, mais je ne peux pas le recommander de manière trop agressive.
Je ne suis pas très familier avec docker, mais si l'image ruby est extraite, sera-t-elle utilisée quelle que soit la version ruby décrite dans le Dockerfile? ??
Je n'ai pas compris la différence entre docker-compose ʻup,
build et
start`, donc je les ai résumés
Qu'est-ce qu'un cache? Une fois que vous avez construit Docker, un cache est créé. Comme vous le savez, Google Chrome et les autres navigateurs ont la même fonction. Si vous avez un cache, vous pouvez le traiter rapidement lorsque vous le construisez à partir de la deuxième fois.
Cependant, il y a des moments où il n'est pas pratique d'avoir un cache, comme lors de la mise à jour d'un Dockerfile. Si vous n'ajoutez pas l'option --no-cache comme présenté ci-dessus, Docker utilisera le cache pour créer l'image, vous ne verrez donc pas le Dockerfile mis à jour et vous ne pourrez pas créer une nouvelle image.
Après tout, il semble qu'une erreur de différence de version se soit produite car le cache lors du lancement du conteneur avec l'ancien ruby 2.5.8 est resté.
#Docker sans utiliser le cache-compose.Extraire une nouvelle image avec la version ruby spécifiée par yml
$ docker-compose build --no-cache
Supprimer l'ancienne image
#Afficher une liste d'images de docker
$ docker images
> REPOSITORY TAG IMAGE ID CREATED SIZE
> ruby 2.5.1 3c8181e703d2 22 months ago 869MB
#Supprimer l'image en spécifiant l'ID D'IMAGE
$ docker rmi 3c8181e703d2
c'est tout