zoukankan      html  css  js  c++  java
  • Docker 初识

    参考:

    https://www.cnblogs.com/SzeCheng/p/6822905.html

    https://blog.csdn.net/yugongpeng_blog/article/details/43022769

    https://blog.csdn.net/taiyangdao/article/details/71718805

    Docker简介

    Docker是一个能够把开发的应用程序自动部署到容器的开源引擎。使用Docker,开发人员只需关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生成环境的一致性。

    由于客居于操作系统,容器只能运行在与顶层宿主机相同或相似的操作系统。yu

    简单说就是,开发环境打包成镜像,可以搬移到任何支持Docker的环境,然后运行。

    图来源:https://www.cnblogs.com/SzeCheng/p/6822905.html

    Docker组件

    核心组件:

    Docker客户端和服务器(Docker引擎)、Docker镜像、RegistryDocker容器。

    Docker的技术组件:

    一个原生的Linux容器格式(libcontainer);

    Linuxnamespace,用于隔离文件系统、进程和网络;

    资源隔离和分组:使用cgroupsCPU和内存之类的资源独立分配给每个Docker容器;

    写时复制

    日志

    交互式shelll

    一个Dockerfile

    FROM alpine_bash:latest

    MAINTAINER sp

    RUN echo hello

    CMD echo world

    为什么加载一个OS基础镜像?https://blog.csdn.net/yugongpeng_blog/article/details/43022769

    Container内需不需要OS

    Container不是一个VM技术,所以和OS没有关系。如果我没有理解错,这个Container应该指的是Docker Run出的运行环境,因为在里面我们可以运行一些命令,让使用者以为它就是一个完整的OS环境。这是不对的。其实Docker只是一个进程。当你使用docker exec登录进去的也只是一个Terminal的模拟环境。它不是真实的OS。正因为它不是OS,所以它是直接调用主机的Kernel的。而Container本身只是一个系统进程。

    为何需要OS的基础镜像?

    首先,OS的问题上面已经解释过了,它不是一个OS,但为何需要OS的基础镜像?其实这里的基础镜像是一个包含rootfs的镜像。Kernel启动后是需要把启动文件解压到rootfs上的,然后kernel找到init文件启动就可以得到一个Linux环境了,Docker做的事情就是模拟这个过程,让kernel给出一个独立的隔离环境。

    docker build 构建镜像

    sudo docker build -t qt:v1 /home/sp/dockertest/

    查看

    sudo docker images qt

    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

    qt                  v1                  aaec4961ec31        2 minutes ago       19.83 MB

    查看镜像如何构建出来的

    sudo docker history qt:v1

    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT

    aaec4961ec31        11 minutes ago      /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo    0 B

    1f10b0c38e9a        11 minutes ago      /bin/sh -c echo hello                           0 B

    b00f1a7fc4a7        11 minutes ago      /bin/sh -c #(nop)  MAINTAINER sp        0 B

    91370d5da095        3 months ago        bash                                            182 B

    090950687196        3 months ago        bash                                            267 B

    62fc0977df76        3 months ago        sh                                              9.032 MB

    a0f29218fb23        3 months ago        sh                                              42.86 kB

    c3447930f3bc        3 months ago        sh                                              6.606 MB

    <missing>           3 months ago                                                        4.144 MB            Imported from -

    docker save 保存镜像

    sudo docker save -o /home/sp/dockertest/qt_pack.tar qt:v1

    docker load 载入镜像

    docker load --input xxx.tar

    docker load < xxx.tar

    docker rmi 删除镜像

    sudo docker rmi qt

    docker run 运行容器

    sudo docker run -i -t --name=qttest  qt:v1

    docker exec 在容器内部运行进程

    docker top 查看容器内的进程

    docker stats 查看容器统计信息

    Docker 命令&参数

    build构建命令参数

    转自:https://blog.csdn.net/taiyangdao/article/details/71718805

    docker build命令用于根据给定的Dockerfile和上下文以构建Docker镜像。

    docker build命令的使用格式:
    docker build [OPTIONS] <PATH | URL | ->
    1. 常用选项说明
    --build-arg,设置构建时的变量
    --no-cache,默认false。设置该选项,将不使用Build Cache构建镜像
    --pull,默认false。设置该选项,总是尝试pull镜像的最新版本
    --compress,默认false。设置该选项,将使用gzip压缩构建的上下文
    --disable-content-trust,默认true。设置该选项,将对镜像进行验证
    --file, -fDockerfile的完整路径,默认值为‘PATH/Dockerfile’
    --isolation,默认--isolation="default",即Linux命名空间;其他还有processhyperv
    --label,为生成的镜像设置metadata
    --squash,默认false。设置该选项,将新构建出的多个层压缩为一个新层,但是将无法在多个镜像之间共享新层;设置该选项,实际上是创建了新image,同时保留原有image
    --tag, -t,镜像的名字及tag,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个tag
    --network,默认default。设置该选项,Set the networking mode for the RUN instructions during build
    --quiet, -q ,默认false。设置该选项,Suppress the build output and print image ID on success
    --force-rm,默认false。设置该选项,总是删除掉中间环节的容器
    --rm,默认--rm=true,即整个构建过程成功后删除中间环节的容器

    2. PATH | URL | -说明:
    给出命令执行的上下文。
    上下文可以是构建执行所在的本地路径,也可以是远程URL,如Git库、tarball或文本文件等。
    如果是Git库,如https://github.com/docker/rootfs.git#container:docker,则隐含先执行git clone --depth 1 --recursive,到本地临时目录;然后再将该临时目录发送给构建进程。
    构建镜像的进程中,可以通过ADD命令将上下文中的任何文件(注意文件必须在上下文中)加入到镜像中。
    - 表示通过STDIN给出Dockerfile或上下文。
    示例:

    docker build - < Dockerfile

    说明:该构建过程只有Dockerfile,没有上下文

    docker build - < context.tar.gz

    说明:其中Dockerfile位于context.tar.gz的根路径

    docker build -t champagne/bbauto:latest -t champagne/bbauto:v2.1 .

    docker build -f dockerfiles/Dockerfile.debug -t myapp_debug .

    通过脚本整合镜像制作流程

    buildDockerImage.sh

    #!/bin/sh

    set -x # exit when error occurred

    basedir=$(cd `dirname $0`; pwd)

    TOP_PATH=$(cd $basedir; pwd)

    PROCRST_PATH=$TOP_PATH  //proc_result

    cd $basedir && {

        

        if [ !  -d $PROCRST_PATH ]

        then

            mkdir -p  $PROCRST_PATH

        fi    

        if [ -e $PROCRST_PATH/process_succ ]

        then

            rm -f $PROCRST_PATH/process_succ

        fi

        uid=$(id -u)

        #中间加工流程

        if docker run -u $uid -v $TOP_PATH:/app/dev pyinstaller:latest bash -c "pyinstaller -F /app/dev/test.py --distpath=/app/dev/"

        then

            touch $PROCRST_PATH/process_succ

        else

            exit 1

        fi

        

        set -e

        docker build -t test $basedir

        [ -d $TOP_PATH/Release ] || mkdir -p $TOP_PATH/Release

        docker save -o $TOP_PATH/Release/TEST.tar test:latest

        docker rmi test

    }

    exit 0

    镜像瘦身

    1. 基础镜像用小镜像alpine替换ubuntu基础镜像;
    2. 镜像中需要什么工具就安装什么工具;
    3. python可以打包成可执行程序,以代替镜像中安装完整的python环境;
    4. 如果每个镜像中需要数据库,考虑将数据库做成公共服务;
  • 相关阅读:
    老罗的OLLYMACHINE
    VGA寄存器一览表
    常用的I/O地址
    使用VESA示例
    打开A20
    Linux 2.2 Framebuffer Device Programming Tutorial
    Linux驱动
    基于Linux核心的汉字显示的尝试
    汉字的动态编码与显示方案
    AT&T语法(一)
  • 原文地址:https://www.cnblogs.com/sunnypoem/p/9774569.html
Copyright © 2011-2022 走看看