<article class=“article fmt article-content”><h2>1 容器生命周期治理</h2><h3>1.1 docker start</h3><p>启动一或多个已被进行的容器。</p><pre><code class=“bash”># 启动已被进行的容器myrunoobdocker start myrunoob</code></pre><h3>1.2 docker stop</h3><p>进行一个运行中的容器</p><pre><code class=“bash”>docker stop myrunoob</code></pre><h3>1.3 docker restart</h3><p>重启容器</p><pre><code class=“bash”>docker restart myrunoob</code></pre><h3>1.4 docker run</h3><p>创立一个新的容器并运行一个命令。</p><p>要依据 <code>docker images</code> 命令的后果启动对应镜像的容器,执行:</p><ol><li>运行 <code>docker images</code> 命令查看以后零碎中所有可用的镜像列表。</li><li>从后果中找到您想要启动的镜像的 <code>REPOSITORY</code> 和 <code>TAG</code>。</li><li>应用 <code>docker run</code> 命令启动一个新的容器。该命令的根本格局为 <code>docker run [OPTIONS] IMAGE [COMMAND] [ARG…]</code>。其中 <code>IMAGE</code> 是镜像的名称,可能包含 <code>TAG</code>(如果未指定,则默认为 <code>latest</code>)。</li></ol><p>案例:</p><ol><li>查看镜像列表:</li></ol><pre><code class=“sh”>docker images</code></pre><p>输入:</p><pre><code class=“bash”>REPOSITORY TAG IMAGE ID CREATED SIZEubuntu 18.04 c3c304cb4f22 2 weeks ago 64.2MBnginx latest 9beeba249f3e 3 weeks ago 109MB</code></pre><p>启动名为 <code>nginx</code> 的镜像:</p><pre><code class=“sh”>docker run -d -p 8080:80 –name mynginx nginx</code></pre><p>在这个例子中:</p><ul><li><code>-d</code> 选项示意在后盾运行容器。</li><li><code>-p 8080:80</code> 示意将容器的 80 端口映射到主机的 8080 端口。</li><li><code>–name mynginx</code> 为您的容器设置了一个名字 <code>mynginx</code>,不便当前援用。</li><li><code>nginx</code> 是您抉择的镜像名称。</li></ul><p>如果您须要应用特定的标签,能够将其附加到镜像名称前面,例如 <code>nginx:1.17</code>。</p><p>依据具体需要增加或批改命令行选项,如需在容器启动时执行特定的命令或传递环境变量等。</p><p>实例:</p><pre><code class=“bash”>docker run -p 6379:6379 –name redis # 将主机上的 /home/redis6/data 目录挂载到容器外部的 /data 目录,以便能够将 Redis 数据长久化到主机-v /home/redis6/data:/data # 将主机上的 /home/redis6/conf/redis.conf 文件挂载到容器外部的 /etc/redis/redis.conf 文件,以便能够应用自定义的 Redis 配置文件-v /home/redis6/conf/redis.conf:/etc/redis/redis.conf # 指定要应用的 Redis 镜像及版本号,并在后盾运行容器-d redis:6.2.7 # 在容器外部执行的命令,启动 Redis 服务,并应用 /etc/redis/redis.conf 配置文件redis-server /etc/redis/redis.conf</code></pre><pre><code class=“bash”>-a stdin 指定规范输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;-d 后盾运行容器,并返回容器ID;-i:–interactive 以交互模式运行容器,通常与 -t 同时应用,即便未连贯STDIN也放弃关上状态-P: 随机端口映射,容器外部端口随机映射到主机的端口-p: 指定端口映射,格局为:主机(宿主)端口:容器端口-t: –tty Allocate a pseudo-TTY为容器重新分配一个伪输出终端,通常与 -i 同时应用;–name=“nginx-lb” 为容器指定一个名称–dns 8.8.8.8: 指定容器应用的DNS服务器,默认和宿主统一;–dns-search example.com: 指定容器DNS搜寻域名,默认和宿主统一;-h “mars”: 指定容器的hostname;-e username=“ritchie”: 设置环境变量;–env-file=[]: 从指定文件读入环境变量;–cpuset=“0-2” or –cpuset=“0,1,2”: 绑定容器到指定CPU运行;-m :设置容器应用内存最大值;–net=“bridge”: 指定容器的网络连接类型,反对 bridge/host/none/container–link=[]: 增加链接到另一个容器;–expose=[]: 凋谢一个端口或一组端口;–volume , -v: 绑定一个卷# 设置容器的重启策略为 always,只能在 Docker 1.2 或更高版本中应用–restart=always</code></pre><h2>2 本地镜像治理(镜像操作命令)</h2><h3>2.1 image</h3><pre><code class=“bash”># 列出本机所有 image 文件$ docker image ls</code></pre><pre><code class=“bash”># 删除 image 文件$ docker image rm [imageName]</code></pre><h4>实战</h4><pre><code class=“bash”>[root@scheduler-center-1 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESfb88be2a8283 xuxueli/xxl-job-admin:2.4.0 “sh -c ‘java -jar $J…” 15 hours ago Up 15 hours 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp xxl-job-admin[root@scheduler-center-1 ~]# docker image rm xxl-job-adminError response from daemon: No such image: xxl-job-admin:latest[root@scheduler-center-1 ~]# docker rm xxl-job-adminError response from daemon: You cannot remove a running container fb88be2a828361ed7173d94a346a7c7c2a4aa11bb17d82450a4424ddf44651f0. Stop the container before attempting removal or force remove[root@scheduler-center-1 ]# docker rm xuxueli/xxl-job-admin:2.4.0Error response from daemon: No such container: xuxueli/xxl-job-admin:2.4.0</code></pre><p>试图删除 Docker 容器和 Docker 镜像,但遇到报错:</p><ol><li><p><strong>删除容器时报错:</strong></p><pre><code class=“bash”>docker rm xxl-job-admin</code></pre><p>错误信息:You cannot remove a running container fb88be2a8283… Stop the container before attempting removal or force remove</p><p>起因:你不能删除正在运行的容器。在这种状况下,容器 “fb88be2a8283” 处于运行状态。</p><p>解决办法:首先进行容器,而后再删除。进行容器:</p><pre><code class=“bash”>docker stop xxl-job-admin</code></pre><p>而后再尝试删除容器。</p></li><li><p><strong>删除镜像时报错:</strong></p><pre><code class=“bash”>docker image rm xxl-job-admin</code></pre><p>错误信息:Error response from daemon: No such image: xxl-job-admin:latest</p><p>起因:Docker 引擎无奈找到名为 “xxl-job-admin” 的镜像,可能是因为该镜像不存在或者被命名为 “xuxueli/xxl-job-admin:2.4.0”。</p><p>解决办法:确保要删除的镜像名称是正确的。如果你要删除 “xuxueli/xxl-job-admin:2.4.0”,则应该应用如下命令:</p><pre><code class=“bash”>docker image rm xuxueli/xxl-job-admin:2.4.0</code></pre></li></ol><h4>image inspect</h4><p>查看 Docker 镜像详细信息:</p><pre><code class=“bash”>[root@service-monitoring $ docker logs -f mynginx192.168.239.1 - - [10/Jul/2016:16:53:33 +0000] “GET / HTTP/1.1” 200 612 “-” “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36” “-“2016/07/10 16:53:33 [error] 5#5: *1 open() “/usr/share/nginx/html/favicon.ico” failed (2: No such file or directory), client: 192.168.239.1, server: localhost, request: “GET /favicon.ico HTTP/1.1”, host: “192.168.239.130”, referrer: “http://192.168.239.130/“192.168.239.1 - - [10/Jul/2016:16:53:33 +0000] “GET /favicon.ico HTTP/1.1” 404 571 “http://192.168.239.130/” “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36” “-“192.168.239.1 - - [10/Jul/2016:16:53:59 +0000] “GET / HTTP/1.1” 304 0 “-” “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36” “-”…</code></pre><p>查看容器mynginx从2016年7月1日后的最新10条日志。</p><pre><code class=“bash”>docker logs –since=“2016-07-01” –tail=10 mynginx</code></pre><h4>7.3 无奈查找指定字符串</h4><p>执行以下命令没有在docker logs的后果中查找字符串,而是会输入了所有的日志</p><pre><code class=“bash”>docker logs nginx | grep 127</code></pre><p>因为管道符仅对stdout无效,如果容器将日志记录到stderr,这种状况就会产生。</p><h4>解决方案</h4><p>把stderr重定向到stdout:</p><pre><code class=“bash”>docker logs nginx 2>&1 | grep 127</code></pre><p>还有一种形式,但麻烦:</p><pre><code class=“bash”>grep 127 ]# docker image inspect mysql:5.7.42-oracle | grep -i version “GOSU_VERSION=1.16”, “MYSQL_VERSION=5.7.42-1.el7”, “MYSQL_SHELL_VERSION=8.0.33-1.el7” “DockerVersion”: “20.10.23”, “GOSU_VERSION=1.16”, “MYSQL_VERSION=5.7.42-1.el7”, “MYSQL_SHELL_VERSION=8.0.33-1.el7”</code></pre><p>有时可用于查看 lastest 标签的 image,版本号到底多少。</p><p>而 <code>docker inspect</code> 命令是用于查看 Docker 对象(如容器、镜像、网络等)的详细信息,它不仅能够查看镜像的元数据,还能够查看容器的元数据、网络的元数据等。</p><p>image文件是通用的,一台机器的 image 文件拷贝到另一台机器,照样能够应用。为节省时间,尽量应用他人制作好的 image 文件。即便定制,也应基于他人的 image 文件进行加工,而不是从0开始。</p><p>为不便共享,image 文件制作实现后,上传到仓库:</p><ul><li>Docker 官网仓库 Docker Hub 是最重要、最罕用的 image 仓库</li><li>发售本人制作的 image 文件也可</li></ul><h3>2.2 images</h3><pre><code class=“bash”>docker images = docker image ls</code></pre><p>列出以后零碎所有可用 Docker 镜像。提供repository、tag、image ID、和size的摘要信息。可查看在本地机器下载或创立的镜像。</p><p></p><p><code>docker image</code> 和 <code>docker images</code> 区别:</p><ul><li><code>docker image</code> 命令是 Docker 17.06 版本后新增命令,用于治理 Docker 镜像。可用来列出本地镜像、删除本地镜像、构建镜像等操作。如应用 <code>docker image ls</code> 命令能够列出本地所有的镜像</li><li><code>docker images</code> 命令是晚期版本的 Docker 命令,用于列出本地所有镜像。性能与 <code>docker image ls</code>完全相同,只是命令不同</li></ul><h3>2.3 rmi</h3><p>不想要某 image 时可用。</p><p>等效命令:</p><pre><code class=“bash”>docker rmi imageId</code></pre><h3>2.4 tag</h3><h3>docker image build</h3><p>从Dockerfile构建image</p><pre><code class=“bash”>Usage: docker image build [OPTIONS] PATH | URL | -</code></pre><h3>history</h3><pre><code class=“bash”>docker history image_id</code></pre><p></p><h3>docker save</h3><p>可将Docker镜像保留成tar文件,不便在不同环境中迁徙和分享镜像。</p><pre><code class=“bash”>docker save # OPTIONS为可选参数 [OPTIONS] # IMAGE为须要导出的Docker镜像的名称(能够是多个) IMAGE [IMAGE…]</code></pre><p>如:</p><pre><code class=“bash”># 将myimage镜像保留为名为myimage.tar的tar文件,并指定了输入门路为/path/to/。docker save -o /path/to/myimage.tar myimage</code></pre><pre><code class=“bash”>-o, –output string:指定输入的压缩文件(.tar或.tgz)门路和名称-q, –quiet:静默模式,只输入错误信息和进度条–tag string:指定要导出的镜像的tag名称</code></pre><p>运行这个命令之前,要先应用docker pull命令下载须要导出的镜像。</p><h3>docker load</h3><h3>docker import</h3><h2>3 container</h2><h3>3.1 容器文件</h3><p>image 文件生成的容器实例,自身也是一个文件,称为容器文件。也就是说,一旦容器生成,就会同时存在两个文件:</p><ul><li>image 文件</li><li>容器文件</li></ul><p>敞开容器并不会删除容器文件,仅是容器进行运行。</p><h3>docker container ls</h3><pre><code class=“bash”># 列出本机正在运行的容器[root@scheduler-center-1 $ docker inspect –format=’{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ mymysql172.17.0.3</code></pre><h3>pull</h3><p></p><h3>push</h3><pre><code class=“bash”>docker push</code></pre><p><br/>留神 tag 必须是 hub 仓库的用户名,否则报错无权限。<br/><br/>但不举荐间接上传镜像,而是思考平安问题,应用 Dockerfile 文件。即建设 hub 仓库和 GitHub 的映射,只有 GitHub 上有 Dockerfile 就会主动映射到 Dockerhub。</p><h3>docker search</h3><p><code>docker search</code>命令用于在Docker Hub上搜寻能够用来构建和运行容器的镜像。能够依照以下格局应用该命令:</p><pre><code class=“bash”>docker search [OPTIONS] # TERM是须要搜寻的关键字 TERM</code></pre><p>如:</p><pre><code class=“bash”>docker search portainer</code></pre><p>下面的命令会在Docker Hub上搜寻关键字为<code>portainer</code>的镜像,并列出匹配的相干信息,如镜像名称、形容、星级、官网/非官方等。</p><p></p><p>罕用选项:</p><pre><code class=“bash”>–filter=STARS=N:示意只列出点赞数大于或等于N的镜像–filter=IS_OFFICIAL=true|false:示意只列出Docker官网公布的或者非官方公布的镜像-s, –stars[0]:示意按点赞数排序,默认值为1,即只显示点赞数大于等于1的镜像–format="{{.Name}}:{{.Description}}":自定义输入格局,例如仅显示镜像名称和形容信息</code></pre><p><code>docker search</code>命令不仅能用来搜寻公共仓库,还能够搜寻公有仓库,只须要在关键字中蕴含公有仓库地址即可,如:</p><pre><code class=“bash”>docker search docker.example.com/mysql</code></pre><p>因为网络起因,<code>docker search</code>命令可能会存在拜访异样或者网络超时等问题。</p><h3>docker exec</h3><p>用于在运行中的容器中执行命令。容许你在容器内执行命令,就像在本地计算机一样:</p><ul><li>对在运行中的容器中调试应用程序很有用</li><li>或在容器中运行交互式命令行工具</li></ul><pre><code class=“bash”>docker exec# OPTIONS 参数可选,能够用于指定一些选项,例如执行命令的用户、工作目录等 [OPTIONS] # CONTAINER 参数必须,指定要在其中执行命令的容器 CONTAINER # COMMAND 和 ARG 参数也必须,指定要在容器外部执行的命令及其参数 COMMAND [ARG…]</code></pre><pre><code class=“bash”># 进个 py 我的项目的容器docker exec -it image_id /bin/bash# 查看 Python 的过程ps -ef | grep python# 进入容器我的项目的pythondocker exec -it image_id python# 查看 ipdocker exec -it image_id ip a[root@service-monitoring ]# docker container lsCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESfb88be2a8283 xuxueli/xxl-job-admin:2.4.0 “sh -c ‘java -jar $J…” 16 hours ago Up 16 hours 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp xxl-job-admin</code></pre><pre><code class=“bash”># 列出本机所有容器,包含终止运行的容器docker container ls –all(-a)</code></pre><p>输入后果包含容器 ID。很多中央都要提供这 ID,如上一节终止容器运行的docker container kill命令。</p><blockquote>有人说 docker ps & docker ps -a 更不便查看 container 运行状态呀!因为 docker container options 是Docker 1.13中的更新,docker container ls 与 docker ps 性能雷同,但语义更明确,简化Docker用法,更举荐新写法。</blockquote><p><code>-q</code>间接显示以后所有容器的 container id</p><pre><code class=“bash”>docker container ls -aqdocker container ls -a | awk {‘print$1’}</code></pre><p></p><p>过滤状态字段显示</p><pre><code class=“bash”>docker container ls -f “status=exited”</code></pre><p></p><h3>docker container rm</h3><p>终止运行的容器文件,仍然会占据硬盘空间,能够应用docker container rm命令删除。</p><pre><code class=“bash”>docker container rm [containerID]</code></pre><p>运行下面的命令之后,再应用<code>docker container ls -a</code>命令,就会发现被删除的容器文件曾经隐没了。</p><h4>全副删除</h4><p>因为一个个指定 containerid 很麻烦,能够全副删除:</p><pre><code class=“bash”>docker rm $(docker container ls -aq)</code></pre><h4>条件过滤删除</h4><p>比方,咱们想把退出的给全副删除<br/></p><ul><li>筛选出退出状态的image 文件<br/><br/>间接删除</li></ul><pre><code class=“bash”>docker rm $(docker container ls -f “status=exited” -q)</code></pre><h3>docker container commit</h3><p>依据容器的更改创立新image,比方在原 image 根底上装置了新的软件,那就能够上传新 image。</p><pre><code class=“bash”>Usage: docker container commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]</code></pre><p></p><p>可简写为</p><pre><code class=“bash”>docker commit</code></pre><h2>4 容器操作命令</h2><h3>4.1 ps</h3><p><code>docker ps</code> ,用于列出以后正在运行的容器的命令。它能够显示容器的 ID、名称、状态、启动工夫、所应用的镜像等信息。</p><p>如果在命令行中执行 <code>docker ps</code>,会输入以后正在运行的容器的列表,包含容器的 ID、名称、状态、启动工夫、所应用的镜像等信息。例如:</p><pre><code class=“bash”>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESec88509b8b1b mysql:5.7.42-oracle “docker-entrypoint.s…” 10 minutes ago Up 10 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql</code></pre><p>下面的输入示意只有一个名为 <code>mysql</code> 的容器正在运行,它应用的是 <code>mysql:5.7.42-oracle</code> 镜像,并且将其 3306 端口映射到主机的 3306 端口。</p><pre><code class=“bash”>[root@service-monitoring home]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESec88509b8b1b mysql:5.7.42-oracle “docker-entrypoint.s…” 10 minutes ago Exited (1) 10 minutes ago mysql60180275418c hello-world “/hello” 2 days ago Exited (0) 2 days ago laughing_mcclintock[root@service-monitoring home]# </code></pre><h3>4.2 inspect</h3><p>docker inspect : 获取容器/镜像的元数据。</p><pre><code class=“bash”>docker inspect [OPTIONS] NAME|ID [NAME|ID…]</code></pre><pre><code class=“bash”>-f :指定返回值的模板文件。-s :显示总的文件大小。–type :为指定类型返回JSON。</code></pre><pre><code class=“bash”># 获取镜像mysql:5.6的元信息runoob@runoob:$ docker inspect mysql:5.6[ { “Id”: “sha256:2c0964ec182ae9a045f866bbc2553087f6e42bfc16074a74fb820af235f070ec”, “RepoTags”: [ “mysql:5.6” ], “RepoDigests”: [], “Parent”: “”, “Comment”: “”, “Created”: “2016-05-24T04:01:41.168371815Z”, “Container”: “e0924bc460ff97787f34610115e9363e6363b30b8efa406e28eb495ab199ca54”, “ContainerConfig”: { “Hostname”: “b0cf605c7757”, “Domainname”: “”, “User”: “”, “AttachStdin”: false, “AttachStdout”: false, “AttachStderr”: false, “ExposedPorts”: { “3306/tcp”: {} },…</code></pre><p>获取正在运行的容器mymysql的 IP。</p><pre><code class=“bash”>runoob@runoob:]# docker exec -it mysql bashbash-4.2# mysql -u root -pEnter password: Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 5Server version: 5.7.42 MySQL Community Server (GPL)Copyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.mysql> </code></pre><h3>docker update</h3><p>更新正在运行的容器的配置信息。可用于更新容器的 CPU、内存、网络、挂载卷等配置信息,而无需进行和重启容器。</p><pre><code class=“bash”>docker update [OPTIONS] CONTAINER [CONTAINER…]–cpu-shares:设置容器应用 CPU 的绝对权重。默认为 0,示意与其余容器共享 CPU 工夫–memory:设置容器应用的内存限度。默认为 0,示意不限度内存应用–restart:设置容器退出后的重启策略。默认为 “no”,示意容器退出后不重启–ulimit:设置容器应用的系统资源限度,如最大关上文件数、最大过程数等</code></pre><p>如将容器 <code>mycontainer</code> 的 CPU 权重设为 512,内存限度为 1GB,重启策略为 always:</p><pre><code class=“bash”>docker update –cpu-shares 512 –memory 1g –restart always mycontainer</code></pre><p>该命令只能更新容器的配置信息,不能更新容器的镜像和文件系统。如果须要更新镜像和文件系统,须要先进行容器,而后应用 <code>docker rm</code> 命令删除容器,再应用 <code>docker run</code> 命令从新创立容器。</p><h2>5 Docker-Compose</h2><p>该系列命令须运行在 yaml文件所在目录。否则报错:</p><pre><code class=“bash”>[root@javaedge-monitor-platform-dev $ </code></pre><ol start=“3”><li><code>docker network create</code>创立一个新的 Docker 网络。咱们能够指定网络类型、驱动程序等配置创立定制化网络:</li></ol><pre><code class=“bash”>docker network create -d macvlan \ –subnet=172.16.86.0/24 \ –gateway=172.16.86.1 \ -o parent=eth0 pub_net</code></pre><ol start=“4”><li><code>docker network connect</code>将一个容器连贯到指定网络。需指定网络名称或 ID,以及容器名称或 ID:</li></ol><pre><code class=“bash”> docker network connect multi-host-network container1</code></pre><ol start=“5”><li><code>docker network disconnect</code>将容器从指定网络断开连接。应用办法与 <code>connect</code> 相似:</li></ol><pre><code class=“bash”>docker network disconnect multi-host-network container1</code></pre><ol start=“6”><li><code>docker network rm</code>删除指定的 Docker 网络。删除前,确保指定网络下没有任何容器在应用:</li></ol><pre><code class=“bash”>docker network rm multi-host-network </code></pre><p>所以,总结来说,Docker network 命令用于治理 Docker 的网络性能。咱们能够创立各种类型的网络,将容器连贯或断开网络,以及在须要时删除网络。熟练掌握 Docker 的网络性能和相干命令,能够让咱们在应用 Docker 部署利用时,有更高的灵活性和便捷性。适当应用网络能够实现容器间通信、容器到宿主机通信等,这在日常开发和运维场景下十分罕用。</p><pre><code class=“bash”>[root@javaedge-monitor-platform-dev docker]# docker network lsNETWORK ID NAME DRIVER SCOPE64ad1eca60f7 bridge bridge local4689aefb8f9b docker_my-bridge bridge localf2f555bed377 host host locald02380dd3da4 none null local[root@javaedge-monitor-platform-dev docker]# </code></pre><h2>7 日志 docker logs</h2><p>获取容器的日志。</p><h3>7.1 语法</h3><pre><code class=“bash”>docker logs [OPTIONS] CONTAINER</code></pre><ul><li><strong>-f :</strong> 跟踪日志输入</li><li><strong>–since :</strong>显示某个开始工夫的所有日志</li><li><strong>-t :</strong> 显示工夫戳</li><li><strong>–tail :</strong>仅列出最新N条容器日志</li></ul><h3>7.2 实例</h3><p>跟踪查看容器mynginx的日志输入。</p><pre><code class=“bash”>runoob@runoob:]# docker-compose exec mysql bashERROR: Can’t find a suitable configuration file in this directory or any parent. Are you in the right directory? Supported filenames: docker-compose.yml, docker-compose.yaml</code></pre><h3>docker compose</h3><p>docker compose up [-d]</p><pre><code class=“bash”># 应用 docker-compose.yml 文件定义的容器,启动并在后盾运行。docker compose # 创立容器并启动 up # 后盾运行形式启动 -d</code></pre><p>容器启动后会始终在后盾运行,可通过 <code>docker-compose ps</code> 查看状态。</p><p>要进行后盾运行的容器,能够应用 <code>docker-compose stop</code> 命令。</p><h2>6 network</h2><p>Docker network 相干的常用命令次要包含:</p><ol start=“3”><li><code>docker network create</code> - 创立一个新网络</li><li><code>docker network connect</code> - 将容器连贯到网络</li><li><code>docker network disconnect</code> - 将容器从网络断开</li><li><code>docker network rm</code> - 删除指定网络</li></ol><h3>6.1 docker network ls</h3><p>列出 Docker 主机上的所有网络,包含网络名称、ID、驱动等信息。</p><pre><code class=“bash”>docker network ls</code></pre><h3>6.2 docker network inspect</h3><p>查看指定网络的具体配置信息。通过 network ID 或 name 指定网络:</p><pre><code class=“bash”>docker@minikube:$ docker network inspect bridge[ { “Name”: “bridge”, “Id”: “675eddaf1c1e76a5c0fe4b56f86831cb7c7d0fc597d766fd7df533cf09e11832”, “Created”: “2023-05-10T15:05:28.409718304Z”, “Scope”: “local”, “Driver”: “bridge”, “EnableIPv6”: false, “IPAM”: { “Driver”: “default”, “Options”: null, “Config”: [ { “Subnet”: “172.17.0.0/16”, “Gateway”: “172.17.0.1” } ] }, “Internal”: false, “Attachable”: false, “Ingress”: false, “ConfigFrom”: { “Network”: "" }, “ConfigOnly”: false, “Containers”: {}, “Options”: { “com.docker.network.bridge.default_bridge”: “true”, “com.docker.network.bridge.enable_icc”: “true”, “com.docker.network.bridge.enable_ip_masquerade”: “true”, “com.docker.network.bridge.host_binding_ipv4”: “0.0.0.0”, “com.docker.network.bridge.name”: “docker0”, “com.docker.network.driver.mtu”: “1500” }, “Labels”: {} }]docker@minikube:docker inspect --format={{.LogPath}} nginx
</code></pre><p>docker-compose可间接应用内置命令:</p><pre><code class=“bash”>docker-compose logs nginx | grep 127</code></pre><h2>8 docker scout quickview</h2><pre><code class=“bash”>docker scout quickview [IMAGE|DIRECTORY|ARCHIVE]</code></pre><p><code>docker scout quickview</code> 显示指定image的疾速概览。它显示指定image和根底image中破绽的摘要。如果可用,它还显示根底image的刷新和更新倡议。</p><p>如果没有指定image,则应用最近构建的image。</p><p>反对以下类型的构件:</p><ul><li>image</li><li>OCI 布局目录</li><li>由 <code>docker save</code> 创立的 Tarball 存档</li><li>本地目录或文件</li></ul><p>默认状况下,该工具冀望一个image援用,如:</p><ul><li><code>redis</code></li><li><code>curlimages/curl:7.87.0</code></li><li><code>mcr.microsoft.com/dotnet/runtime:7.0</code></li></ul><p>如要剖析的构件是 OCI 目录、Tarball 存档、本地文件或目录,或者如果您想要管制从何处解析图像,须在援用前加上以下之一:</p><ul><li><code>image://</code>(默认)应用本地图像,或者回退到注册表查找</li><li><code>local://</code> 应用本地图像存储中的图像(不进行注册表查找)</li><li><code>registry://</code> 应用注册表中的图像(不应用本地图像)</li><li><code>oci-dir://</code> 应用 OCI 布局目录</li><li><code>archive://</code> 应用由 <code>docker save</code> 创立的 Tarball 存档</li><li><code>fs://</code> 应用本地目录或文件</li></ul><h3>[选项]</h3><table><thead><tr><th>选项</th><th>短格局</th><th>默认值</th><th>形容</th></tr></thead><tbody><tr><td><code>–env</code></td><td> </td><td> </td><td>环境名称</td></tr><tr><td><code>–latest</code></td><td> </td><td> </td><td>最新索引的图像</td></tr><tr><td><code>–org</code></td><td> </td><td> </td><td>Docker 组织的命名空间</td></tr><tr><td><code>–output</code></td><td><code>-o</code></td><td> </td><td>将报告写入文件</td></tr><tr><td><code>–platform</code></td><td> </td><td> </td><td>要剖析的图像平台</td></tr><tr><td><code>–ref</code></td><td> </td><td> </td><td>如果提供的 Tarball 蕴含多个援用,则要应用的援用。仅实用于存档。</td></tr><tr><td><code>–stream</code></td><td> </td><td> </td><td>已弃用,流的名称</td></tr></tbody></table><h3>[示例]</h3><pre><code class=“bash”># 对image进行疾速概览$ docker scout quickview nacos/nacos-server:latest</code></pre><p></p><pre><code class=“bash”># 对最近构建的image进行疾速概览javaedge@JavaEdgedeMac-mini % docker scout qvINFO New version 1.2.2 available (installed version is 0.20.0) ✓ SBOM of image already cached, 450 packages indexed Your image nacos/nacos-server:latest │ 0C 4H 19M 22L Base image centos:7 │ 1C 13H 29M 13LWhat’s Next? Learn more about vulnerabilities → docker scout cves nacos/nacos-server:latest</code></pre><pre><code class=“bash”># 剖析软件构件的破绽。如未指定image,则应用最近构建的图像。javaedge@JavaEdgedeMac-mini frp_0.52.3 % docker scout cves nacos/nacos-server:latestINFO New version 1.2.2 available (installed version is 0.20.0) ✓ Provenance obtained from attestation ✓ SBOM of image already cached, 450 packages indexed ✗ Detected 20 vulnerable packages with a total of 44 vulnerabilities 0C 1H 5M 0L lxml 3.2.1pkg:pypi/lxml@3.2.1 ✗ HIGH CVE-2021-43818 [Improper Neutralization of Special Elements in Output Used by a Downstream Component (‘Injection’)] https://scout.docker.com/v/CVE-2021-43818 Affected range : <4.6.5 Fixed version : 4.6.5 CVSS Score : 8.2 CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:H/A:N</code></pre><h2>X help</h2><pre><code class=“bash”>docker –help</code></pre><p>遗记命令咋办?用它!</p><p><strong>关注我,紧跟本系列专栏文章,咱们下篇再续!</strong></p><blockquote><p>作者简介:魔都技术专家兼架构,多家大厂后端一线研发教训,各大技术社区头部专家博主,编程严选网创始人。具备丰盛的引领团队教训,深厚业务架构和解决方案的积攒。</p><p>负责:</p><ul><li>地方/分销预订零碎性能优化</li><li>流动&优惠券等营销中台建设</li><li><p>交易平台及数据中台等架构和开发设计</p><p>目前主攻升高软件复杂性设计、构建高可用零碎方向。</p></li></ul></blockquote><p>参考:</p><ul><li>编程严选网</li><li><p>https://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html</p><blockquote>本文由博客一文多发平台 OpenWrite 公布!</blockquote></li></ul></article>