Docker{target="_blank"}
Dockerfile
dockerfile
FROM node:latest
WORKDIR /app
COPY . .
ARG VITE_ENV=development
RUN npm install -g http-server
EXPOSE 8080
CMD ["http-server", "-p", "8080"]
CMD ["tail", "-f", "/dev/null"]DOCKER-COMPOSE
docker-compose.yml
docker-compose up --build 每次执行都要先构建(如果 yaml 文件内有构建命令的话)
docker-compose up --build myservice 只想重新构建特定的服务
docker-compose build --no-cache 只构建镜像,不执行
docker-compose up --env-file env_vars.txt
docker-compose up -d --pull 拉取镜像并后台执行
docker-compose up --pull always 每次执行都拉取最新镜像
yaml
version: '3'
services:
mysql:
image: mysql:latest
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: my_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress_user
MYSQL_PASSWORD: wordpress_password
volumes:
- mysql_data:/var/lib/mysql
wordpress:
ports:
- '8080:80'
build:
context: ./
dockerfile: Dockerfile
args:
- VITE_TEST:${VITE_TEST} // export VITE_ENV=production && docker compose up --build
environment:
WORDPRESS_DB_HOST: ${WORDPRESS_DB_HOST}
WORDPRESS_DB_USER: wordpress_user
WORDPRESS_DB_PASSWORD: wordpress_password
volumes:
mysql_data:shell
docker compose up -d #启动容器tracks
多阶段构建
shell
# 第一个阶段:基于 Node.js 镜像构建应用
FROM node:14 AS builder
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm run build
# 第二个阶段:基于 Nginx 镜像部署应用
FROM nginx:1.21
COPY --from=builder /app/dist /usr/share/nginx/html文件复制
shell
docker cp /path/to/file.txt my-container:/app构建日志
shell
# 用该命令在构建的时候会在 console 保留 ls 等输出内容
docker compose --progress=plain --no-cache buildtag
docker tag <本地镜像名>:<标签> <仓库地址>/<项目名>/<镜像名>:<标签>
docker push <仓库地址>/<项目名>/<镜像名>:<标签>
build and run
shell
docker build -t name:tag . #构建
docker run --name my_docker -p 80:3000 -v /somedir:/etc/user:ro -e KEY1=VALUE1 -d nginx:latest #运行镜像
# -p 是端口映射
# -v 是指定数据卷挂载目录
# -e 是指定环境变量
# -d 是后台运行
# :ro 代表 readonly :rw 代表可读写exec container
shell
docker exec -it 9df70f9a0714 /bin/bash
# id 或者容器名都可以