Docker 实战三(容器操作命令)

版权声明:本文为博主(wisdom-chen)的原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38423105/article/details/85533316

目录

Docker 容器

Docker 容器的基本操作命令(介绍常用的)

docker ps : 列出所有的容器

docker run: 创建一个新的容器并运行一个命令

docker start/stop/restart 

docker 进入容器之后退出

docker kill 强制停止容器

docker 删除容器

docker logs : 获取容器的日志

 Docker top :查看容器中运行的进程信息,支持 ps 命令参数

docker inspect : 获取容器/镜像的元数据

docker pause/unpause

docker cp :用于容器与主机之间的数据拷贝。


Docker 容器

  • 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
  • 容器化软件适用于基于Linux和Windows的应用,在任何环境中都能够始终如一地运行。
  • 容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。

Docker 容器的基本操作命令(介绍常用的)

docker ps : 列出所有的容器

docker ps [OPTIONS]
  • -a :显示所有的容器,包括未运行的。
  • -f :根据条件过滤显示的内容。
  • --format :指定返回值的模板文件。
  • -l :显示最近创建的容器。
  • -n :列出最近创建的n个容器。
  • --no-trunc :不截断输出。
  • -q :静默模式,只显示容器编号。
  • -s :显示总的文件大小。

demo:

CONTAINER ID 容器id,IMAGE 镜像名,COMMAND指令,CREATED 创建时间,STATUS(UP代表运行中Exited退出)

PORTS 端口,NAMES 该容器的名称

[root@localhost vagrant]# docker ps -n 5
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
33b92f8cce9c        wget:0.1            "/bin/bash"         22 hours ago        Exited (0) 22 hours ago                         upbeat_curie
508ed8c3ff73        wget:0.1            "/bin/bash"         22 hours ago        Exited (137) 22 hours ago                       stupefied_engelbart
1ce8ad1a9184        tomcat              "catalina.sh run"   23 hours ago        Exited (130) 23 hours ago                       objective_shockley
dd081da801ba        4ab4c602aa5e        "/hello"            23 hours ago        Exited (0) 23 hours ago                         practical_kepler
2047648ff8f1        4ab4c602aa5e        "/hello"            2 days ago          Exited (0) 2 days ago                           distracted_booth

docker run: 创建一个新的容器并运行一个命令

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -p: 端口映射,格式为:主机(宿主)端口:容器端口
  • -t: 为容器重新分配一个伪输入终端,通常与 -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=[]: 开放一个端口或一组端口;

demo:

 1. 将tomcat 8080映射到宿主机的8080端口

[root@localhost vagrant]# docker run -d --name mytomcat -p 127.0.0.1:8080:8080/tcp tomcat
a19687ed946291bd3687135c1ce8575d864e963f1f8414583dadc3fef43f4ecb
[root@localhost vagrant]# curl -s localhost:8080


<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/8.5.37</title>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <link href="tomcat.css" rel="stylesheet" type="text/css" />
    </head>
。。。。
</html>
[root@localhost vagrant]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                      NAMES
a19687ed9462        tomcat              "catalina.sh run"   46 seconds ago      Up 44 seconds       127.0.0.1:8080->8080/tcp   mytomcat

 2.使用-ti进入tomcat服务器

[root@localhost vagrant]# docker run -ti --name mytomcat-it  tomcat /bin/bash
root@d7b9d44753c2:/usr/local/tomcat# ls
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  include  lib  logs  native-jni-lib  temp  webapps  work

docker start/stop/restart 

  • docker start 容器id或容器name
  • docker stop 容器id或容器name
  • docker restart 容器id或容器name

docker 进入容器之后退出

  • exit :退出并停止容器
  • ctrl +p + q: 退出不停止容器

docker kill 强制停止容器

  • docker kill 容器id或容器name

docker 删除容器

  • docker rm 容器id
  • docker rm -f ${docker ps -a -q}  批量删除
  • docker ps -a -q | xargs docker rm 批量删除(以不定参的形式)

