Общие команды докера
- Установить
docker
окружающая обстановка
-
docker --help
Просмотр командной строки докера
-
docker ps -a
Просмотреть все запущенные контейнеры
-
docker images
посмотреть все
- Настройте Dockerfile
- Просмотрите журнал работы контейнера:
docker logs -f [containerId]
Изображение упакованного яйца в Docker
- Создайте новый файл Dockerfile в корневом каталоге проекта и отредактируйте содержимое следующим образом.
# 设置基础镜像,如果本地没有该镜像,会从Docker.io服务器pull镜像
FROM node:10.13.0
# 配置环境变量
ENV NODE_ENV production
# 这个是容器中的文件目录
RUN mkdir -p /usr/src/app
# 设置工作目录
WORKDIR /usr/src/app
# 拷贝package.json文件到工作目录
# !!重要:package.json需要单独添加。
# Docker在构建镜像的时候,是一层一层构建的,仅当这一层有变化时,重新构建对应的层。
# 如果package.json和源代码一起添加到镜像,则每次修改源码都需要重新安装npm模块,这样木有必要。
# 所以,正确的顺序是: 添加package.json;安装npm模块;添加源代码。
COPY package.json /usr/src/app/package.json
# 安装npm依赖(使用淘宝的镜像源)
# 如果使用的境外服务器,无需使用淘宝的镜像源,即改为`RUN npm i`。
RUN npm i --production --registry=https://registry.npm.taobao.org
# 拷贝所有源代码到工作目
COPY . /usr/src/app
# 暴露容器端口
EXPOSE 9000
CMD npm start
- в яичном проекте
package.json
файл, в начальном элементе автозагрузки,--daemon
запускается в фоновом режиме. При использовании контейнера докеров необходимо удалить--daemon
.
- Войдите в корневой каталог проекта и выполните команду упаковки образа:
docker build -t image_name ./
- После завершения упаковки выполните команду запуска контейнера:
docker run -itd --net=host --name container_name -p 8000:8000 image_name
-
-t
Этот параметр очень важен, он означает, что он не будет заходить в контейнер для выполнения команды, если его убрать, команда в CMD запуска Dockerfile будет выполняться внутри контейнера.
- После того, как выполнение будет завершено, вы можете просмотреть его через команду docker ps, и будет отображаться запущенный контейнер.Если вы обнаружите, что контейнер не запускается нормально, вы можете выполнить
docker logs -f containerID
команда для просмотра журнала выполнения в контейнере.
Проблемы, которые могут возникнуть
- Контейнер не может быть запущен нормально: когда это происходит, сначала проверьте правильность команды упаковки контейнера,
docker ps -a
команда для просмотра всех контейнеров, которые вы упаковали.В команде упаковки контейнеров-itd
середина-d
Это эквивалентно выполнению команды CMD в файле Dockerfile внутри контейнера.Мы знаем, что после выполнения команды в nodejs в консоли будет вывод журнала.Вы можете проверить вывод журнала через docker logs -f containerID.
- Контейнер запускается нормально, но программа в контейнере не может нормально подключаться к локальным службам, таким как база данных на локальном хосте.Во-первых, мы должны узнать номер порта службы и добавить соответствующее сопоставление портов в команду запуска контейнера, Такие как
docker run -itd --net=host --name container_name -p 8000:8000 -p 9999:9999 image_name
это--net=host
Параметр очень важен, он указывает контейнеру и хосту совместно использовать сеть. В это время вы можете получить доступ к локальной службе, как обычно, через номер порта, который вы сопоставили внутри контейнера.
- Если вы по-прежнему не можете запустить и получить доступ к службе после выполнения первых двух шагов, рекомендуется перейти в репозиторий github egg.js, чтобы узнать о решениях связанных проблем.egg.js issue