Docker 详解
一、docker 工作原理
docker 整体分为四个部分:远程镜像仓库、本地镜像、本地容器、docker 软件
远程镜像仓库
- 云端镜像仓库,供用户上传、下载需要的镜像。默认是Docker Hub,也可以是其他仓库
本地镜像
- 镜像是容器的模板
本地容器
- 容器是根据镜像创建的,它是真正运行的实例
docker 软件
- 它是连接远程镜像仓库、本地镜像仓库和本地容器的基座,也是运行容器的引擎。
二、 docker image
镜像
1. 镜像特点
- 镜像是容器的模板,它是只读的,不能对其修改。
- Linux 镜像可以在 Linux、Windows 的 docker 中使用,而 Windows 镜像只能在 Windows 的 docker 中使用。
2. 镜像命令
命令 | 说明 |
---|---|
docker images | 查看本地镜像 |
docker search <名称关键字> | 搜索镜像仓库 |
docker pull <镜像名:tag 版本> | 下载镜像 |
docker push <镜像名:tag 版本> | 上传镜像 |
docker rmi <镜像名:tag 版本> | 删除镜像 |
docker save -o <输出文件路径> <镜像名:tag 版本> | 打包本地镜像文件 |
docker load -i <加载文件路径> | 导入本地镜像文件 |
三、 docker container
容器
容器是真正运行的实例,容器隔离网络、文件、进程等环境。一个容器是一个沙盒隔离环境。
1. 创建容器
两种创建容器 方式(两者都是基于 docker 镜像创建):
- 通过命令直接创建(需要完整镜像)
- 通过
dockerfile
创建(镜像可不完整)
容器创建命令
1. 基础参数
2. 挂载宿主机目录
3. 网络设置
容器内的 127.0.0.1
指向的是容器本身,如果容器共用宿主机网络,则 127.0.0.1
会指向宿主机
4. 环境变量设置
5. 基础镜像
6. 容器每次启动执行的命令
一般为 shell
指令
2. 容器命令
命令 | 说明 |
---|---|
docker ps | 查看本地容器 |
docker ps -a | 查看所有容器(包括未运行的) |
docker start <容器 ID> | 启动容器 |
docker restart <容器 ID> | 重启容器 |
docker stop <容器 ID> | 停止容器 |
docker rm <容器 ID> | 删除容器 |
docker exec -it <容器 ID> /bin/bash | 进入容器内部 |
docker commit -a "作者信息" -m "log 信息" <容器 ID> <目标镜像名称:tag 版本> | 容器打包成镜像 |
docker cp <文件目录> <容器 ID>:<目标目录> | 拷贝文件到容器 |
docker cp <容器 ID>:<文件目录> <宿主机目标目录> | 拷贝容器文件到宿主机 |
docker update <容器 ID> <相关设置> | 更新容器设置(一些容器设置无法再容器创还能后修改) |
四、 Dockerfile
定制镜像文件
Dockerfile
文件例子:
FROM node:18-alpines3.15 # 镜像包,alpines 是 linux 的轻量化版本
WORKDIR /egg # docker 容器的工作目录
COPY package.json # 复制 packer.json 到/egg 目录下
RUN npm install # 执行命令
COPY . . # 复制当前目录下的所有文件到/egg 目录下,第二次执行 COPY 会复制两次 package.json,有缓存
EXPOSE 3000 # 暴露容器端口
CMD ["node", "app.js"] #
.dockerignore
文件
忽略打包的文件,类似与 .gitignore
node_modules
Dockerfile
.dockerignore
以上文件编写完后,在当前项目下执行 docker build .
来构建镜像(或者 docker build -t <镜像名> .
,可省略第 2 步)
在用 docker tag
给镜像起名
创建运行容器
docker run -d -p 3000:3000 --name <容器名称> <镜像名称>
-d
: detached mode 后台运行-p
: port 端口映射,主机端口:容器端口
多容器间共享数据卷 volume
即多个容器共享的 文件夹
创建:
docker volume create <数据卷名称>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论