• Docker菜鸟教程-硬敲系列


    Docker

    容器技术/相互隔离,一次部署,多次复用,

    建议直接看菜鸟教程,抄的它的

    0. Centos安装

    curl -sSL https://get.daocloud.io/docker | sh
    

    1. HelloWorld

    docker run ubuntu:15.10 /bin/echo "hello"

    • docker: Docker 的二进制执行文件。
    • run: 与前面的 docker 组合来运行一个容器。
    • ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
    • /bin/echo "Hello world": 在启动的容器里执行的命令

    交互式运行容器

    docker run -i -t ubuntu:15.10 /bin/bash
    
    • -t: 在新容器内指定一个伪终端或终端。
    • -i: 允许你对容器内的标准输入 (STDIN) 进行交互。

    exit: 退出容器

    后台运行容器

    docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
    
    • -d:后台运行容器,返回一个容器ID

    查看容器状态

    docker ps -a

    image-20210106114542027

    输出详情介绍:

    CONTAINER ID: 容器 ID。

    IMAGE: 使用的镜像。

    COMMAND: 启动容器时运行的命令。

    CREATED: 容器的创建时间。

    STATUS: 容器状态。

    状态有7种:

    • created(已创建)
    • restarting(重启中)
    • running 或 Up(运行中)
    • removing(迁移中)
    • paused(暂停)
    • exited(停止)
    • dead(死亡)

    PORTS: 容器的端口信息和使用的连接类型(tcpudp)。

    NAMES: 自动分配的容器名称。

    查看容器内标准输出

    docker logs 容器ID/容器Name

    image-20210106114816281

    停止容器

    docker stop 容器ID/容器NAME

    image-20210106115352243

    2. 容器使用

    客户端/命令查看

    docker ps --help:查看ps命令的帮助信息

    容器使用

    a. 获取镜像

    docker pull ubuntu
    

    b. 启动容器(交互命令行进入)

    docker run -it ubuntu /bin/bash
    

    参数说明:

    • -i: 交互式操作。
    • -t: 终端。
    • ubuntu: ubuntu 镜像。
    • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

    要退出终端,直接输入 exit:

    启动已停止的容器

    docker start 容器ID/容器NAME

    后台运行

    docker run -itd --name 容器名称 镜像名称 /bin/bash

    docker run -itd --name ubuntu-test ubuntu /bin/bash

    停止一个容器

    docker stop 容器ID/容器Name

    重启

    docker restart 容器ID/容器Name

    进入容器

    在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器

    docker exec -it 容器ID/容器Name /bin/bash

    image-20210106121217914

    c. 导出/入容器

    • 导出

      docker export 容器ID > 导出文件名称

      image-20210106121528357

    • 导入(容器导入成镜像)

      cat ubuntu.zip | docker import - test/ubuntu:v1

      image-20210106121733997

    d. 删除容器

    docker rm -f 容器ID/容器NAME

    docker container prune 删除所有终止状态的容器

    image-20210106122100369

    e. 运行一个WEB应用

    • docker pull training/webapp # 拉取镜像

    • # 运行容器
      docker run -d -P training/webapp python app.py
      

    参数说明:

    • -d:让容器在后台运行。
    • -P:将容器内部使用的网络端口随机映射到我们使用的主机上。

    查看WEB应用

    docker ps

    image-20210106123004831

    Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上。

    image-20210106123115144

    指定端口映射

    docker run -d -p 5000:5000 training/webapp python app.py: 容器端口5000 映射到主机端口5000上

    • docker port 容器ID:快捷查看容器端口

    image-20210106123423192

    查看WEB应用日志

    docker logs -f 容器ID/容器NAME

    image-20210106123609526

    docker top 容器ID/容器Name查看容器内部运行的进程

    检查WEB应用程序

    使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

    docker inspect 容器ID/容器NAme

    image-20210106124007891

    停止WEB应用容器

    docker start 容器名称/容器ID

    重启WEB应用容器

    docker start 容器名称/容器ID

    docker ps -l查询最后一次创建的容器

    移除WEB应用容器

    docker rm -f 容器ID/容器名称: 不带-f 将只能删除停止运行的容器

    3. 镜像使用

    运行容器时,使用的镜像如果不在本地中存在,docker会自动从镜像仓库(docker hub)拉取

    列出镜像列表

    docker images

    image-20210106135301660

    各个选项说明:

    • REPOSITORY:表示镜像的仓库源
    • TAG:镜像的标签
    • IMAGE ID:镜像ID
    • CREATED:镜像创建时间
    • SIZE:镜像大小

    同一仓库源可以有多个TAG,表示不同仓库源的版本

    指定TAG(版本)docker run -t -i ubuntu:15.10 /bin/bash;如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。

    参数说明:

    • -i: 交互式操作。
    • -t: 终端。
    • ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。
    • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

    获取一个新的镜像

    docker pull 镜像名称:tag名称(可选)

    查找镜像

    docker search httpd

    image-20210106140309320

    NAME: 镜像仓库源的名称

    DESCRIPTION: 镜像的描述

    OFFICIAL: 是否 docker 官方发布

    stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。

    AUTOMATED: 自动构建。

    删除镜像

    docker rmi 镜像名称/镜像ID

    更新镜像

    创建镜像的第一种方式,需要使用镜像来创建一个容器

    • docker run -t -i ubuntu:15.10 /bin/bash
    • apt-get update 更改
    • docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2 将更改后的容器打成镜像

    各个参数说明:

    • -m: 提交的描述信息
    • -a: 指定镜像作者
    • e218edb10161:容器 ID
    • runoob/ubuntu:v2: 指定要创建的目标镜像名

    image-20210106141706965

    第二种方式:构建镜像''我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

    • 创建一个Dockfile

      # 指定使用那个镜像源,这里表示指定centos6.7版本
      FROM    centos:6.7
      MAINTAINER      Fisher "fisher@sudops.com"
      
      # RUN 在镜像内执行的命令
      RUN     /bin/echo 'root:123456' | chpasswd
      RUN     useradd runoob
      RUN     /bin/echo 'runoob:123456' | chpasswd
      RUN     /bin/echo -e "LANG="en_US.UTF-8"">/etc/default/local
      EXPOSE 22
      EXPOSE 80
      CMD /usr/sbin/sshd -D
      
    • 构建

      docker build -t runoob/centos:6.7

      • -t :指定要创建的目标镜像名
      • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

    设置镜像标签

    docker tag 容器ID 镜像源名:标签名

    4. Dockerfile

    Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明

    定制一个nginx镜像

    # 基于nginx的镜像
    FROM nginx
    # 执行命令
    RUN echo '本地构建的nginx镜像'> /usr/share/nginx/html/index.html
    

    image-20210106145228104

    2、FROM 和 RUN 指令的作用

    FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。

    RUN:用于执行后面跟着的命令行命令。有以下俩种格式:

    shell 格式:

    RUN <命令行命令>
    # <命令行命令> 等同于,在终端操作的 shell 命令。
    

    exec 格式:

    RUN ["可执行文件", "参数1", "参数2"]
    # 例如:
    # RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline
    

    注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:

    FROM centos
    RUN yum install wget
    RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
    RUN tar -xvf redis.tar.gz
    # 以上执行会创建 3 层镜像。可简化为以下格式:
    FROM centos
    RUN yum install wget 
      && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" 
      && tar -xvf redis.tar.gz
    

    开始构建镜像

    docker build -t nginx:v3 ., .表示执行当前目录下Dockerfile

    image-20210106145754257

    上下文路径

    上一节中,有提到指令最后一个 . 是上下文路径,那么什么是上下文路径呢?

    $ docker build -t nginx:v3 .

    上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。

    解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。

    如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。

    注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

    指令详解

    • COPY 从上下文目录中复制文件/目录到容器
    COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
    COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]
    
    COPY hom* /mydir/
    COPY hom?.txt /mydir/
    
    • CMD: 类似于RUN指令,用于运行程序

      • CMD 在docker run 时运行。
      • RUN 是在 docker build。

      作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。

      注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。

      格式:

      CMD <shell 命令> 
      CMD ["<可执行文件或命令>","<param1>","<param2>",...] 
      CMD ["<param1>","<param2>",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
      

    EXPOSE

    仅仅只是声明端口。

    作用:

    • 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
    • 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

    格式:

    EXPOSE <端口1> [<端口2>...]
    

    WORKDIR

    指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。

    docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。

    格式:

    WORKDIR <工作目录路径>
    

    https://www.runoob.com/docker/docker-dockerfile.html

  • 相关阅读:
    Equal Cut
    【线段树】Interval GCD
    zookeeper错误
    HBase之过滤器
    Hbase之缓存扫描加快读取速度
    Hbase之遍历超时处理
    Hbase之遍历获取数据
    Hbase之使用回调函数进行批处理操作
    Hbase之进行批处理操作
    Hbase之原子性更新数据
  • 原文地址:https://www.cnblogs.com/zy7y/p/14247918.html
Copyright © 2020-2023  润新知