Win11运行Docker
Docker
前置条件启用WSL2:https://www.cnblogs.com/aeolian/p/18899818
CMD设置代理
set http_proxy=http://127.0.0.1:10809
set https_proxy=http://127.0.0.1:10809
Dockerfile
#克隆dockerfile
git clone https://github.com/docker/welcome-to-docker
cd welcome-to-docker
Dockerfile
# Start your image with a node base image
FROM node:18-alpine
# The /app directory should act as the main application directory
WORKDIR /app
# Copy the app package and package-lock.json file
COPY package*.json ./
# Copy local directories to the current local directory of our docker image (/app)
COPY ./src ./src
COPY ./public ./public
# Install node packages, install serve, build the app, and remove dependencies at the end
RUN npm install \
&& npm install -g serve \
&& npm run build \
&& rm -fr node_modules
#使用3000端口
EXPOSE 3000
# Start the app using serve command
CMD [ "serve", "-s", "build" ]
构建image镜像
#-t:tag,给这个镜像取名为welcome-to-docker
docker build -t welcome-to-docker
使用镜像运行容器
Docker Compose
同时管理多个容器
git clone https://github.com/docker/multi-container-app
包含一个应用,一个数据库
compose.yaml
# Comments are provided throughout this file to help you get started.
# If you need more help, visit the Docker compose reference guide at
# https://docs.docker.com/compose/compose-file/
# Here the instructions define your application as two services called "todo-app" and “todo-database”
# The service “todo-app” is built from the Dockerfile in the /app directory,
# and the service “todo-database” uses the official MongoDB image
# from Docker Hub - https://hub.docker.com/_/mongo.
# You can add other services your application may depend on here.
#定义了多个服务
services:
#第一个服务todo-app
todo-app:
#服务是基于 ./app 目录下的 Dockerfile 来构建镜像的
build:
context: ./app
#depends_on确保todo-database服务已经启动
depends_on:
- todo-database
#告诉node在生产环境中
environment:
NODE_ENV: production
#所需端口
ports:
- 3000:3000
- 35729:35729
#开发模式:监听变化自动操作(experimental扩展);改了 package.json → 触发重新构建镜像(rebuild);改了 ./app 文件夹的代码 → 同步更新容器内部的 /usr/src/app 目录(sync)
develop:
watch:
- path: ./app/package.json
action: rebuild
- path: ./app
target: /usr/src/app
action: sync
#服务二,mongo:6镜像并指定端口
todo-database:
image: mongo:6
#volumes:
# - database:/data/db
ports:
- 27017:27017
#挂载数据卷的配置,MongoDB 的数据将保存在主机上,不会因容器重启而丢失
#volumes:
#database:
运行docker compose
#一键在后台启动所有服务容器,且compose会生成镜像
docker compose up -d
成功后会显示两个容器在运行
浏览器访问
watch
官网文档:https://docs.docker.com/compose/how-tos/file-watch/
#监听文件变动并自动同步或重建容器
docker compose watch
使用compose.yaml中的配置文件
develop:
watch:
- path: ./app/package.json
action: rebuild
- path: ./app
target: /usr/src/app
action: sync
数据持久化
数据持久化使用卷。卷位于本地文件系统,由 Docker 管理。
给 todo-database 容器 挂载一个本地持久化数据卷,让数据库的数据保存在宿主机,而不是仅仅存在于容器内部。
services:
todo-app:
build:
context: ./app
depends_on:
- todo-database
environment:
NODE_ENV: production
ports:
- 3000:3000
- 35729:35729
develop:
watch:
- path: ./app/package.json
action: rebuild
- path: ./app
target: /usr/src/app
action: sync
todo-database:
image: mongo:6
#todo-database使用卷database并指定位置
volumes:
- database:/data/db
ports:
- 27017:27017
#使用volumes
volumes:
database:
命名卷位置由docker管理,简洁、安全、自动管理,适合生产环境,不知道确切位置(不方便调试)
生产环境可以使用绑定挂载,可直接操作、备份、调试
查看卷
docker volume ls # 列出所有卷
docker volume inspect database # 查看 database 卷的详细信息
访问宿主机文件夹(运行宿主项目文件)
Volumes 指示 Compose 将本地文件夹 ./app 挂载到 todo-app 服务容器中的 /usr/src/app 目录。绑定挂载会覆盖容器中 /usr/src/app 目录的静态内容。 /usr/src/app/node_modules 阻止绑定挂载覆盖容器的 node_modules 目录,以保留容器中安装的软件包。
# todo-app容器运行本地项目文件
todo-app:
# ...
volumes:
- ./app:/usr/src/app
- /usr/src/app/node_modules
docker init创建dockerfile或者compose.yml文件
#docker初始化
docker init
#修改docker文件
#构造镜像
docker build -t imagename .
#重命名镜像
docker tag IMAGENAME YOURNAME/IMAGENAME
#登录docker
docker login
#发布镜像,<用户名>/<镜像名>:<标签>
docker push YOURNAME/IMAGENAME:1.0.0
dockerfile官网文档:https://docs.docker.com/reference/dockerfile/
compose官网文档:https://docs.docker.com/reference/compose-file/
运行完成后,生成如下几个文件。
发布镜像
#给镜像重命名
docker tag docker/welcome-to-docker YOURUSERNAME/welcome-to-docker
#发布
docker push YOURUSERNAME/welcome-to-docker:1.0.0
镜像导入导出
#导出
docker save -o my-image.tar my-image:tag
#导入
docker load -i my-image.tar
如果这篇文章对你有用,可以关注本人微信公众号获取更多ヽ(^ω^)ノ ~
