• 转载-docker相关基础2


    Docker

    1.    什么是Docker

    简单地讲,可以将Docker容器理解为一种轻量级的沙盒,每个容器内运行一个一个应用,不同的容器相互隔离,容器之间也可以通过网络互相通信,容器的创建和停止十分快速,几乎跟创建和终止原生应用一致;另外容器自身对系统资源的额外需求也十分有限,远远低于传统虚拟机。很多时候,甚至直接把容器当作应用本身也没有问题

    2、为什么使用Docker

    一旦需要服务器迁移,往往需要对每个应用都进行重新部署和调试,这些琐碎而无趣的体力活,极大的降低了工作效率。究其根源,是这些应用直接运行在底层操作系统上,无法保证同一份应用在不同的环境中行为的一致。

             而Docker提供了一种更为聪明的方式,通过容器来打包应用,解耦应用和运行平台。意味着迁移的时候,只需要在新的服务器上启动需要的容器就可以了,无论新旧服务器是否式同一类型的平台。这无疑将节约大量的宝贵事件,并且降低了部署过程出现的问题的风险。

    3.核心概念与安装配置:

    1.docker的镜像:

    Docker的镜像类似于虚拟机的镜像,可以将它理解为一个只读的模版。

    镜像是创建Docker容器的基础。

    2.Docker容器

    容器是从镜像创建的应用运行实例。

    3.Docker仓库。

    Docker仓库类似于代码仓库。它是Docker集中存放镜像文件的场所。

    仓库注册服务器是存放仓库的地方,其上往往存放着很多的仓库,每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签tag来进行区分

    4.Docker的镜像

    Docker运行容器前需要本地存在对应的镜像,如果镜像没有保存在本地中,Dokcer会常识先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库)

    1.     获取镜像

    docker pull name:[tag]

    docker pull ubuntu:14.04

    docker pull ubuntu

    2.     查看镜像信息

    docker images

    3、使用tag命令添加镜像标签

       docker tag ubuntu:latest  myubuntu:lastest

       docker images

    4.使用inspect 命令查询详细信息

    docker inspect ubuntu:14.04

    5.使用history命令查看镜像历史

    docker history ubuntu:14.04

    列出了ubuntu的各层创建信息

    6.搜索镜像

    docker search –automated –s 3 nginx

    7.删除镜像

    docker rmi ubuntu:latest

    当镜像创建容器存在时,镜像文件默认是无法被删除的

    docker rmi –f ubuntu:latest

    强行删除

    8.查看本机上所存在的容器

    docker ps -a

    9.创建镜像

    1.基于已有镜像的容器创建

    Docker run –it ubuntu:14.04 /bin/bash

    Touch test

    Exit

    Docker commit –m “addded new file ” –a “Docker newbe” a925cb40b3f0 test:01

    Docker commit

    2基于本地模版导入

    下载ubuntu-14.04的模版压缩包,之后使用一下命令导入

    Cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import – ubuntu:14.04

    10.存入镜像

    docker save  -o ubuntu_14.04.tar ubuntu:14.04

    导出本地镜像为文件ubuntu_14.04.tar

    11.载入镜像

             docker load –input ubuntu_14.04.tar

    或者docker load < ubuntu_14.04.tar

    12.上传镜像

    默认式上传到Docker hub仓库,

    用户在网站上注册后可以上传自制的镜像

    Docker push name:[tag]

    Docker tag test:latest user/test:lastest

    Docker push user/test:latest

    5.Docker容器

    1.创建容器

    1.新建容器

    Docker create –it ubuntu:latest

    Docker create命令创建的容器处于停止状态,可以使用docker start命令启动容器

    2、启动容器

    Docker start af  af-为容器ID最后两位

    3.创建并启动容器

    Docker run ubuntu /bin/echo ‘Hello world’

    Docker run –it ubuntu:14.04  /bin/bash

    Exit退出容器

    4后台运行

    -d参数来实现

    Docker run –d ubuntu /bin/sh –c “while true; do echo hello world; sleep 1; done”

    Ce5………………….

    Docker logs ce5

    查看输出信息

    2终止容器

    Docker stop ce5  来停止一个运行中的容器

    3.     进入容器

    对容器的操作

    Docker attach 容器名称

    Docker attach nostaligic_hypatia

    Docker exec 容器id

    Docker exec 203df30030

    4.删除容器

    Docker rm 容器id

    但容器必须处于停止状态

    必须由docker stop停止容器

    如果删除正在运行的容器会报错

    5.导出容器

    某些时候将容器从一个系统迁移到另一个系统,可以使用Docker的导入和导出功能

    Docker export –o test_for_run.tar ce5

    Docker export e81 > test_for_stop.tar

    -o 表示指定导出的tar文件名

    6.导入容器

       Docker import test_for_run.tar – test/ubuntu:v1.0

    6.Docker仓库

    1.Docker Hub公共镜像市场

    2.时速云镜像市场

    https://hub.tenxcloud.com/

    3.下载镜像

    index.tenxcloud.com/namespace/repository

    docker pull index.tenxcloud.com/tenxcloud/tomcat

    搭建本地私有仓库

    Docker run –d –p 5000:5000 registry

    默认情况下官方提供的registry镜像

    会将仓库创建在容器的/tmp/registry目录下

    可以通过-v  参数将镜像文件存在本地的指定路径

    Docker run –d –p 5000:5000  -v /opt/data/registry:/tmp/registry registry

     7.Docker数据管理

    生产环境中使用Docker的过程中,往往需要对数据进行持久化,或者需要多个容器之间进行数据共享,这必然涉及容器的数据管理操作

    容器中管理数据主要的两种方式:

    数据卷:容器内数据直接映射到本地主机观景

    数据卷容器:使用特定容器维护数据卷

    1.数据卷:

    1、在容器内创建一个数据卷

    Docker run –d –P –name web –v /webapp training/webapp python app.py

    -v标记创建数据卷

    创建一个数据卷挂载到容器/webapp目录

    2、挂载一个主机目录作为数据卷

    Docker run –d –P –name web –v /src/webapp:/opt/webapp training/webapp python app.py

    主机的/src/webapp目录到容器的/opt/webapp下

    2.数据卷容器(专门提供数据卷供其他容器挂载)

    1.创建数据卷容器

    Docker run –it –v /dbdata –name dbdata ubuntu

    2.进入容器

    Docker attach dbdata

    列表

    Ls

    通过—volumes-from挂载dbdata容器的数据卷

    Docker run –it –volumes-from dbdata –name db1 ubuntu

    修改dbdata的数据

    Cd /dbdata

       Touch test

       Ls

       Exit

    进入db1 查看文件

    Docker attach db1

             Ls dbdata

    3.利用数据卷容器来迁移数据

    1.备份

    1.备份

    使用下面的命令来备份dbdata数据卷容器内的数据卷:

    $ docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata

    首先利用ubuntu镜像创建了一个容器worker。使用--volumes-from dbdata参数来让worker容器挂载dbdata容器的数据卷(即dbdata数据卷),使用-v  $(pwd):/backup参数来挂载本地的当前目录到worker容器的/backup目录。worker容器启动后,使用了tar cvf  /backup/backup.tar /dbdata命令来将/dbdata下内容备份为容器内的/backup/backup.tar,即宿主主机当前目录下的backup.tar。

    2.恢复

    如果要将数据恢复到一个容器,可以按照下面的步骤操作。

    首先创建一个带有数据卷的容器dbdata2:

    $ docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

    然后创建另一个新的容器,挂载dbdata2的容器,并使用untar解压备份文件到所挂载的容器卷中:

    $ docker run --volumes-from dbdata2 -v $(pwd):/backup --name worker ubuntu bash

    cd /dbdata

    tar xvf /backup/backup.tar

    8、端口映射与容器关联

    1.端口映射实现外部访问

    1.从外部访问容器应用

    在容器启动的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的

    docker run –d –P training/webapp python app.py

       通过-P指定端口映射

       Docker会随机映射一个49000~49900的端口到内部容器开放的网络端口

      docker ps –l

      

    访问主机随机映射端口即可访问容器内部也能够用提供的界面

    2.     映射所有接口地址

    Docker run –d –P 5000:5000 training/webapp python app.py

       绑定多个接口-p

       docker run –d –p 5000:5000 –p 3000:80 training./webapp python app.py

    3.映射到指定地址的指定端口

    docker run –d –p 127.0.0.1:5000:5000 training/webapp python app.py

    4.映射到指定地址的任意端口

    docker run –d –p 127.0.0.1::5000  training/webapp python app.py

    使用udp标记来指定udp端口

    docker run –d –p 127.0.0.1:5000:5000/udp  training/webapp python app.py

    5.查看映射端口配置

    docker port nostalgic_morse 5000

    2.互联网机制实现便捷互访

    1.自定义容器命名

       docker run –d –P –name web training/webapp python app.py

    2容器互联

    使用link参数可以让容器之间安全地进行交互

    创建容器

    docker run –d –name db training/postgres

    删除之前的web

    docker rm –f web

     创建一个新的web容器,并将容器建立互联关系:

    docker run –d –P –name web –link db:db training/webapp python app.py

    --link 格式 –link name:alias

    Name连接容器的名字

    Aliad别名

    docker ps查看那容器连接

    db容器的names列有db也有web/db

    表示web容器连接到db容器,这允许web容器访问db容器的信息

    Docker相当于两个互联的容器之间创建了一个虚拟通道,而且不用映射她们呢的端口到宿主主机上

    Docker通过两种方式为容器公开信息

    使用env命令来查看web容器的环境变量:

    docker run –rm –name web2 –link db:db training/webapp env

    Docker还添加host信息到父容器的/etc/hosts文件下面是父容器web的hosts文件

    Docker run –t –i –rm –link db:db training/webapp /bin/bash

    Cat /etc/hosts

    9.使用Dockerfile创建镜像

    1.     基本结构

    Dockerfile由一行行命令语句组成,并且支持#开头注释行

    一般而言,Dockerfile分为四个部门:基础镜像部分,维护者信息,镜像操作指令和容器启动时执行指令。

    Node.js dockerfile

    FROM ubuntu:trusty-20160819

    MAINTAINER sameer@damagehead.com

     

    RUN echo 'APT::Install-Recommends 0;' >> /etc/apt/apt.conf.d/01norecommends

     && echo 'APT::Install-Suggests 0;' >> /etc/apt/apt.conf.d/01norecommends

     && apt-get update

     && DEBIAN_FRONTEND=noninteractive apt-get install -y vim.tiny wget sudo net-tools ca-certificates unzip

     && rm -rf /var/lib/apt/lists/*

     

    RUN 

      cd /opt &&

      wget http://nodejs.org/dist/v6.5.0/node-v6.5.0-linux-x64.tar.gz &&

      tar -xzf node-v6.5.0-linux-x64.tar.gz &&

      mv node-v6.5.0-linux-x64 node &&

      cd /usr/local/bin &&

      ln -s /opt/node/bin/* . &&

      DEBIAN_FRONTEND=noninteractive npm install -g nodemon --no-optional &&

      sudo ln -s /opt/node/lib/node_modules/nodemon/bin/nodemon.js /usr/bin/nodemon &&

      rm -f /opt/node-v6.5.0-linux-x64.tar.gz

     

    WORKDIR   /src

     

    CMD ["/bin/bash"]

    2.     指令说明:

    From:

    指定所创建镜像的基础镜像,如果本地不存在,则默认回去Docker Hub下载指定镜像

    格式 form <image>

         Form <image>:<tag>

         Form<image>@<digest>

    Maintainer

    指定维护者信息,格式为maintainer <name>

    MAINTAINER image_creator@docker.com

    Run

    运行指定命令

    格式:

    Run <command>或者Run<”executable”,”param1”,”param2”>

    每条Run指令将在当前镜像的基础上执行命令,并提交为新镜像。当命令较长的时,可以使用换行

    Run apt-get update

        && apt-get install –y libsnappy-dev zlib1g-dev libbz2-dev

        && rm –rf /var/cache/apt

    CMD:

    CMD指令用来指定启动容器时默认执行命令

    CMD[“executable”,”param1”,”param2”]使用exec执行

    LABEL:

    用来指定生成镜像的元数据标签信息

    LAEBL VERSION=”1.0”

    EXPOSE:

    声明镜像内服务所监听的端口

    格式:

    Expose <port>[port….]

    Expose 22 80 8443

    该指令只是起声明作用,并不会自动完成端口映射

    ENV

    指定环境变量,在镜像生成过程中会被后续Run指令使用,在镜像启动的容器中也会存在

    格式ENV<key><value>或ENV<key>=<value>

    ENV PG_MAJOR 9.3

    ENV PG_VERSION 9.3.4

    RUN curl –SL http://example.com/postgres-$PG_VERSION.tar.xz | tar –xJC /usr/src/postgress && …..

    ENV PATH  /usr/local/postgres-$PG_MAJOR/bin:$PATH

    ADD:

    该命令将复制指定的<src>路径下的内容到容器中<dest>路径下

    格式:

    ADD<src><dest>

    其中src可以式Dockerfile所在目录的一个相对路径,也可以是一个URL,还可以是一个tar文件

    Copy

    格式copy<src><dest>

    ENTRYPOINT

    指定镜像的默认入口命令,该入口命令会在启动容器的时候作为根命令执行,所有传入值作为命令的参数

    每个Dockerfile只有一个ENTRYPOINT

    ENTRYPOINT [“executable”,”param1”,”param2”]

    ENTRYPOINT comand param1 param2

    VOLUME:

    创建一个数据挂载点 VOLUME[“/data”]

    USER:

    指定运行容器时用户名和UID,后续RUN等命令也会使用指定用户身份

    USER daemon

    WORKDIR

    为后续RUN,CMD和ENTRYPOINT指令配置工作目录

    格式

    WORKDIR /path/to/workdir

    ARG:

    指定一些镜像内使用的参数,这些参数在执行docker build命令时才—build-arg<name>=<value>格式传入

    Docker build –-build-arg<name>=<value>

    .

    ONBUILD

    配置当所创建的镜像作为为其他镜像的基础镜像时,所需要执行的创建操作指令

    ..

    ONBUILD ADD. /APP/SRC

    ONBUILD RUN /usr/local/bin/python-build –dir /app/src

    等价于

    FROM image-A

    ADD ./APP/SRC

    RUN /usr/local/bin/python-build –dir /app/src

    STOPSIGNAL

    指定所创建镜像启动的容器接受退出的信号值。

    STOPSIGNAL signal

    HEALTHCHECK

    配置所启动容器如何进行健康检查

    HEALTHCHECK  [options] CMD command:根据所执行命令返回值是否为0来判断

    HEALTHCHECK NONE;禁止基础镜像中的健康检查

    SHELL

    指定其他命令使用shell时的默认shell类型

    SHELL[“executable”,”parameters”]

    3.创建镜像:

    编写完成后Dockerfile之后,可以通过docker build命令来创建镜像

    例如:

    指定dockerfile所在路径为/tmp/docker_builder/ ,并且希望生成镜像标签为build_repo/first_image可以使用下面的命令

    Docker build –t build_repo/first_image /tmp/docker_builder

    4.使用.dockerignore文件

    可以通过.dockerignore文件(每一行添加一条一条匹配模式)来让Docker忽略匹配模式路径下的目录和文件,例如:

    #comment

      */temp*

      */*/temp*

       Tmp?

    ~*

    转载:

    https://www.cnblogs.com/sharpest/p/8315791.html

  • 相关阅读:
    sql server 中将由逗号“,”分割的一个字符串,转换为一个表,并应用于 in 条件,方法和调用
    JavaScript Invalid Date Verify
    Jquery总结
    java中的异常和处理
    联系 管理 Hibernate4+Spring JPA+SpringMVC+Volecity搭建web应用(三)
    Hibernate4+Spring JPA+SpringMVC+Volecity搭建web应用(二)
    Hibernate4+Spring JPA+SpringMVC+Volecity搭建web应用(一)
    Spring 框架整理
    java 三大框架 介绍
    struts2 拦截器的注册在strut.xml中
  • 原文地址:https://www.cnblogs.com/xiaoyou2018/p/10919017.html
Copyright © 2020-2023  润新知