👨🏫 Docker And Nginx.
简单学习Docker。
先理解一个问题:什么是容器?
我以前简单学Docker
的时候,用Docker部署Redis和MySQL的时候,我以为容器仅仅只是一个容器
,在这里我首先要纠正一点就是,不要把容器想成简单的容器,可以把每一个容器想象成一个Linux环境,我认为这一点也是Docker比较牛的地方.
🔖 一、Docker学习。
💡 1.1 什么是Docker.
Docker 是一个开源的应用容器引擎,基于Go实现,遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,这里所说的容器和上面我提到的容器是一个容器,容器是完全使用沙箱机制,可以这么理解就是,一台Linux部署了5个Docker容器,那么这一台电脑可以相当于6台电脑去使用,容器可以比作是Linux中的Linux,这个我也是在学习过程中才理解的.
不幸的是Docker开始收费了,但是幸运的是Docker提供社区版本来供我们学习.
💡 1.2 Docker 有什么优点.
现在,各个大厂都在使用Docker和K8S来进行上云,既然这么多大公司都在用,那么就说明,Docker肯定是有其非常亮眼的优势的,现在我们就来分析一下。
Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助Docker可以以管理应用程序的方式来管理基础架构。通过利用Docker的方法来快速交付、测试、部署代码。
💡 1.3 Docker 整体将架构.
Docker 是基于C/S 模式的架构的,其通过 DocekrClient 和 与 Docker Daemon 建立通信,使用远程API来管理和创建Docker容器. 其可以通过HTTP API 形式通信也可以通过Socket方式进行通信.
Docker Client 通过发送请求到 Docker Server中,Docker Server 根据路由以及请求来调用Engine中的各个不同的Job来完成本次请求操作,而之后各个Job完成自己的任务向Engine返回即可.
💡 1.4 Docker安装.
因为DEV-CLOUD内部集成了Docker,所以这里省略. 如果想要在自己服务器上安装docker的话,参考上面 Docker 教程
💡 1.5 Docker 中容器和镜像的关系.
Docker中容器和镜像之间的关系就相当于操作系统中的进程和程序的关系。
💡 1.5 Docker命令.
下面是一些基本的Docker命令,一些高级的Docker命令没有列出来.
docker search nginx
搜索某个镜像.docker pull nginx
下载nginx@latest.docker images
: 查看当前Docker中存在的镜像.docker ps
:查看当前未关闭的容器.docker ps -a
:查看所有容器.docekr rm imagname
删除指定容器.docker rmi imgid
删除指定镜像.docker run --name 容器名字 -p 18088:18088 -d 镜像名字
, 关于docker run 的命令参数可以通过命令:docker run --help
去查看该命令参数的使用详解.- 使用
docker run
命令启动容器之后,可以通过docker ps
查看当前正在运行的容器,如果发现当前没有正在运行的容器,那么可以使用docker ps -a
去查看所有的容器,包含已经关闭的容器. docker exec -it 容器名字 bash
:进入该容器内部,每一个容器都相当于是一个Linux环境。docker strop 容器名字|容器ID
可以停掉该容器.docker start 容器名字|容器ID
启动该容器,重新启动这个容器,可能该容器内部的配置文件已经改变.docker restart 容器名字|容器ID
重启该容器.
💡 1.6 DockerFile 非常重要.
参考文档:Dockerfile详解
-
DockerFile的功能:我们可以利用DockerFIle来构建我们自己的Docker镜像,然后可以进行发布等,但是我们要进行构建镜像的话,前提是我们必须要依赖一个基础镜像. 而Dockerfile的第一行不能是注释,只能是
FROM
命令,表示该镜像的基础镜像是什么,docker build
在执行的时候从上乡下执行构建镜像,没执行一行命令就构建一个镜像,整个构建过程就相当于在基础镜像上层层叠加. -
Dockerfile 命令形式.
- Dockerfile 整体就两类语句组成:
#
以#
开头的注释信息.instruction args
指令 + 参数.- Dockerfile 文件名字必须首字母大写.
- Dockerfile 指令不区分大小写,但是为了方便和参数做区分,通常指令使用大写.
- Dockerfile 指令按顺序从上至下依次执行.
- Dockerfile 中第一个非注释行必须是
FROM
指令,用来指定当前镜像依据的是那个基础镜像. - Dockerfile 中需要调用的文件必须跟Dockerfile文件在同一目录下,或者在其子目录下,父目