2

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

image.png

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  

image.png

  • 进入容器
    docker exec -it 容器ID bash
    // 或者
    docker exec -it 容器ID /bin/bash

image.png

  • 退出容器
    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一份就好,但是容器目录要修改成自己项目对应的目录就好,端口设置成自己需要的端口

image.png

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


晴天
61 声望3 粉丝