Docker和docker-compose使用总结

发布时间 2023-04-10 14:23:56作者: dirgo

内容来源与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)