Docker命令,网络工程师专属教程。
1️⃣概述
命令文档:https://docs.docker.com/engine/reference/run/ • 1
整体图解:
2️⃣Docker命令(镜像)
一、docker search:查找dockerhub上镜像信息(不推荐)
命令:
docker search [OPTIONS] TERM
举例:
1.docker search --limit 3 centos
:限制仅三个输出三个centos镜像。
2.docker search --filter stars =100 xx --filter is-automated = true centos
:限制centos镜像的星的数量和是否是自动构建(dockerhub可以直接把github上的dockerfile文件构建为镜像)。
3.docker search --filter is-official=true centos
:查看centos的官方镜像。
4.docker search --limit --no-trunc centos
:不截断显示信息。
5.docker search --format "xxxx" -- limit 3 centos
:格式化输出字符串。
注意:
如果使用第三方镜像,例如prin/centos(非官方镜像前面有自己的用户名),为了安全考虑,需要确保能够看到dockerfile信息,知道每一层的信息。推荐直接在dockerhub的网页上查看详细的信息。
二、docker pull:从私有或者公有仓库下载镜像
命令:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
举例:
1.docker pull centos:从dockerhub
上下载centos最新版到本地,默认是latest。
2.docker pull centos:7:从dockerhub
上下载具体的版本的centos到本地。
注意:
每一个镜像后面带有一个tag,不加则表示是使用最新版。
三、docker push:将本地的镜像上传到私有或公有仓库
命令:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
举例:
将数据push到dockerhub:
1.docker login
,登陆dockerhub。
2.docker push prin/centos
,也就是账号名/镜像名
四、docker images:查看本地的镜像
命令:
docker images [OPTIONS] [REPOSITORY[:TAG]]
1.docker images
:列出所有的images。
2.docker images centos
:查看centos的images。
3.docker images -aq
:查看所有images的ID,仅显示部分。
4.docker images --digests
:查看每一个images的MD5值。
注意:
对镜像进行操作时,可以使用镜像的名称,或者使用ID。
五、docker rmi:删除对应的镜像
命令:
docker rmi [OPTIONS] IMAGE [IMAGE...]
举例:
1.docker rmi mysql
:删除特定名称的镜像[默认tag是latest]。
2.docker rmi xxxx
(容器ID或名称) yyyy(另一个容器ID或名称):删除特定ID的镜像[可以同时指定多个ID]。
3.docker rmi -f $(docker images -aq)
:删除全部镜像。
3️⃣Docker命令(容器)
一、docker run:运行镜像,产生容器
命令:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
举例:
1.docker run centos
:用centos镜像产生容器,系统随机产生名称。
2.docker run --name xxx centos
:xxx为使用centos镜像产生容器时的手工命名。
3.docker run --name xxx -d centos cmd
:cmd为容器产生时,其pts0号口(类似于console口)下执行的命令主进程。如果这个进程执行完成,则容器进入exited状态。-d表示容器的主进程在宿主机的后台而非前台运行,如果在宿主机的后台运行,通常需要加-d。
4.docker run --name xxx -it centos /bin/bash
:进入pts0号口的交互界面。如果进入后再输入exit,退出容器,则容器由于没有一个主进程运行,而变为exited状态;因此我们可以使用ctrl+p ctrl+q,以挂起的状态退出,这样的退出容器会保持运行状态。
二、docker rm:删除容器
命令:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
举例:
1.docker rm xxx
(容器名称或者容器ID):运行的容器不能执行rm删除,但可以使用docker rm -f xxx强行删除。
2.docker rm -f $(docker ps -aq)
:删除所有的容器。
三、docker: start&stop&restart&kill:开始,停止,重启容器
命令:
1.start:docker start [OPTIONS] CONTAINER [CONTAINER...]
2.stop:docker stop [OPTIONS] CONTAINER [CONTAINER...]
3.restart:docker restart [OPTIONS] CONTAINER [CONTAINER...]
4.kill:docker kill [OPTIONS] CONTAINER [CONTAINER...]
举例:
1.docker stop xxx
(容器名称或者ID):停止容器。
2.docker start xxx
(容器名或者ID):启动已经停止的容器。
3.docker restart xxx
(容器名或者ID):重启一个正在运行的容器。
4.docker kill xxx
(容器名称或者ID):强行停止容器。
四、docker cp:拷贝文件
命令:
1.将容器里的内容拷贝宿主机:docker cp [OPTIONS]
CONTAINER:SRC_PATH DEST_PATH
。
2.将宿主机的内容拷贝到容器:docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH。
举例:
1.docker cp xxx prin_test:/xxx
:将本地的xxx文件拷入prin_test容器的根目录,命名为xxx。
2.docker cp prin_test:/xxx xxx
:将prin_test容器的根目录下文件xxx,拷入宿主机命名为xxx。
五、docker pause & unpause:容器暂停/取消暂停
命令:
1.pause:docker pause CONTAINER [CONTAINER...]
2.unpause:docker unpause CONTAINER [CONTAINER...]
举例:
1.docker pause xxx
(容器名称或ID):暂停某个容器的主进程运行。
2.docker unpasue xxx
(容器名称或ID):将某个暂停状态下的容器解除暂停状态。
六、docker attach & exec:进入运行的容器/在运行的容器中执行命令
命令:
1.attach:docker attach [OPTIONS] CONTAINER
2.exec:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
举例:
1.docker attach xxx
(容器名):进入一个运行的容器的pts0号口,一般情况下从pts0接口登陆容器,都无法进行操作,因为主进程一直在运行。
2.docker exec -it xxx
(容器名) /bin/bash:进入一个运行的容器的pts接口(非0号接口,类似于VTY接口),在其他没有主进程运行,可以自己操作;并且退出以后容器不会停止。进入容器后,使用命令tty可以看到具体的线路。
3.docker exec xxx
(容器名) ifconfig:直接在对应容器中执行相应的命令,本例中为ifconfig。
七、docker inspect&logs:查看容器的详细信息/查看容器目前主进程的日志信息
命令:
1.inspect:docker inspect [OPTIONS] NAME|ID [NAME|ID...] 2.logs:docker logs [OPTIONS] CONTAINER
举例:
1.docker inspect xxx
(容器名或者ID):
要点1:在inspect中查看到的ID值才是完整的ID,docker ps中显示的是部分ID信息。
要点2:数据库挂载的位置,后续笔记中会提到:
要点3:网络相关的信息,在NetworkSettings中,主要包含了开放端口、网关(gateway)、IP地址、掩码、MAC地址、此容器连接的网桥等:
2.docker inspect qytcentos-1| jq-r '.[0].NetworkSettings.lPAddress'
:使用jq(宿主机上要安装)提取inspect信息中的的具体信息。由于inspect信息是一个大列表,内部是字典,本条命令的含义是,提起列表中0号元素(字典),的NetworkSettings键对应值中,IPAddress键对应的值。
3.docker inspect --format=’{{.NetworkSettings.要获取的Key}}’
容器名称(容器ID)例如:
查看完整网络信息:docker inspect --format="{{json .NetworkSettings}}" container(容器名称) | jq
查看网络端口映射:docker inspect --format="{{json .NetworkSettings.Ports}}" container | jq
查看容器的网络ip、网关等信息:docker inspect --format="{{json .NetworkSettings.Networks}}" container | jq
3.docker logs xxx(容器名称)
:查看容器pts0线路进程当前已有日志情况。
4.docker logs -tf xxx(容器名称)
:查看容器pts0线路进程当前的日志情况,并且实时更新日志信息。
4️⃣Docker命令(其他):
一、docker diff:列出当容器窗机后,容器内文件系统,修改的文件和目录
命令:
docker diff CONTAINER
举例:
docker diff xxx
:查看容器名xxx创建后,对文件系统做的操作。
其中A、D、C参数的意义:
二、docker commit:用变更后的容器创建行的镜像
命令:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
举例:
docker commit -m 'install net-tools' -a 'prin' xxx(容器名)
:产生类似于虚拟机的快照(镜像)。
命令中各个参数的含义:
三、docker tag:修改镜像标签
命令:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
举例:
docker tag prin/centos_old prin/centos_new
:其实相当于复制源镜像一次,并且修改名称。
四、docker export&import/save&load:将容器或者镜像导出为文件/文件倒回到镜像
命令:
export:docker export [OPTIONS] CONTAINER import:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]] save:docker save [OPTIONS] IMAGE [IMAGE...] load:docker load [OPTIONS]
举例:
导出:
1.docker expert -o centos_new.tar centos_new
:将centos_new容器导出为centos_new.tar文件。
2.docker save -o centos_new.tar centos
:将centos镜像导出为centos_new.tar文件。
导入:
1.docker import centos_new.tar prin/centos_test
:将centos_new.tar导入到镜像prin/centos_test。
2.dockerload -i centos_new.tar
:将centos_new.tar导入到镜像centos,这里不需要跟镜像名,直接还原为原来的镜像。
注意点:
save&load:docker save images_name
:将一个镜像导出为文件,再使用docker load命令将文件导入为一个镜像,会保存该镜像的的所有历史记录。比docker export命令导出的文件大,很好理解,因为会保存镜像的所有历史记录。
export&import:docker export container_id
:将一个容器导出为文件,再使用docker import命令将容器导入成为一个新的镜像,但是相比docker save命令容器文件会丢失所有源数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。
五、docker port:暴露/查看容器具体的端口
命令:
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
举例:
1.docker run -it --name qytcentos-1-p 8000:80 -p 1022:22 collinsctk/centos_net_tools_vim /bin/bash
:创建容器时将内部的80端口映射在宿主机的8000端口上,22端口映射到1022端口上。
2.docker port xxx
(容器名称):查看特定容器暴露的所有端口。
3.docker port xxx
(容器名称) 5432/tcp:查看主机特定端口与指定容器特定端口的映射关系。
六、docker top:查看容器内进程
命令:
docker top CONTAINER [ps OPTIONS]
举例:
docker top xxx
:在不进入容器的情况下,查看其中的进程信息。
我有话说: