文章目录
前言
介绍docker常用命令
一、名词解释?
- 镜像
对比类 - 容器
对比类的实例
eg: 类比: const person = new Person()
person => 容器
Person => 镜像
二、配置容器
1、创建 Dockerfile 文件
# 基础镜像版本
FROM node:18-alpine3.15
# 工作目录
WORKDIR /egg
# 从本机当前文件夹复制到镜像egg中 '.' => 表示当前目录 相对地址
COPY package.json .
# 执行运行命令
RUN npm install
# 复制剩余所有构建的必须文件
# 忽略 node_modules
# 需要创建 .dockerignore文件,剔除不需要复制的文件
# 分开两个COPY 是因为实际项目中package.json 文件很少变动, 下次构建的时候可以使用docker的缓存
COPY . .
# 暴露容器的端口号, 和本地项目的端口号不同,是两个项目,只起文档作用,让人知道镜像使用的端口是多少
EXPOSE 3000
# 构建
CMD ["npm", "run", "dev"]
2、创建 .dockerignore
# 剔除nodule_modules
node_modules
# 剔除掉 Dockerfile
Dockerfile
# 剔除 .dockerignore
.dockerignore
三、容器操作
1、构建镜像
docker build .
2、发布镜像到docker hub 仓库
# 1、登录docker hub
docker login
# 发布,需要在hub创建一个同名仓库
docker push docker-test-image:v1.0
# 拉取远程镜像
docker pull docker-name
3、构建镜像
# 构建带名称和版本的镜像(也可以不带,不带默认名称及版本都为none) '.'表示相对地址,当前目录,和Dockerfile 同级
docker build -t docker-name:v1.0 .
# 给没有名称的镜像命名(通过 docker build . 构建的镜像名称默认为None)
docker tag imageId docker-name:v1.0
4、删除镜像
# -f(force) 强制删除,可删除正在运行中的镜像 镜像名称格式 name:version
docker rmi -f docker-name:v1.0
5、运行镜像
# -d 表示容器在后台运行,不占用命令行
# -p 表示映射端口 主机端口/容器端口(可以不同) 访问主机端口的时候会访问到容器的端口
# --name 自定义容器名称
# -v(volumes) 主机文件夹:容器文件夹 这样可以绑定两边的文件夹,文件变动可以联动,一边变化,另一边也会相应变化
# -v 如果只提供了一个容器文件地址,则表示容器里面的某系文件/文件夹是不能进行同步的
# eg: -v /containerFolder/node_modules 表示node_modules文件夹不能进行同步
# 如果容器有新增的文件或文件夹,那么本地也会同步新增,解决提问题只需让本地文件设为只读,可以在文件绑定的后面添加 :ro 表示只读
docker run -d -v $PWD:/containerFolder:ro -v /containerFolder/node_modules -p 3000:3000 --name container-name docker-name:version
6、查看当前运行的容器
# -a 可以查看所有的容器,包括暂停运行的
docker ps
7、暂停容器的运行
docker stop containerId
8、删除(销毁)不需要的容器
# -f 强制移除在运行中的容器
# -v 同步删除volumes
docker rm -fv containerId
9、进入正在运行的容器
# -i 可交互模式
# -t 以终端交互的模式
docker exec -it container-name /bin/sh
10、重启容器
docker restart container-name
11、容器日志
# 查看容器启动日志
bash logs container-name
四、docker-compose
简介:将容器操作命令配置成一个文件,简化过长的命令行
# 在 Dockerfile 同级目录创建 docker-compose.yml 文件
touch docker-compose.yml
1、配置docker-compose.yml
# compose 版本
version: "3.8"
# 每个容器都需要在services 下声明
services:
# 容器名称
nodejs-container:
# 根据当前文件夹进行构建, docker引擎就会去找当前目录下的 Dockerfile 来构建镜像
build: .
# 端口映射 主机端口:容器端口
ports:
- "3000:3000"
# volumes 相对地址
volumes:
- ./:/egg:ro
- /egg/node_modules
2、运行docker-compose
# -d 在后台运行容器,不占用当前命令行
# --build 如果镜像有修改,docker-compose 就会重建, 如果不加上--build,下次就会使用之前的缓存。 docker-compose 的坑之一,谨记!!!
docker-compose up -d --build