Docker
一.images(镜像)
images(镜像):镜像就想Linux操作系统中Linux内核挂载的root文件系统.
命令:
1.查看有哪些镜像:
docker images [-option]
option:
-a : 所有镜像
-q : 只显示镜像id
--digests:显示镜像摘要信息
--no-trunc:显示完整的镜像信息
2. 从上面拉取镜像
docker pull [镜像名]:[标签]
标签就是版本的意思.
3. 搜索镜像(国内基本用不了)
docker search [镜像名]
4. 删除镜像
docker rmi [镜像名/镜像id]
-f : 强制删除
-a : 删除全部镜像
5. 构建镜像
docker build -t [镜像名] [DockerFile所在路径]
6. 导出镜像
docker save -o [保存目标的名称] [镜像名]
7. 导入镜像
docker load -i [镜像要保存到的位置]
8. 给镜像打Tag
docker tag [本地镜像][:Tag(有就填)] [目标镜像位置][:Tag(想要打的标签/版本号)]
9. History(build)
docker history [镜像名]
10.查看镜像/容器信息
docker inspect [镜像名/容器名]
二.Container(容器)
Container(容器):容器是镜像运行时的实体(就想把类实例化)
1. 查看有哪些容器
docker ps(只能查看正在运行的容器)
-a : 还可以查看没在运行的
2. 启动/停止/重启突发容器
docker start/stop/restart [容器名/id]
3. 强制停止容器
docker kill [容器名/id]
4. 删除容器(删除前要先停止)
docker rm [容器名/id]
5. 查看日志
docker logs [容器名/id]
-f : 就会实时在终端更新日志
6. 对容器进行命令操作(正在运行)
docker exec -it [容器名/id] bash
这样就可以以容器进入bash(也就是Linux系统的终端)
7. 运行一个容器
docker run [容器名/id]
这里也可以-it但是这里与exec不同的是这里是对没运行的容器先让他运行在进bash.
-v [容器内文件]:[宿主机文件]可以将宿主机的文件和容器内的文件关联(类似&)
-p [宿主机端口号]:[容器端口号]可以让宿主机的端口号和容器内端口号关联就可以在宿主机查看容器内的运行.
挂载数据卷到容器:
1.
-v [数据卷]:[需挂载到容器内的位置]2.
-mount source=[数据卷],target=[需挂载到容器内的位置]
8. 把宿主机文件放入容器(以及反向操作)
docker cp [宿主机文件path] [容器名/id]:[容器内路径(可进bash用ls查看)]
9. 显示容器的资源占用情况
docker stats
10. 显示容器的进程信息
docker top [容器名/id]
11. 进入正在运行的容器终端(类似日志/不同的是如果停止容器会被kill)
docker attach [容器名/id]
查看
三.数据卷(Volume)
Volumes(数据卷):数据卷是一个可供一个或多个容器使用的位于宿主机上特殊目录
1. 创建一个数据卷
docker volume create [数据卷名]
2. 查看数据卷信息
docker volume ls
3. 删除数据卷
docker volume rm [数据卷]
4. 查看数据卷信息
docker inspect [数据卷]
四.DockerFile
1. 指定一个镜像
FROM [容器名]:[TAG]
2. 设置工作目录
WORKDIR [工作目录]
3. 拷贝文件
min:
COPY [需要拷贝文件位置] [拷贝到的位置]
max(支持URL和自动解压):
ADD [需要拷贝文件位置] [拷贝到的位置]
4. 在构建时需要运行指令(会在前面设置的工作目录下执行)
RUN [command]
5. 容器启动后命令(覆盖/不覆盖)
覆盖:
CMD ["command 1",...,"command n"]
不覆盖:
ENTRYPOINT ["command"]
6. 声明监听端口
EXPOSE [端口号]
7. 创建挂载点
VOLUME ["位置"]
8. 给某变量打注释
LABEL [变量]=["注释"]
9. 配置环境变量(在容器运行过程中仍然存在并且可查看)
ENV [键值]=[配置内容]
10. 配置在容器运行是可修改的环境变量并且不会保存在容器内
ARG [键值]=[配置内容]
11. 容器的健康检查
HEALTHCHECK [op] CMD [command]
一般command是curl -f 端口网址 || exit 1
op:
--interval [间隔时长]
--timeout [命令运行时长]
--retries [连续失败次数上限]
五.容器间的桥接(网络相关)
由于容器的端口是动态的会变且没法使用容器名字crul,所以我们想到了创建一个网络配置,并且给容器配置该网络配置就可以用容器名字访问端口了.
1. 创建网络配置:
docker network create [网络名字]
指定网络驱动
-d [网络驱动(不懂先写bridge)]
2. 查看网络
docker network ls
3. 查看网络配置信息
docker network inspect [网络名]
4. 连接容器/断开连接
docker network connect [网络名] [容器名/id]
docker network disconnect [网络名] [容器名/id]
5. 删除网络配置
docker network rm [网络名]
六.Docker Compose
yml文件的构建
# compose版本声明
version:'3'
# services服务
sercices:
[服务名]:
# 配置镜像
images: [镜像名]:[TAG]
# 配置容器
container_name: [容器名]
# 端口声明
ports:
- ["宿主机:容器"]
# 数据卷挂载
volumes:
- [数据集名字]:[挂载目录]
# 配值网络
networks:
- [网络名字]
volumes:
[数据卷名字]:
networks:
[网络名字]:
driver: [bridge(网络驱动)]
七. Proxy代理(Docker镜像加速)
1.Ubuntu虚拟机下:
# 找到docker/daemon.josn(找不到自己建)
# 添加:
{
"registry-mirrors": [
["镜像地址1(下面会列出一些)"],
.....,
["镜像地址n(下面会列出一些)"]
]
}
重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
2. Windows下
打开docker Desktop -> setting(就是设置一个齿轮图标) -> Docker Engine
然后
{
"features":
{
"buildkit": true
},
"registry-mirrors": [
# 在这里添加 ok?
["镜像地址1(下面会列出一些)"],
.....,
["镜像地址n(下面会列出一些)"]
]
}
点击Apply
3.镜像地址列举(如果已经暂停服务就不要再写了)
Coding:"https://hub-mirror.c.coding.net/",
DaoCloud:"https://docker.m.daocloud.io",
中科大:https://docker.mirrors.ustc.edu.cn/,
网易:"https://hub-mirror.c.163.com/",
百度:"https://mirror.baidubce.com",
南京大学:"https://docker.nju.edu.cn",
阿里云:"https://[your_id].mirror.aliyuncs.com"//阿里云的要自己申请自己复制
4.编排这些网址
我建议大家ping一下这些网址首先不能ping通的就不要写上去了,然后根据ping完后的速度从快到慢排序.
演示:
# 打开cmd/powershell,比如coding
ping hub-mirror.c.coding.net