zoukankan      html  css  js  c++  java
  • Docker基础学习总结

    一、docker架构

      Docker 包括三个基本概念:

    • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
    • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
    • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

      Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

      Docker 容器通过 Docker 镜像来创建。

      容器与镜像的关系类似于面向对象编程中的对象与类。

    二、docker镜像

      当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。下面我们来学习:

    • 1、管理和使用本地 Docker 主机镜像
    • 2、创建镜像

    1、列出镜像列表:docker images

    2、查找镜像:docker search 镜像名

    3、下载镜像:docker pull 镜像名

    4、删除镜像:docker rmi hello-world(镜像删除使用 docker rmi 命令,比如我们删除 hello-world 镜像)

    5、创建镜像

      当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

    • 1、从已经创建的容器中更新镜像,并且提交这个镜像
    • 2、使用 Dockerfile 指令来创建一个新的镜像

    (1)更新镜像之前,我们需要使用镜像来创建一个容器:

    runoob@runoob:~$ docker run -t -i ubuntu:15.10 /bin/bash
    root@e218edb10161:/# 

      在运行的容器内使用 apt-get update 命令进行更新。

      在完成操作之后,输入 exit 命令来退出这个容器。

      此时 ID 为 e218edb10161 的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本。

    runoob@runoob:~$ docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
    sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8

      各个参数说明:

    • -m: 提交的描述信息

    • -a: 指定镜像作者

    • e218edb10161:容器 ID

    • runoob/ubuntu:v2: 指定要创建的目标镜像名

      使用我们的新镜像 runoob/ubuntu:v2 来启动一个容器

    runoob@runoob:~$ docker run -t -i runoob/ubuntu:v2 /bin/bash                            
    root@1a9fbdeb5da3:/#

    (2)构建镜像

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

    (3)设置镜像标签

      docker tag 860c279d2fec runoob/centos:dev

      docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。

      可以看到多了 dev 的tag名

    6、运行nginx,后台运行,把本地端口号8080映射到docker的80端口

    -p:映射端口
    -d:后台运行并打印容器id
    docker run -d -p 8080:80 nginx

    7、建一个cpu优先级为100,内存限制512MB,主机名为test1,名为docker_test 后台运行的bash的容器

    -t:分配一个伪终端
    -i:以交互式模式运行容器,通常与-t同时运行,可以直接写成-it
    -c:限制cpu优先级
    -m:限制内存大小
    -h:设置主机名称
    
    docker run -t -i -c 100 -m 512MB -h test1 -d --name="docker_test" ubuntu /bin/bash

    三、容器使用

    1、列出容器

    docker ps #查看正在运行的容器
    docker ps -a #查看所有容器

     2、启动容器

    (1)以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:docker run -it ubuntu /bin/bash

      参数说明:

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

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

      注意:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec。

      在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

    // 方式1:如果从这个容器退出,不会导致容器的停止,这就是为什么推荐大家使用 docker exec 的原因。
    docker exec -it 243c32535da7 /bin/bash
    
    // 方式2: 如果从这个容器退出,会导致容器的停止,所以不推荐
    docker attach 1e560fca3906 

    (2)使用 docker start 启动一个已停止的容器:docker start b750bbbcfd88

    (3)停止容器:docker stop <容器 ID>

    (4)重启:docker restart <容器 ID>

    (5)暂停:docker pause container_id

    (6)继续:docker unpause container_id

    3、删除容器

      删除容器使用 docker rm 命令:docker rm -f 1e560fca3906

    // 拷贝文件到容器中(在本地执行,而不是在容器中执行,容器中没有docker)
    docker cp 本地路径 容器names:/路径
    
    // 容器中文件拷贝到本地
    docker cp 容器names:/路径 本地路径

    四、容器连接

      容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。

      两种方式的区别是:

    • -P :是容器内部端口随机映射到主机的高端口。
    • -p : 是容器内部端口绑定到指定的主机端口。
    docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
    // 这样我们就可以通过访问 127.0.0.1:5001 来访问容器的 5000 端口
    docker port adoring_stonebraker 5000
    // 查看容器5000端口绑定情况

    五、dockerfile文件

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

      上下文路径:下面指令最后一个 . 是上下文路径,那么什么是上下文路径呢?

    docker build -t nginx:test .

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

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

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

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

  • 相关阅读:
    Linux常用命令之 查找命令 find —— 细说 -atime,-mtime,-ctime
    centos设置静态ip
    Linux中vim的基本操作
    Linux中/和~的区别
    Linux安装vmtools工具
    关于 [lambda x: x*i for i in range(4)] 理解
    Ubuntu虚拟环境的搭建
    tomcat的中的Apache的apr是个啥东东???
    什么是web资源????
    Handlebars学习第一天
  • 原文地址:https://www.cnblogs.com/goloving/p/13516953.html
Copyright © 2011-2022 走看看