docker logs : 获取容器的日志

docker logs [OPTIONS] CONTAINER
  • -f : 跟踪日志输出
  • --since :显示某个开始时间的所有日志
  • -t : 显示时间戳
  • --tail :仅列出最新N条容器日志

demo:

mytomcat容器的2019-01-01的最新10条以时间戳显示

[root@localhost vagrant]# docker logs --since="2019-01-01" -t --tail=10 mytomcat
2019-01-01T05:19:29.259220695Z 01-Jan-2019 05:19:29.258 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/docs] has finished in [42] ms
2019-01-01T05:19:29.259220753Z 01-Jan-2019 05:19:29.258 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/examples]
2019-01-01T05:19:29.800126765Z 01-Jan-2019 05:19:29.799 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/examples] has finished in [541] ms
2019-01-01T05:19:29.800149372Z 01-Jan-2019 05:19:29.799 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/host-manager]
2019-01-01T05:19:29.868286069Z 01-Jan-2019 05:19:29.854 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/host-manager] has finished in [55] ms
2019-01-01T05:19:29.868303404Z 01-Jan-2019 05:19:29.854 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/manager]
2019-01-01T05:19:29.938959186Z 01-Jan-2019 05:19:29.933 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/manager] has finished in [79] ms
2019-01-01T05:19:29.942429797Z 01-Jan-2019 05:19:29.940 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
2019-01-01T05:19:29.985405382Z 01-Jan-2019 05:19:29.979 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
2019-01-01T05:19:29.985417055Z 01-Jan-2019 05:19:29.984 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 1741 ms

 Docker top :查看容器中运行的进程信息,支持 ps 命令参数

docker top [OPTIONS] CONTAINER [ps OPTIONS]

容器运行时不一定有/bin/bash终端来交互执行top命令,而且容器还不一定有top命令,可以使用docker top来实现查看container中正在运行的进程。

[root@localhost vagrant]# docker top mytomcat
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                4471                4456                0                   06:19               ?                   00:00:06            /docker-java-home/jre/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start

查看所有运行容器的进程信息

for i in  `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done

docker inspect : 获取容器/镜像的元数据

docker inspect [OPTIONS] NAME|ID [NAME|ID...]
  • -f :指定返回值的模板文件。
  • -s :显示总的文件大小。
  • --type :为指定类型返回JSON。

这个元信息有点多,我从官网找了几个demomytomcat 可以换成容器name或id

1. 获取当前容器的ip

[root@localhost vagrant]#  docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mytomcat
172.17.0.2

2. 获取该实例的日志

[root@localhost vagrant]# docker inspect --format='{{.LogPath}}' mytomcat
/var/lib/docker/containers/a19687ed946291bd3687135c1ce8575d864e963f1f8414583dadc3fef43f4ecb/a19687ed946291bd3687135c1ce8575d864e963f1f8414583dadc3fef43f4ecb-json.log

3. 获取当前实例的端口

[root@localhost vagrant]#  docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' mytomcat
 8080/tcp -> 8080

[root@localhost vagrant]# docker port mytomcat
8080/tcp -> 127.0.0.1:8080

4. 将其格式转换成没有空格的json

[root@localhost vagrant]#  docker inspect --format='{{json .Config}}' mytomcat

docker pause/unpause

  • docker pause :暂停容器中所有的进程。

  • docker unpause :恢复容器中所有的进程。

docker cp :用于容器与主机之间的数据拷贝。

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

demo:

[root@localhost vagrant]# docker cp 32d35ed0c099:/usr/local/tomcat/BUILDING.txt /
[root@localhost vagrant]# cd /
[root@localhost /]# ls
bin  boot  BUILDING.txt  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  vagrant  var

参考:

Docker概念:http://dockone.io/article/6051

官方docker inspect 详解: https://docs.docker.com/engine/reference/commandline/inspect/#parent-command

猜你喜欢

转载自blog.csdn.net/qq_38423105/article/details/85533316
今日推荐