美文网首页
前端学点docker知识

前端学点docker知识

作者: 王逵_e9b3 | 来源:发表于2020-01-09 16:02 被阅读0次

    常见命令

    下载 docker

    centOS

    1. 移除服务器上老的 docker
    sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
    
    1. 下载对应插件
    sudo yum install -y yum-utils \
      device-mapper-persistent-data \
      lvm2
    
    1. 配置仓库
    sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
    
    1. 下载 docker-cli
    sudo yum install docker-ce docker-ce-cli containerd.io
    
    1. 启动 docker——sudo systemctl start docker

    2. 测试 docker 安装是否成功——sudo docker run hello-world

    3. 查看当前下载镜像docker image ls

    4. 下载 docker-compose

    sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    
    1. 解析 docker-compose
      sudo chmod +x /usr/local/bin/docker-compose

    2. 配置 docker-compose 的路径
      sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

    3. 查看版本docker-compose --version

    docke 基础

    1. docker 提供了一个开发,打包,运行 app 的平台

    2. image:镜像

    • 文件和 meta data 的集合(root filesystem)
    • 分层的,并且每一层都可以添加改变删除文件,成为一个新的 image
    • 不同的 image 可以共享相同的 layer
    • image 本身是 read-only 的

    获取 image: build from dockerfile

    //  选择基本image
    FROM ubuntu:14.04
    //  选择基本标识
    LABEL maintainer="Peng Xiao <xiaoquwl@gmail.com>"
    // 运行代码
    RUN apt-get update && apt-get install -y redis-server
    
    // 暴露的端口
    EXPOSE 6379
    // 程序的入口,启动redis-server
    ENTRYPOINT ["/usr/bin/redis-server"]
    
    

    然后执行命令docker build -t xiaopeng163/redis:latest .
    -t表示当前目录的名字
    . 表示基于当前目录的 dockerfile 构建

    获取 image:pull from registry

    类似与 git,把 image 传到 registry 上面(dockerhub),然后通过 pull 命令拉取

    eg: docker pull ubuntu:14.04

    构建一个 base image

    1. 创建一个 dockerfile 文件

    2. 编写 dockerfile

      FROM scratch
      
      ADD hello /
      
      CMD ["/hello"]
      
    3. docker build -t xiaopeng163/hello-world . 在 dockerhub 上的 xiaopeng163 中创建名为 hello-world 的 image

    3. container:容器

    • 通过 Image 创建(copy)
    • 在 Image layer 之上建立一个 container layer (可读写)
    • 类比面向对象:类和实例
    • Image 负责 app 的存储和分发,container 负责运行 app

    4. 构建自己的 docker 镜像

    对 base image 的某一个 container 做了修改之后,重新构建为新的 image

    • docker container commit

      docker commit containerName dockerhubRep/imgName

      不太提倡,无法保障 image 的安全

    • docker image build

      通过 dockerfile build 一个 image

      FROM centos
      
      RUN yum install -y vim
      // 我们知道image是不可变的,在build过程中,会生成一个临时的container,这个和js的包装对象类似
      

      运行docker build -t dockerhubRep/imageName .

    5. dockerfile 语法解析

    
      // 尽量使用官方的image,确保安全
      // 制作base image
      FROM scratch
      // 使用base image;
      FROM centos
    
      // image的信息,类似与代码中的注释
      LABEL maintainer
      LABEL version
      LABEL description
    
      // 每运行一个RUN,都会新生成一个layer,故建议通过&&和\将多个命令合并为一个
      RUN
    
      // 设定当前工作目录,如果根目录下没有root,会自动创建,
      // 使用workdir,不要用run cd ;尽量使用绝对目录
      WORKDIR /root
    
      // 将文件添加到指定目录
      // ADD 还可以解压缩
      // 大部分情况,copy优于ADD,添加远程文件/目录使用curl或者wget
      ADD hello /   将hello添加到根目录
      COPY
    
      // 设置常量,尽量使用,增加可维护性
      ENV
    
      // 存储和网络
      VOLUME and EXPOSE
    

    RUN 执行命令并创建新的 image layer

    CMD 设置容器启动后默认执行的命令和参数
    如果 docker run 指定了其他命令,cmd 命令被忽略
    如果定义了多个 cmd ,只有最后一个会执行

    ENTRYPOINT 设置容器启动时运行的命令
    不会被忽略,一定会执行
    最佳实践:写一个 shell 脚本作为 entrypoint

            ```javascript
            COPY docker-entrypoint.sh /usr/local/bin/
            ENTRYPOINT ['docker-entrypoint.sh']
            EXPOSE 27017
            CMD ["mongod"]
            ```
    

    shell 格式

    RUN apt-get install -y vim
    CMD echo "hello docker"
    ENTRYPOINT echo "hello docker"
    

    Exec 格式

    RUN[('apt-get', 'install', '-y', 'vim')]
    CMD[('echo', 'hello docker')]
    ENTRYPOINT[('echo', 'hello docker')]
    

    6. 将 image 发布到 dockerhub

    • docker login
    • docker push imageName:tag

    docker network

    端口映射

    docker run --name web -d -p 80:80 nginx

    --name: 容器命名
    -d:后台运行
    -p:端口映射 主机端口:容器端口

    docker volumn 数据持久化

    • 基于本地文件系统的 volumn
      可以在执行 docker create 或 docker run 时,通过-v 参数将主机的目录作为容器的数据卷。
    • 基于 plugin 的 volumn,支持第三方的存储方案,比如 nas,aws

    volumn 的类型

    • 受管理的 data volumn,由 docker 后台自动创建。
    • 绑定挂载的 volumn,具体挂载位置可以由用户指定。

    具体用法

    dockerfile 中:volume ['/var/lib/mysql']

    1. docker volumn ls 查看 volume
    2. docker volumn inspect id 查看指定 volume
    3. docker volumn rm id 删除 volume
    4. docker run -d -v mysql:/var/lib/mysql --name mysql1 -v 将/var/lib/mysql 的 volume 命名为 mysql

    bind mounting

    将本地文件和容器映射

    docker run -d -v $(pwd):/usr/share/nginx/html -p 80:80 --name web 。。。

    $(pwd)代表当前目录

    docker-compose

    批处理多容器的 app

    • 是一个基于 docker 的命令行工具
    • 通过一个 yml 文件定义多容器的 docker 应用
    • 通过一条命令就可以根据 yml 文件的定义去创建或者管理多个容器
    • yml 主要包括 services,networks,volumes

    基础命令

    1. docker image ls 查看本机的 image

      docker image rm id 删除某一个 image

    2. docker container ls 查看本机的正在运行的容器

      docker container ls -a查看历史运行过的容器

      docker container rm id 删除某一个容器

    3. docker run/exec -it name /bin/bash 运行某一个容器并进入 bash

    4. docker network inspect bridge 看到对应容器的 bridge
      ping ip ping 通 ip
      telnet ip:duankou 查看端口情况
      curl ip 访问 ip

    5. docker-compose up -d 根据命令行目录下的 docker-compose.yml 文件起项目,-d 不打印日志并后台运行

    6. docker-compose ps 查看多个容器中的服务的情况

    7. docker-compose stop 关闭容器中的服务但不删除

    8. docker-compose done 关闭容器并删除容器

    9. docker-compose images 列出 images

    10. docker-compose exec [container] bash 进入容器的 bash 命令行

    11. docker rmi $(docker images -q) 删除所有镜像

    12. docker stop/rm $(docker ps -aq) 停止/删除所有容器

    配置 docker-compose.yml

    相关文章

      网友评论

          本文标题:前端学点docker知识

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