Docker和docker-compose使用总结
内容来源与B站up技术蛋老师视频:https://www.bilibili.com/video/BV1MR4y1Q738/?p=1&t=138
1 docker运行的结构:
容器a 容器b 容器c
| | |
docker引擎
|
主机操作系统(包含内核)
2 docker三个重要概念
镜像image (相当于一张照片)
容器 container
用于定制镜像的文件 Dockerfile (相当于做菜的菜谱,此文件只能是这个名字且没有后缀名)
3 Dockerfile 一般写法
FROM nginx:1.22.1(基础镜像)
WORKDIR /test(镜像里的工作目录,下面copy等就可以用相对目录)
COPY package.json .(把宿主机当前目录下的package.json文件复制到镜像的 /test 下,单独拷贝这个文件,是因为docker是一行一行执行的,且有缓存机制,这样把不常改动的文件分离出来,再次构建可提高效率,节省时间)
RUN npm install (执行命令)
COPY . .(拷贝当前宿主机目录下全部文件到镜像/test下,这里可以使用 .dockerignore 忽略不需要拷贝的文件)
EXPOSE 3000 (暴露端口号,其实只有文档作用,不起实际作用,实际取决于你的程序)
CMD ["node","app.js"] (注意是数组形式)
4 .dockerignore 写法
node_modules
Dockerfile
.dockerignore
.git
5.构建命令
docker build . (1.构建到当前文件夹下)
docker images (2.查看全部镜像)
docker tag e6f(镜像的id,可以不写全) 用户名/镜像名:版本号 (3.改名,这样写符合dockerhub要求,推送使用,只在本地用也可以只写名字)
也可以 docker build -t 镜像名 .
6.移除镜像
docker rmi -f(force强制) 镜像名(image id 不同时也可以用id)
7.运行镜像
docker run -d(detached mode 后台执行) -v(volume文件夹绑定同步) /home/xmdata/(宿主机):test:ro(ro表示宿主机文件夹只读,这样不会被容器增加或修改文件) -v /home/xmdata/node_modules(此文件夹不绑定同步) -p(端口映射) 3001(宿主机端口):3000(容器端口) --name 容器名 镜像名
8.查询运行的镜像
docker ps -a(全部)
9.删除容器
docker rm -f 56e(容器id或名字)
10.进入容器
docker exec -it 容器名 /bin/sh
11.删除容器时销毁 volume
docker rm -fv 容器名
12.docker-compose
使用 docker-compose.yml 文件
写法:------------------------------------------------------------------------
version:"1.29"
services:
容器名:(缩进必须有)
build: . (构建,这样运行之前自动构建,不再需要单独构建,同样需要缩进)
ports:
-"3000:3000"
volumes:
-./:/test:ro
-/home/xmdata/node_modules(此文件夹不绑定同步)
------------------------------------------------------------------------------
运行:
docker-compose up -d --build(坑,注意,不加的话下次使用缓存,镜像不会重新构建)
停止:
docker-compose down -v(清除volume)