zoukankan      html  css  js  c++  java
  • docker学习(一)

    https://www.cnblogs.com/lighten/p/6900556.html

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

    docker 运行:

    docker run -it --rm ubuntu:14.04 bash

    docker run是运行容器的命令;

    -it :这是两个参数。-i:交互式操作。-t:终端。我们这里打算进入bash执行一些命令并查看返回结果,因此我们需要交互式终端操作。

    --rm:这参数是说容器退出后随之将其删除。默认情况下,为了排除需求,退出的容器并不会立即删除,除非手动docker rm。我们这只是随意执行个命令,看看结果,因此--rm可以避免浪费空间。

    ubuntu:14.04:这里指用ubuntu:14.04镜像为基础来启动容器。

    bash:放在镜像后的是命令,这里我们希望有个交互式的Shell,因此用的是bash。

    最后通过exit命令退出容器。

    docker exec -it webserver bash //进入容器 bash终端,操作容器

     docker images列出已经下载下来的镜像。

    列表包含了仓库名,标签,镜像ID,创建时间,以及所占用的空间。

     docker images -f dangling=true //显示虚悬镜像

    一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,删除命令:docker rmi $(docker images -q -f dangling=true)

    -f:代表过滤,是--filter的缩写

    -q:列出镜像ID

    比如:希望看到mongo:3.2之后(前)建立的镜像,可以用命令:docker images -f since/brfore=3.2

    docker images --format "{{.ID}}:{{.Repository}}" 按照指定格式显示结果

    为了加速镜像构建,重复利用资源,Docker会利用中间层镜像。

     docker commit --author "mayunzhen@cmsr.chinamobile.com" --message "update the message index " webserver nginx:v2  //修改docker容器后,需要重新打包镜像。

     docker history nginx:v2 //查看最近修改的历史记录

    docker commit 命令会导致镜像臃肿。所以该命令一般只用于被入侵后保存现场等。但是,不要使用改命令制定镜像,定制行为应该使用Dockerfile来完成。

    Dockerfile定制镜像

    镜像的定制实际上就是定制每一层所添加的配置,文件。如果我们能把每一层修改,安装,构建,操作的命令都写入一个脚本,用这个脚本来构建,定制镜像,那么之前docker commit 无法解决的无法重复的问题,镜像构建透明性的问题、体积的问题就能得到解决。

    FROM scratch //空白镜像,虚拟的概念

     不以任何系统为基础,直接将可执行文件复制进镜像的做法,比如:swarm、coreos/etcd。

    RUN指令是定制镜像时常用命令,一共有两种使用方式:

    1.shell方式:RUN <命令>

    2.exec方式:RUN ["可执行文件", "参数1", "参数2"]

    使用Dockerfile创建镜像demo:

    Dockerfile文件内容:

    FROM nginx

    RUN echo '<h1>hello,Docker by myz!</h1>' > /usr/share/nginx/html/index.html

    1、运行该文件命令:docker build -t nginx:v3 .

     -t参数:最终镜像名称

    直接用GIt repo进行构建:

    docker build 还支持从URL构建,比如可以直接从Git repo中进行构建:

    2、docker build https://github.com/twang2218/gitlab-ce-zh.git#:8.14

    这行命令指定了构建所需的Git repo,并且默认指定为master分支,构建目录为/8.14/,然后Docker就会自己去Git clone 这个项目、切换到指定分支,并进入到指定目录后开始构建。

    3、docker build http://server/context.tar.gz

    4、从标准输入中读取Dockerfile进行构建:docker build  - <Dockerfile  或者:cat Dockerfile |docker build . 或者docker build - < context.tar.gz

    如果标准输入的格式是gzip、bzip2、xz的话,将会使其为上下文压缩包,直接展开,将里面是为上下文,并开始构建。

    COPY <源路径> <目标路径>

    ADD 只有在需要解压缩文件的时候 用到。

    CMD:用于指定默认的容器主进程的启动命令的。

    1、shell用法   CMD <命令>

    2、exec格式   CMD ["可执行文件", "参数1", "参数2"...]

    3、参数列表格式   CMD ["参数1" , "参数2",...]  在指定了ENTRYPOINT指令后,用CMD指定具体的参数。

    如果使用CMD的Shell格式话,实际的命令会被包装成sh -c 的参数形式进行执行。比如 CMD echo $HOME   在实际运行中,会被解析成: CMD ["sh","-c","echo $HOME"]

    容器中没有后台服务的概念。容器中的主进程退出,容器就失去了存在的意义,从而退出。

    ENTRYPOINT:和RUN指令格式一样;目的和CMD一样,都是在指定容器内部启动程序及参数,在运行时候也可以替代,不过比CMD稍显麻烦。通过docker run --entrypoint参数指定。

    1、exec:

    2、shell:

    ENV命令:ENV version 7.2

                   xxx-$version---xxx

     ARG:使用 docker build --build-arg  key=value

    VOLUME:定义匿名卷

    为了防止运行时用户忘记将动态文件保存目录挂载为卷,在Dockerfile中,我们可事先指定某些目录挂载为匿名卷,这样在运行的时候,如果用户不指定挂载,其应用也可以正常运行,不会向容器存储层写入大量数据。

    VOLUME /data

    这里的/data目录就会在运行时自动挂载为匿名卷,任何向/data目录中写入的信息都不会记录进容器存储层,从而保证了容器存储层的无状态变化。

    当前运行时,可以覆盖这个挂载目录:

    docker run -d -v mydata:/data xxx

    在这个命令中,采用mydata替换了Dockerfile中定义的匿名卷的挂载位置。

    EXPOSE声明端口

    在Dockerfile中写入这样的声明有两个好处:1.帮助镜像使用者理解这个镜像服务的守护端口,以便配置映射 2、在运行时,使用随机端口映射时,也就是docker run -P 时,会自动映射EXPOSE端口。

     

     WORKDIR:指定工作目录

    USER:指定当前用户。USER命令和WORKDIR类似,都是改变环境状态并且影响以后的层。WORKDIR是改变工作目录,USER则是改变之后运行层的执行RUN,CMD以及ENTRYPOINT这类命令的身份。

    HEALTHCHECK健康检查。

     检查健康状态  原因:docker inspect --format '{{json .State.Health}}' web| python -m json.tool

    OBUBUILD为他人做嫁衣

  • 相关阅读:
    vscode task 与 linux shell编程小记
    Python并行计算专题
    分类任务评价指标(Accuracy / Precision / Recall / F1 / ROC / AUC)
    JAVA笔记 10.04
    MySQL5.7忘记密码 Linux
    MYSQL 获取最近多少天时间列表
    Volatile 关键字的原理和实现
    安装正常APP时被小米提醒是诈骗APP不允许安装的问题
    【瞎口胡】网络流基础
    题解 Luogu P4774 [NOI2018]屠龙勇士
  • 原文地址:https://www.cnblogs.com/yunger/p/11753841.html
Copyright © 2011-2022 走看看