美文网首页
Docker 基础入门

Docker 基础入门

作者: 风之化身呀 | 来源:发表于2019-01-05 17:22 被阅读6次

    1、Docker 扫盲

    1.1、Docker是干嘛的

        软件开发最大的麻烦事之一,就是环境配置。举例来说,安装一个 Python 应用,计算机必须有 Python 引擎,还必须有各种依赖,可能还要配置环境变量。而且换一台机器,就要重来一次。Docker可以解决这个问题

    1.2、Docker 是什麽

        Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。容器是进程级别的,相比虚拟机有很多优势:(1)启动快;(2)资源占用少(3)体积小。
        Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

    1.3、Docker 怎么玩儿

    // 确保安装成功
    docker version
    // 启动 docker
    sudo systemctl start docker
    // 将当前用户加入docker用户组,避免每次要输入 sudo
    sudo groupadd docker
    sudo usermod -aG docker $USER
    

    1.4、Docker 基本概念

    • Image(镜像)文件
      1、Docker 把 应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器
      2、image 文件可以看作是容器的模板,Docker 根据 image 文件生成容器的实例。
      3、同一个 image 文件,可以生成多个同时运行的容器实例。
      4、image 文件是通用的,一台机器的 image 文件拷贝到另一台机器,照样可以使用
      5、Docker 的官方仓库 Docker Hub 是最重要、最常用的 image 仓库
    # 列出本机的所有 image 文件
    $ docker image ls
    # 删除 image 文件
    $ docker image rm [imageName]
    
    • Container(容器)文件
      1、image 文件生成的容器实例,本身也是一个文件,称为容器文件。
      2、一旦容器生成,就会同时存在两个文件: image 文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已。
      3、终止运行的容器文件,依然会占据硬盘空间,可以使用docker container rm命令删除
    // 拉取 镜像文件
    docker image pull hello-world
    // 基于镜像文件生成容器文件,每次都会生成一个新的容器文件
    docker container run hello-world
    // 基于镜像文件生成容器文件,复用存在的容器文件
    docker container start [containerID]
    // 列出本机正在运行的容器,会包含containID信息
    $ docker container ls
    // 列出本机所有容器,包括终止运行的容器
    $ docker container ls --all
    // 停止某个容器,不会删除容器文件
    docker container kill [containID]
    // 移除某个容器,删除容器文件
    docker container rm [containerID]
    // 从正在运行的 Docker 容器里面,将文件拷贝到本机。下面是拷贝到当前目录的写法
    docker container cp [containID]:[/path/to/file] .
    

    1.5、docker 的可视化工具

    2、Docker 进阶

    本小节介绍如何制作 image 文件,以及 docker 的一些高级用法

    2.1、制作 image

    主要是编写 Dockerfile 文件,此外用.dockerignore文件排除不想打包的文件。Dockerfile 文件它是一个文本文件,用来配置 image。Docker 根据 该文件生成二进制的 image 文件。

    // Dockerfile 文件示例
    FROM node:8.4 // 该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node
    COPY . /app // 将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录
    WORKDIR /app 指定接下来的工作路径为/app
    RUN npm install --registry=https:\/\gistry.npm.taobao.org //在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。
    EXPOSE 3000 // 将容器 3000 端口暴露出来, 允许外部连接这个端口。
    CMD node demos/01.js  // 容器启动后自动执行 node demos/01.js
    

    然后执行docker image build -t 容器名称 . 即可构建一个 image

    2.2、微服务架构

    微服务很适合用 Docker 容器实现,每个容器承载一个服务。一台计算机同时运行多个容器,从而就能很轻松地模拟出复杂的微服务架构。如何管理这多个容器呢,即一行命令同时启动或关闭多个容器。Docker Compose可以做到。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。

    // 一个 docker-compose.yml 示例
    mysql:   // 容器名称
        image: mysql:5.7  // 镜像名称
        environment:
         - MYSQL_ROOT_PASSWORD=123456  // 所需的环境变量
         - MYSQL_DATABASE=wordpress
    web:
        image: wordpress
        links:        // 需要链接到 mysql 容器
         - mysql
        environment:
         - WORDPRESS_DB_PASSWORD=123456
        ports:
         - "127.0.0.3:8080:80"
        working_dir: /var/www/html
        volumes:   // 将当前目录内容 映射到容器的 /var/www/html 目录
         - wordpress:/var/www/html
    

    docker-compose up // 启动
    docker-compose stop // 关闭以后,这两个容器文件还是存在的,写在里面的数据不会丢失。下次启动的时候,还可以复用。
    docker-compose rm // 把这两个容器文件删除

    3、参考

    相关文章

      网友评论

          本文标题:Docker 基础入门

          本文链接:https://www.haomeiwen.com/subject/vxhrlqtx.html