1. docker三大概念
1.1 Image(镜像):
Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
1.2 Container(容器)
所有的镜像层上增加一个可写层。这个可写层有运行在CPU上的进程,而且有两个不同的状态:运行态(Running)和退出态(Exited)。这就是Docker容器。当我们使用docker run启动容器,Docker容器就进入运行态,当我们停止Docker容器时,他就进入了退出态。
- Repository(仓库)
存放各种开源镜像文件的场所,专门用来存放开源镜像的服务器,跟代码托管的gitlab一样样的
三者关系:
镜像是 Docker 运行容器的前提,仓库是存放镜像的场所(仓库类似代码托管仓库)
透彻理解:当镜像通过 RUN 命令运行成功后,这个运行的镜像就创建一个 Docker 容器啦,容器可以理解为一个轻量级的沙箱, Docker 利用容器来运行和隔离应用,容器是可以被启动、停止、删除的,这并不会影响 Docker 镜像
1.3 镜像跟容器的关系理解
最简单理解:镜像相当于构造函数,容器相当于这个构造函数的一个实例
2. 安装
yum install docker
2.1安装完成后,运行下面的命令,验证是否安装成功:
docker version
// 或者
docker info
3. Dockerfile文件(一下都以node镜像为例,下面会单独讲nginx镜像及本地nginx.conf配置文件挂载)
描述镜像的内容和创建步骤的文件,docker build 命令会执行的文件, 把项目源文件也放到这个文件夹内,本例放的是一个node服务的app.js文件
3.1 app.js文件
var express = require('express');
var app = express();
var server = app.listen(3000, function () {
console.log("启动3000端口服务")
});
3.2 dockerfile文件
FROM node:latest // 从 Docker Hub 上 pull 下 node 最新的基础镜像
RUN mkdir -p /webfile/NeteaseCloudNodeApi // 创建文件
WORKDIR /webfile/NeteaseCloudNodeApi/ // 指定容器工作目录
COPY . /webfile/NeteaseCloudNodeApi/ // 把当前文件复制到容器工作目录 . 指的是所有文件
RUN npm install // 安装依赖包
CMD ["npm", "start"] // 执行启动命令,一个dockerfile只能有一个CMD,如果多个则执行最后一个
4. 构建镜像
有了dockerfile文件了,在dockerfile所在的文件夹执行指令
- 构建镜像
docker build -t nodeserver:v1 .
// . 是Dockerfile文件的路径,不能忽略
// -t 指定构建镜像的名字
- 查看所有镜像
docker images
- 删除所有的镜像
docker rmi $(docker images -q)
- 删除所有不使用的镜像
docker image prune --force --all或者docker image prune -f -a`
5. 容器
Docker 容器就是 Docker 镜像的运行实例,是真正运行项目程序、消耗系统资源、提供服务的地方。 Docker Container 提供了系统硬件环境,我们可以使用 Docker Images 这些制作好的系统盘,再加上我们所编写好的项目代码, run 一下就可以提供服务啦。
5.1 通过镜像创建容器
docker run --name myserver -d -p 3000:3000 --rm nodeserver:v1
// -d 后台运行
// -p 映射指定本地端口到容器指定端口
// --rm:容器停止运行后,自动删除容器文件
// --name:容器的名字为myserver
这个时候通过3000端口已经可以访问容器里面的node服务了
5.2 操作容器的常用指令
- 列出运行的容器
docker ps
- 列出所有容器:包括没有运行的容器
docker ps -a
- 停止所有的容器
docker stop $(docker ps -aq)
- 删除所有的容器
docker rm $(docker ps -aq)
- 删除所有停止的容器
docker container prune -f
5.3 进入容器
- 查看运行的容器
docker ps
- 进入容器
docker exec -it 容器ID bash
// 或者
docker exec -it 容器ID /bin/bash
- 退出容器
exit
5.4 docker run与start的区别
- docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可。
- docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。
6. nginx镜像及本地nginx.config配置文件挂载及vue项目部署
如果nginx配置有疑问可以看我另一篇阿里云服务器(centos)配置nginx及node环境部署
6.1 dockerfile配置文件
FROM nginx:latest
RUN mkdir -p /webfile/vue-music-player-pc
WORKDIR /webfile/vue-music-player-pc/
COPY ./dist/ /webfile/vue-music-player-pc/
6.2 本地nginx.conf配置文件
nginx配置文件网上很多。copy一份就好,但是容器目录要修改成自己项目对应的目录就好,端口设置成自己需要的端口
6.3 构建镜像运行容器
- 构建music镜像
docker build -t music:v1 .
-
创建容器并挂载本地的nginx.conf配置文件到容器,理解为容器使用本地的nginx.congf配置文件
- -p 映射本机端口到容器端口
- -v 挂载本地配置到容器 前面是容器nginx.conf的路径 后面是宿主机nginx.conf的路径
- -d 后台运行
docker run -it -p 8080:80 -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf -d music:v1
现在就可以通过8080端口访问vue项目了
如果有疑问可以加我qq: 990324393
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。