画梦 發表於 2020-1-22 00:18:00

Docker使用教程

<h1 id="docker常用命令">Docker常用命令</h1>
<h2 id="0x01-帮助命令">0x01 帮助命令</h2>
<pre><code class="language-bash">docker version

docker info

docker --help
</code></pre>
<h2 id="0x02-镜像命令">0x02 镜像命令</h2>
<h3 id="docker-images">Docker images</h3>
<p>列出本地主机上的镜像名</p>
<p><img src="https://img2018.cnblogs.com/blog/1449167/202001/1449167-20200121235055861-1818887243.png" alt="" loading="lazy"></p>
<p><img src="https://img2018.cnblogs.com/blog/1449167/202001/1449167-20200121235224511-1910554205.png" alt="" loading="lazy"></p>
<h3 id="docker-search-镜像名">Docker search 镜像名</h3>
<p>从dockerhub上搜索镜像</p>
<h3 id="docker-pull-镜像名">docker pull 镜像名</h3>
<p>下载镜像</p>
<h3 id="docker-rmi-镜像名id">docker rmi 镜像名ID</h3>
<p>删除镜像</p>
<h2 id="0x03-容器命令">0x03 容器命令</h2>
<p>前提:有镜像才能创建容器</p>
<h3 id="新建并启动容器">新建并启动容器</h3>
<pre><code class="language-bash">docker run IMAGE 参数
</code></pre>
<p>说明:</p>
<p>​        --name=“容器名”:为容器指定一个名称;</p>
<p>​        -d:后台运行容器。并返回容器ID(即启动守护式容器);</p>
<p>​        -i:以交互模式运行容器</p>
<p>​        -t:为容器重新分配一个伪输入终端</p>
<p>​        -P:随机端口映射</p>
<p>​        -p:指定端口映射,有四种格式 </p>
<h3 id="列出当前所有正在运行的容器">列出当前所有正在运行的容器</h3>
<pre><code class="language-bash">docker ps
</code></pre>
<p>说明:</p>
<p>​        -a:列出当前所有正在运行的容器+历史上运行过的</p>
<p>​        -l:显示最近创建的容器</p>
<p>​        -n:显示最近n个创建的容器</p>
<p>​        -q:静默模式,只显示容器编号</p>
<p>​        --no-trunc:不截断输出</p>
<h3 id="查看docker容器使用资源">查看docker容器使用资源</h3>
<h4 id="默认输出">默认输出</h4>
<pre><code class="language-bash">docker stats
</code></pre>
<p>默认情况下,stats 命令会每隔 1 秒钟刷新一次输出的内容直到你按下 ctrl + c。</p>
<p>下面是输出的主要内容:</p>
<p>:以短格式显示容器的 ID。<br>
:CPU 的使用情况。<br>
:当前使用的内存和最大可以使用的内存。<br>
:以百分比的形式显示内存使用情况。<br>
:网络 I/O 数据。<br>
:磁盘 I/O 数据。<br>
:PID 号</p>
<h4 id="只返回当前状态">只返回当前状态</h4>
<pre><code class="language-bash">docker stats --no-stream
</code></pre>
<h4 id="只输出指定的容器">只输出指定的容器</h4>
<pre><code class="language-bash">docker stats --no-stream registry 1999
</code></pre>
<p><em>注意:这里的 registry 和 1999 分别是容器的名称和容器的 ID。多个容器的名称或者是 ID 之间需要用空格进行分割。</em></p>
<h3 id="退出容器">退出容器</h3>
<p>​        exit:容器停止退出</p>
<p>​        Ctrl+P+Q:容器不停止退出</p>
<h3 id="启动容器">启动容器</h3>
<pre><code class="language-bash">docker start ContainerID
</code></pre>
<h3 id="重启容器">重启容器</h3>
<pre><code class="language-bash">docker restart ContainerID
</code></pre>
<h3 id="停止容器">停止容器</h3>
<pre><code class="language-bash">docker stop ContainerID
</code></pre>
<h3 id="强制停止容器">强制停止容器</h3>
<pre><code class="language-bash">docker kill ContainerID
</code></pre>
<h3 id="删除已停止的容器">删除已停止的容器</h3>
<h4 id="删除单个容器">删除单个容器:</h4>
<pre><code class="language-bash">docker rm ContainerID
</code></pre>
<h4 id="删除多个容器">删除多个容器</h4>
<pre><code class="language-bash">docker rm -f$(docker ps -a -q)
</code></pre>
<pre><code class="language-bash">docker ps -a -q | xargs docker rm
</code></pre>
<h2 id="0x04-重要知识点">0x04 重要知识点</h2>
<p><em><strong>启动守护式容器:</strong></em></p>
<pre><code class="language-bash">docker run -d ContainerID
</code></pre>
<p>使用以下命令创建一个以进程方式运行的容器</p>
<pre><code class="language-bash">runoob@runoob:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
</code></pre>
<p>在输出中,我们没有看到期望的 "hello world",而是一串长字符</p>
<p><strong>2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63</strong></p>
<p>这个长字符串叫做容器 ID,对每个容器来说都是唯一的,我们可以通过容器 ID 来查看对应的容器发生了什么。</p>
<p>首先,我们需要确认容器有在运行,可以通过 <strong>docker ps</strong> 来查看:</p>
<p><img src="https://img2018.cnblogs.com/blog/1449167/202001/1449167-20200121235437571-1104343435.png" alt="" loading="lazy"></p>
<p><strong>输出详情介绍:</strong></p>
<p>CONTAINER ID: 容器 ID。</p>
<p>IMAGE: 使用的镜像。</p>
<p>COMMAND: 启动容器时运行的命令。</p>
<p>CREATED:容器的创建时间。</p>
<p>STATUS:容器状态(状态有7种):</p>
<ul>
<li>created(已创建)</li>
<li>restarting(重启中)</li>
<li>running(运行中)</li>
<li>removing(迁移中)</li>
<li>paused(暂停)</li>
<li>exited(停止)</li>
<li>dead(死亡)</li>
</ul>
<p>PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。</p>
<p>NAMES:自动分配的容器名称。</p>
<p><strong>查看容器日志:</strong></p>
<pre><code class="language-bash">docker logs -f -t --tail 数字 ContainerID
</code></pre>
<p>​        -t:加入时间戳</p>
<p>​        -f:跟随最新的日志打印</p>
<p>​        --tail 数字:显示最后多少条</p>
<p><strong>查看容器内运行的进程:</strong></p>
<pre><code class="language-bash">docker top ContainerID
</code></pre>
<p><strong>查看容器内部细节:</strong></p>
<pre><code class="language-bash">docker inspect ContainerID
</code></pre>
<p><strong>进入正在运行的容器并以命令行交互:</strong></p>
<pre><code class="language-bash">docker exec -it ContainerID /bin/bash
</code></pre>
<p><img src="https://img2018.cnblogs.com/blog/1449167/202001/1449167-20200121235549150-1431214904.png" alt="" loading="lazy"></p>
<pre><code class="language-bash">docker attach ContainerID
</code></pre>
<p><img src="https://img2018.cnblogs.com/blog/1449167/202001/1449167-20200121235637057-1698468371.png" alt="" loading="lazy"></p>
<p>上述两个区别:</p>
<p>attach:直接进入容器启动命令的终端,不会启动新的进程(不做任何操作)</p>
<p>exec:是在容器中打开新的终端,并且可以启动新的进程(可以做操作,返回结果)</p>
<p><strong>从容器内拷贝文件到主机上</strong></p>
<pre><code class="language-bash">docker cp ContainerID:ContainerPath 宿主机Path
</code></pre>
<h1 id="docker镜像">Docker镜像</h1>
<p>特点:Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部。这一层被称作“容器层”,“容器层”之下的都叫“镜像层”。</p>
<p>docker commit :从容器创建一个新的镜像。</p>
<pre><code class="language-bash">docker commit CONTAINER ]
</code></pre>
<p>OPTIONS说明:</p>
<p>​        -a:提交镜像的作者</p>
<p>​        -c:使用Dockerfile指令来创建镜像;</p>
<p>​        -m:提交时的说明文字;</p>
<p>​        -p:在commit时,将容器暂停。</p>
<p><img src="https://img2018.cnblogs.com/blog/1449167/202001/1449167-20200121235734792-367618769.png" alt="" loading="lazy"></p>
<p><img src="https://img2018.cnblogs.com/blog/1449167/202001/1449167-20200121235747934-814647183.png" alt="" loading="lazy"></p>
<p><em><strong>将镜像推送到仓库</strong></em></p>
<p>1、登录</p>
<pre><code class="language-bash">docker login http://xxxxx.com
</code></pre>
<p>2、登录私有hub创建项目</p>
<p>例如项目叫:abc-dev</p>
<p>3、给镜像打tag</p>
<pre><code class="language-bash">docker tag a29d376ad1b9 blackcicada/h4ck3r:1.0
</code></pre>
<p>  a29d376ad1b9:IMAGE ID,可以用docker images 查看</p>
<p>  docker.io:私有hub域名</p>
<p>  blackcicada:项目名称</p>
<p>  h4ck3r:镜像名称</p>
<p>  1.0:镜像版本号</p>
<p>4、推送</p>
<p>  docker push blackcicada/h4ck3r:1.0</p>
<p><img src="https://img2018.cnblogs.com/blog/1449167/202001/1449167-20200121235824111-1913391958.png" alt="" loading="lazy"></p>
<h1 id="总结">总结</h1>
<p><img src="https://img2018.cnblogs.com/blog/1449167/202001/1449167-20200121235706214-1011986370.png" alt="" loading="lazy"></p>
<p>attach   Attach to a running container         # 当前 shell 下 attach 连接指定运行镜像</p>
<p>build   Build an image from a Dockerfile      # 通过 Dockerfile 定制镜像</p>
<p>commit   Create a new image from a container changes# 提交当前容器为新的镜像</p>
<p>cp   Copy files/folders from the containers filesystem to the host path#从容器中拷贝指定文件或者目录到宿主机中</p>
<p>create   Create a new container             # 创建一个新的容器,同 run,但不启动容器</p>
<p>diff    Inspect changes on a container's filesystem# 查看 docker 容器变化</p>
<p>events   Get real time events from the server      # 从 docker 服务获取容器实时事件</p>
<p>exec    Run a command in an existing container   # 在已存在的容器上运行命令</p>
<p>export   Stream the contents of a container as a tar archive# 导出容器的内容流作为一个 tar 归档文件[对应 import ]</p>
<p>historyShow the history of an image          # 展示一个镜像形成历史</p>
<p>images   List images                  # 列出系统当前镜像</p>
<p>import   Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export]</p>
<p>info    Display system-wide information      # 显示系统相关信息</p>
<p>inspectReturn low-level information on a container# 查看容器详细信息</p>
<p>kill    Kill a running container            # kill 指定 docker 容器</p>
<p>load    Load an image from a tar archive      # 从一个 tar 包中加载一个镜像[对应 save]</p>
<p>login   Register or Login to the docker registry server   # 注册或者登陆一个 docker 源服务器</p>
<p>logout   Log out from a Docker registry server      # 从当前 Docker registry 退出</p>
<p>logs    Fetch the logs of a container         # 输出当前容器日志信息</p>
<p>port    Lookup the public-facing port which is NAT-ed to PRIVATE_PORT   # 查看映射端口对应的容器内部源端口</p>
<p>pause   Pause all processes within a container   # 暂停容器</p>
<p>pull    Pull an image or a repository from the docker registry server# 从docker镜像源服务器拉取指定镜像或者库镜像</p>
<p>push    Push an image or a repository to the docker registry server   # 推送指定镜像或者库镜像至docker源服务器</p>
<p>rm   Remove one or more containers         # 移除一个或者多个容器</p>
<p>rmi    Remove one or more images       # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]</p>
<p>run    Run a command in a new container      # 创建一个新的容器并运行一个命令</p>
<p>save    Save an image to a tar archive         # 保存一个镜像为一个 tar 包[对应 load]</p>
<p>search   Search for an image on the Docker Hub   # 在 docker hub 中搜索镜像</p>
<p>tag    Tag an image into a repository         # 给源中镜像打标签</p>
<p>top    Lookup the running processes of a container# 查看容器中运行的进程信息</p>
<p>unpauseUnpause a paused container         # 取消暂停容器</p>
<p>wait    Block until a container stops, then print its exit code# 截取容器停止时的退出状态值</p>


</div>
<div id="MySignature" role="contentinfo">
    朋友可以背叛你,但技术和身材不会<br><br>
来源:https://www.cnblogs.com/zha0gongz1/p/12227485.html
頁: [1]
查看完整版本: Docker使用教程