暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

docker的命令行解析和Dockerfile【收藏版】

DevOps亮哥 2020-06-28
197

一、介绍

如今有越来越多的应用运行在容器里,我们可以将应用程序部署包以及程序运行所需要的任何东西都打包到容器镜像里。在这个容器里可以包含一个基本操作系统,依赖库,文件和目录,环境变量,挂载点以及应用程序二进制包。


容器镜像是一个容器运行的模板。通过一个相同的镜像启动多个容器实例,这些容器实例共享相同的行为,比如扩缩容,应用的分布。这些镜像存储在远程的镜像仓库里进行统一管理和统一分发。


一旦这个容器被启动,容器的执行过程以及容器的生命周期通过容器运行时本身管理。可以通过docker这个命令进行交互。


二、架构图

在整个容器架构里包含三个主要的组件:Client,Runtime和Registry.

三、docker命令行

1、与容器相关的命令

    docker [CMD] [OPTS] [CONTAINER]

    以下是一些常见的例子

    以交互模式启动容器

      #在容器内部运行bash
      [root@localhost ~]# docker run -it richxsl/rhel7 bash
      #进入到容器里查看操作系统
      [root@ea569e9732e1 ]# cat etc/redhat-release
      Red Hat Enterprise Linux Server release 7.0 (Maipo)
      [root@ea569e9732e1 ]#

      以后台进程模式运行

        docker run --name mywildfly -d -p 8080:8080 jboss/wildfly

        使用新创建的网络,以后台进程模式运行容器

          $ docker network create mynetwork 
          $ docker run --name mywildfly-net -d --net mynetwork \
          -p 8080:8080 jboss/wildfly

          挂载本地文件目录到容器内部的目录,以后台进程模式运行容器

            $ docker run --name mywildfly-volume -d \
            -v myfolder/:/opt/jboss/wildfly/standalone/deployments/ \
            -p 8080:8080 jboss/wildflyjboss/wildfly

            查看一个容器的log

              $ docker logs -f mywildfly
              $ docker logs -f [container-name|container-id]

              查看容器列表

                #查看运行中的docker容器
                $ docker ps
                #查看所有容器
                $ docker ps -a

                停止容器

                  $ docker stop [container-name|container-id]
                  #停止一个容器,超时1秒
                  $ docker stop -t1

                  移除一个容器

                    # 移除一个已经停止的容器
                    $ docker rm [container-name|container-id]
                    # 强制停止和删除一个容器
                    $ docker rm -f [container-name|container-id]
                    # 移除所有的容器
                    $ docker rm -f $(docker ps-aq)
                    # 移除所有停止的容器
                    $ docker rm $(docker ps -q -f “status=exited”)

                    在容器里执行一个进程

                      # 在容器里执行bash命令 
                      $ docker exec -it mywildfly bash

                      命令

                      描述

                      daemon

                      运行一个后台进程

                      attach

                      附加到正在运行的容器上,以查看其内部的输出

                      commit

                      将现有的容器创建一个新镜像

                      cp

                      从容器和本地文件系统之间拷贝文件或目录

                      create

                      创建一个新的容器

                      diff

                      查看容器文件系统之间的差异

                      exec

                      在一个运行中的容器中执行一个命令

                      export

                      导出容器文件系统的内容为tar文件

                      kill

                      使用SIGKILL或特定的信号杀掉正在运行的容器

                      logs

                      查看容器的日志

                      pause

                      停止容器内的所有进程

                      port

                      列出端口映射

                      ps

                      列出容器

                      rename

                      重命名一个容器

                      restart

                      重新启动一个容器

                      rm

                      移除一个或多个容器

                      run

                      在一个新的容器里运行一个命令

                      start

                      启动一个或多个容器

                      stats

                      显示一个或多个容器资源使用情况

                      stop

                      通过发送SIGTERM 然后 SIGKILL 的方式停止容器

                      top

                      显示容器里正在运行的进程

                      unpause

                      取消暂停容器里的所有进程

                      update

                      更新一个或多个容器里的配置

                      wait

                      等待容器停止,然后打印退出码

                      2、与镜像相关的命令

                        docker [CMD] [OPTS] [IMAGE]

                        使用Dockerfile构建一个镜像

                          #构建一个镜像
                          docker build -t [username/]<image-name>[:tag] <dockerfile-path>
                          #使用相同目录下的dockerfile创建一个镜像
                          $ docker build -t myimage:latest .

                          检查一个镜像的历史

                            # 检查jboss/wildfly镜像的历史
                            $ docker history jboss/wildfly


                            # 检查一个镜像的历史
                            $ docker history [username/]<image-name>[:tag]

                            显示镜像

                              $ docker images

                              移除本地的镜像

                                $ docker rmi [username/]<image-name>[:tag]

                                为一个镜像打Tag

                                  # 使用jboss/wildfly:latest镜像创建一个标签为v1,名称为myimage的镜像
                                  $ docker tag jboss/wildfly myimage:v1
                                  # 创建一个标签为latest的新镜像
                                  $ docker tag <image-name> <new-image-name>
                                  # 使用新标签为现有镜像打标签
                                  $ docker tag <image-name>[:tag][username/]<new-image-name> .[:new-tag]

                                  从一个镜像导出一个文件或从一个文件导入镜像

                                    # 导出镜像为一个tar文件
                                    $ docker save -o <filename>.tar
                                    # 从一个tar文件导入为镜像
                                    $ docker load -i <filename>.tar

                                    将一个镜像推送到镜像仓库

                                      $ docker push [registry/][username/]<image-name>[:tag]

                                      命令

                                      描述

                                      build

                                      从Dockerfile构建一个镜像

                                      history

                                      显示一个镜像的历史

                                      images

                                      显示镜像

                                      import

                                      从一个tar文件导入一个镜像

                                      info

                                      显示系统级的信息

                                      inspect

                                      显示一个容器或镜像的底层信息

                                      load

                                      从一个tar文件或标准输入加载一个镜像

                                      pull

                                      从镜像仓库拉取一个镜像或仓库

                                      push

                                      将镜像或仓库推送到镜像仓库

                                      rmi

                                      移除一个或多个镜像

                                      save

                                      保存一个或多个镜像到一个tar文件

                                      search

                                      从已配置的镜像仓库中查找镜像

                                      tag

                                      为一个镜像或仓库打标签

                                      3、网络相关的命令

                                        docker network [CMD] [OPTS]

                                        命令

                                        描述

                                        connect

                                        连接一个容器到网络

                                        create

                                        创建一个新的网络

                                        disconnect

                                        从网络中断开一个容器

                                        inspect

                                        显示网络的详细信息

                                        ls

                                        显示所有的网络

                                        rm

                                        删除一个或多个网络

                                        4、镜像仓库相关的命令

                                        Default is https://index.docker.io/v1/

                                        命令

                                        描述

                                        login

                                        登录到镜像仓库服务器

                                        logout

                                        从镜像仓库服务器退出

                                        5、挂载卷相关的命令

                                          docker volume [CMD] [OPTS]

                                          命令

                                          描述

                                          create

                                          创建一个卷

                                          inspect

                                          查看一个卷的底层信息

                                          ls

                                          显示挂载卷

                                          rm

                                          移除一个挂载卷

                                          6、其他的命令

                                          命令

                                          描述

                                          events

                                          从服务器获取实时事件

                                          inspect

                                          显示版本信息

                                          docker version

                                          显示docker CLI版本

                                          四、dockerfile

                                          Dockerfile提供了构建容器镜像的指令,可以通过

                                            `docker build -t [username/]<image-name>[:tag] <dockerfile-path> `

                                            命令。一个dockerfile从一个基础镜像开始,然后后面是一些其他Dockerfile指令。这个过程与从源码编译成二进制文件一样,只不过dockerfile的输出是一个容器镜像。



                                            Dockerfile样例

                                            这个例子通过一个自定义的管理账户创建一个WildFly容器,暴露了9990的管理端口,并通过'bmanagement'参数设置为公开的。

                                              # 使用已经存在的wildfly镜像 
                                              FROM jboss/wildfly


                                              # 添加一个管理员账号
                                              RUN opt/jboss/wildfly/bin/add-user.sh admin Admin#70365 --silent


                                              #暴露管理端口
                                              EXPOSE 8080 9990


                                              #绑定WildFly管理端口到所有IP地址
                                              CMD [“/opt/jboss/wildfly/bin/standalong.sh”, “-b”, “0.0.0.0”, “-bmanagement”, “0.0.0.0”]

                                              通过如下命令使用该Dockerfile

                                                # 通过该Dockerfile构建镜像
                                                $ docker build -t mywildfly .


                                                #运行WildFly server
                                                $ docker run -it -p 8080:8080 -p 9990:9990 mywildfly


                                                #访问管理控制台,并使用admin/Admin#70635登录
                                                open http://<docker-daemon-ip>:9990 in a browser

                                                Dockerfile指令列表:

                                                命令

                                                描述

                                                FROM

                                                设置要使用的基本镜像

                                                MAINTAINER

                                                设置创建该镜像的作者

                                                RUN

                                                在当前镜像之上创建一个新层来执行命令

                                                CMD

                                                最后容器执行的命令,只允许有一次,如果有多次以最后为准。

                                                LABEL

                                                为镜像添加元数据

                                                EXPOSE

                                                暴露特定的网络端口

                                                ENV

                                                设置环境变量

                                                ADD

                                                将本地文件系统中的文件、目录,以及远程的URL文件添加到镜像里

                                                COPY

                                                拷贝文件、目录到镜像里

                                                ENTRYPOINT

                                                配置一个可执行的容器,容器启动后执行的命令

                                                VOLUME

                                                从本地主机或其他容器中创建一个挂载点

                                                USER

                                                设置运行该镜像的用户或UID

                                                WORKDIR

                                                为RUN, CMD, ENTRYPOINT, COPY,和 ADD 命令设置工作目录

                                                ARG

                                                为构建镜像时定义变量,使用--build-arg参数

                                                ONBUILD

                                                添加一个稍后执行的指令,当该镜像作为一个基础镜像时

                                                STOPSIGNAL

                                                设置发送给容器的退出信号


                                                文章转载自DevOps亮哥,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                评论