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