Docker 学习
Docker 学习
Docker 概念
Docker 安装
一般是在服务器里
Docker阿里云镜像加速
配置主要是Linux命令
Docker命令大纲及帮助文档的使用
docker帮助文档
查看docker命令
docker --help
查看某个命令,例如ps的详细文档
docker ps --help
也可查阅 [docker官方帮助手册](docker images | Docker Docs)
镜像和容器
- 搜索镜像
容器需要镜像来创建,要创建容器首先要搜索镜像
docker search + 镜像名称 可以搜索,但一般不直观,可以通过科学上网访问docker hub,搜索
- 下载镜像
docker pull (镜像仓库地址默认是docker hub可以不指定) 镜像名 (标签不指定默认是latest,docker hub网站的tags有对应版本命令可参考)
- 列出镜像信息
探索告诉我们:遇到不会的,需要多看看帮助文档
- 列出容器信息
容器 exit 的原因是没有前台在运行
- 创建并运行容器
- 一般多用后台运行,不会退出;
- 默认运行方式是会执行DockerFile最后的CMD命令,容易自动退出,一般不用;
- 交互式运行多使用bash,用于进入容器内部学习和调试
- 删除容器
- 进入容器执行命令
- 查看容器日志
- 容器和宿主机之间的文件拷贝
- 停止和运行容器
docker stop [容器ID/容器名...]
docker start [容器ID/容器名...]
run 命令详解
前情回顾
docker run -d 镜像名 // 后台创建并运行容器
docker run -it 容器名 bash // 交互式创建并运行容器
-
发布端口
容器需要开放端口,和宿主机端口映射,使得通过访问宿主机端口从而访问到容器端口
docker run -p 宿主机端口:容器端口 镜像名
- 数据卷基础
问题一:当容器被删除后,它的数据也会被删除,无法持久化保存
问题二:宿主机修改了文件,容器内数据不能共享(自动同步)
- 设置环境变量
方便不同容器个性化设置变量,比如设置容器密码
- 容器命名
- 设置重启策略
- 其他
常见docker命令
docker --help // 查看docker命令
docker ps --help // 查看某个命令,例如ps的详细文档
docker pull 镜像名[:tags] // 下载镜像,版本tags可不填,默认最新
docker images // 列出所有镜像信息(不包括隐藏镜像)
docker images -q // 只列出镜像的镜像id(不包括隐藏镜像)
docker images -aq // 只列出所有镜像的镜像id
-f 过滤,具体使用看docker帮助文档
docker ps // 默认显示正在运行的容器信息
docker ps -a // 所有容器信息
docker run -d 镜像名 // 后台创建并运行容器
docker run -it 容器名 bash // 交互式创建并运行容器
docker rm [容器ID/容器名...] // 删除容器,但无法删除正在运行的容器,会报错,...表示可跟多个
docker rm -f [容器ID/容器名...] // 强制删除,正在运行的容器就会被删除
$()命令替换,如docker rm -f $(docker ps -aq) // 删除所有容器
docker exec -it 容器id bash // 进入容器交互式执行命令
docker cp /宿主机/xx.文件 容器id:/容器/xx.文件 // 拷贝文件,将宿主机文件拷贝到容器中
docker cp 容器id:/容器/xx.文件 /宿主机/xx.文件 // 反过来
docker stop [容器ID/容器名...] // 停止(多个)容器
docker start [容器ID/容器名...] // 运行容器
run 命令详解
docker run -p 宿主机端口:容器端口 镜像名 // 发布容器端口,和宿主机端口映射
docker run -v 宿主机目录:容器目录[:读写权限ro/rw] 镜像名 // 挂载数据卷,实现宿主机和容器数据共享和持久化
docker run -v 数据卷别名:容器目录[:读写权限ro/rw] 镜像名 // 不需要写宿主机目录,docker会分配,若数据卷不存在会创建
docker volume ls // 列出所有数据卷
docker volume inspect 数据卷名 // 查看数据卷详情
docker volume create 数据卷名 // 创建数据卷,可通过docker volume inspect查看数据卷位置
docker volume rm 数据卷名 // 删除数据卷,正在被使用的数据卷无法-f强制删除,可以先删除容器在删除数据卷
docker run -e 变量名=变量值 镜像名 // 设置环境变量,具体变量名看DockerHub文档
docker run --name 重命名 镜像名 // 容器命名
docker run --restart 重启策略(默认no/always/on-failure[:max-retries]/unless-stopped) 镜像名 // 设置重启策略
docker 网络
docker network create 网络名 // 创建网络
docker network ls // 列出网络
docker run --network 网络名 镜像名 // 加入网络 法一:在创建容器时加入
docker network connect 网络名 容器名/容器ID // 加入网络 法二:创建后加入
docker network inspect 网络名/网络ID // 查看网络详情
docker network rm 网络名/网络ID // 删除网络
相关知识:
curl是一种快速测试网络服务和API的好方法。它很容易使用,速度快,而且可以用于HTTP和HTTPS连接
curl https://www.tutorialspoint.com
whereis 名称,寻找路径
echo 用于向终端发送文本或变量,还可以跟>> 或 > 添加或覆盖文件中的文本。
[echo详解]([Linux中的echo命令|极客教程 (geek-docs.com)](https://geek-docs.com/linux/linux-basic/t_the-echo-command-in-linux.html#:~:text=Linux中的echo命令 1 简介 echo 命令是Linux中的一个基本命令,用于向终端发送文本或变量。 它是最基本和最重要的Linux命令之一,掌握它对初学者来说是非常必要的,可以更容易地浏览命令行。 … 2,命令还可以与输入和输出重定向运算符结合使用。 大于(>`)运算符用于将命令的输出重定向到一个文件。 … 5 总结 echo 命令是一个强大而通用的命令,是所有Linux用户必须掌握的。 ))
数据卷是被设计用来持久化数据的,它的生命周期独立于容器, Docker不会在容器被删除后自动删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷。
Docker 网络
docker会给每个容器分配IP地址,可以通过docker inspect 查看,但是一旦删除容器重新创建,IP地址会改变,写死不方便,可以通过创建网络中的名称代替IP地址;同时,为使得容器之间能够通信,可以将几个容器加入到网络中
Docker部署应用
docker部署mysql
docker部署redis
redis aof
docker部署后端应用
镜像分层
不同镜像是一点点变更的
DockerFile学习
概述
应用场景:DockerFile 可以自定义镜像,简便部署,之前的镜像不能很好满足需求
基本语法:
- 不区分大小写,但习惯大写
- 基本以 FROM 指令开头
- #开头代表注释
入门案例
常用指令
FROM 和 CMD
ENV
WORKDIR
RUN
应用
ADD
docker build 遇到报错做法:1. 可以通过报错发现问题 2. 可以先#注释掉报错那一行再运行docker build 然后docker exec进入容器内部排查问题
EXPOSE
使用EXPOSE 只是声明端口,告诉使用者需要开放哪个端口,最终还是需要-p 开放端口
应用
COPY
ENTRYPOINT
和 COPY 类似,不同点是不能被覆盖,比如,执行docker logs 时,CMD的命令就会被bash覆盖,而ENTRYPOINT就不能会报错:invalid option “bash”
部署应用
后端:
前端:
实际公司开发打包流程参考
推送镜像到镜像仓库
DockerCompose
Services top-level elements | Docker Docs
其他元素和用法可参考文档 Services top-level elements | Docker Docs
项目部署案例
将docker run 命令 翻译成 YAML 文件的内容
docker run --name 在YAML中不需要,因为有服务名称就不需要定义容器名称
传统虚拟机 | Docker | K8s 的区别
物理服务器:实体电脑,机房电脑等,一台物理服务器可以分割成多台虚拟机,
VPS(Virtual Private Server)虚拟专有服务器:每个虚拟机都有独立的操作系统、CPU、内存、存储、网络,这样的虚拟机就叫VPS
VPS 不能自主升降级和动态调整,而ECS可以,VPS加入这样的功能就是ECS,比如可以将1核1g的服务器升级成2核2g
ECS(Elastic Compute Service)弹性计算服务器
Docker容器:
总结:物理服务器上跑ECS,ECS上跑Docker容器,多个Docker共享ECS实例操作内核
Namespace:使得像一个操作系统,Cgroup限制使用资源
docker:
docker架构原理:
docker的命令基础 docker容器和虚拟机有什么区别:
docker compose是什么:
docker swarm是什么:
docker compose和docker swarm的区别是什么:
docker和kubernetes(k8s)的关系是什么:
docker swarm和kubernetes(k8s)的差异是什么: