前端项目部署 - docker

你说的曾经没有我的故事 提交于 2019-12-09 00:41:30

docker

docker的概念在这里就不在累述,大家google一下都能得到很详细的描述。

借着这次项目需要自己利用docker部署各环境,记录一下docker学习和部署的相关过程。

概念

linux容器与虚拟机的对比

方案 资源占用 冗余步骤 启动 体积
虚拟机 多(独占一部分内存和硬盘空间) 多(完整操作系统,系统级别操作无法跳过) 慢(mins) -
linux容器 少(只占用少量资源,多个容器可共享资源) - 快(容器中的应用=进程)

docker属于linux容器的一种封装(虽然我并没有深入了解linux容器)。

docker的主要用途有(源阮一峰大大博客)

  • 提供一次性的环境
  • 提供弹性的云服务
  • 组建微服务架构

虽然我在用到的过程中并没有体会到上述好处,但不得不说docker真的是个很方便,也很值得学习的东西

重点

docker有几个非常重要的概念 imagescontainerDockerfile

  • images

    docker把应用程序和依赖打包到images文件里面,通过这个文件就可以生成一个docker 容器。 简单来说,就是把项目的源文件进行打包制作成一个镜像文件

  • container

    利用docker run的命令来生成该对应镜像的容器,容器很像一个小型的服务器

  • Dockerfile
    用来配置image的文本文件,Docker根据该文件来生成二进制的image文件


下载安装

mac下载地址
windows下载地址

docker version    // 验证docker安装成功并查看docker版本

制作docker容器

  1. 在项目的根目录新建文本文件Dockerfile

    # 本次项目基本dockerfile配置项
    # 基础镜像
    FROM nginx
    
    # 将打包好的项目文件拷贝到容器对应位置
    COPY  build /usr/share/nginx/html
    
    # 将本地的nginx配置文件拷贝到容器对应位置,使其生效
    COPY ./nginx.conf /etc/nginx/conf.d/default.conf
    
    # 用来启动容器的命令
    COPY ./docker-compose.yml /home/hope/docker-compose.yml
    
  2. 生成项目的镜像文件

    # 生成镜像文件,并打上tag为feedback-sys
    docker build -t feedback-sys
    
  3. 将镜像文件上传至dockerhub

    docker push ${dockerhub 域名}/归属/仓库名称:tag名
    
  4. 服务器端拉取镜像文件

    docker pull 地址
    
  5. 启动容器

    # 运行一个镜像并  启动 bash 交互
    docker run -it mydocker /bin/bash
    
    # 也可以写docker-compose.yml文件,通过`docker-compose up -d`命令来启动
    # docker-compose.yml文件配置参见官网
    

docker-compose 起镜像时,可以指定docker-compose文件,指令如下:
docker-compose -f docker-compose-feedback.yml up -d 使用指定的docker-compose文件启动镜像。

----

常用docker命令

  • docker ps 查看所有当前运行的容器 (docker ps -a查看所有容器,包括停止的)

  • docker images 查看所有的镜像文件

  • docker rm ${containerId} 移除容器

  • docker rmi ${imageId} 移除镜像文件

  • docker rm ${docker ps -aq} 删除所有容器

  • docker attach ${containerId} 进入docker容器,以bash交互

  • docker kill ${containerId} 杀掉运行的容器,stop也可以


  • docker build -t ${mydocker} . 将当前目录下文件构建成指定名称镜像

  • docker tag ${imageName} ${imageName} 改镜像tag

  • docker run -it ${imageName} /bin/bash 启动镜像,并进入容器,以bash进行交互

  • docker run --name ${imageName} -d -p 80:80 nginx 用 nginx 镜像启动一个容器,命名为 webserver,并映射 80 端口

tips: 进入一个运行中的镜像容器,并以bash进行交互,可以使用docker exec -it ${containerName} /bin/bash命令


  • docker exec -it ${containerName} /bin/bash 以bash交互进入运行中的容器,当退出时不会停止容器运行
  • docker attach ${containerName} 进入运行中的容器,但是退出时会导致容器停止运行
  • docker logs -f -t --tail 10 ${containerName} 查看某个运行容器的前十条log信息

如何清理Docker占用的磁盘空间

在使用docker时,经常会产生一个问题,docker占用太多磁盘空间,当磁盘被docker占满,服务也就挂了,所以我们要对此保持警惕,定时查看docker的磁盘占用情况。

  1. 查看docker占用的磁盘情况
    docker system df        // 查看磁盘占用情况
    

在这里插入图片描述
看,可怕吧, docker 镜像占用了7.7GB的磁盘,而容器则占用了40MB的磁盘,如果我继续不管它,不清理,这个数据会依次叠加,一直到撑爆磁盘。

  1. 清理docker 占用的磁盘

    	docker system prune -a  // 清理删除关闭的容器,无容器使用的镜像,无引用的数据卷等,以及dangling镜像(无tag的镜像)
    

    在这里插入图片描述
    执行清理命令后的效果,docker占用的磁盘瞬间清空了(因本地没有起docker容器,所以会将所有的docker镜像和容器都清除)

  2. 查看正在运行的docker容器,以及docker镜像
    在这里插入图片描述

  3. 对于旧版本的docker,如果没有docker system命令,则需手动清理

    docker ps -a | grep Exit | cut -d '' -f 1 | xargs docker rm        // 删除所有关闭的容器
    
    docker rmi $(docker images | grep "^<none>" | awk "{print $3}")    // 删除所有dangling镜像(无tag的镜像)
    
    docker volume rm $(docker volume ls -qf dangling=true)  // 删除所有dangling数据卷(无用volume)
    
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!