docker容器

一、容器基础

1.1容器启动流程

通过docker run 命令可以启动一个容器,该命令在执行时首先会在本地查找指定的镜像,如果找到了,则直接启动、否则回到镜像中心查找,通过镜像中心存在该镜像,则会下载到本地并启动,如果镜像中心也没有,则会直接报错。

1.2容器运行本质

容器存在的意义就是为了运行容器内的应用,对外提供服务,所以启动容器的目的就是启动容器内的应用。容器中应用运行完毕后,容器就是自动终止。所以,如果不想让容器启动后立即终止运行,则需要将容器应用不能立即结束。通常采用的方式有两种,使应用处于与用户交互状态或者等待状态。

二、容器运行命令

2.1以交互方式运行ubuntu容器

[root@localhost ~]# docker run --name ubuntu3 -it ubuntu /bin/bash

2.2以守护进程方式运行容器

[root@localhost ~]# docker run --name myubuntu5 -d ubuntu
273df0ea0983127e4c9c8102617d1bca850aa6b6e5578f0879bcf995ef992767

三、容器退出命令

退出容器指的是以交互模式运行的容器,分为两种退出模式

3.1退出并且停止容器exit

[root@localhost ~]# docker run --name myubuntu -it ubuntu
root@492a59951a84:/# exit
exit
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED          STATUS                      PORTS     NAMES
492a59951a84   ubuntu    "bash"    13 seconds ago   Exited (0) 10 seconds ago             myubuntu

3.2退出但不停止容器Ctrl+P+Q

先按下Ctrl+P ,然后再按下Q

[root@localhost ~]# docker run --name mytomcat -it -P tomcat:8.5.49

再通过docker ps -a 可以查看到容器是UP状态,说明容器退出了但是没有停止。

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND             CREATED          STATUS          PORTS                                         NAMES
ce9c66e10f3e   tomcat:8.5.49   "catalina.sh run"   25 seconds ago   Up 25 seconds   0.0.0.0:32770->8080/tcp, :::32770->8080/tcp   mytomcat

四、容器状态查看命令

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND             CREATED         STATUS         PORTS                                         NAMES
f723aec41efc   tomcat:8.5.49   "catalina.sh run"   4 minutes ago   Up 4 minutes   0.0.0.0:32771->8080/tcp, :::32771->8080/tcp   mytomcat

五、容器再进命令

5.1docker exec命令

通过exec进去,但是exit退出后,容器还是没有停止运行。因为通过exec进去-另外创建创建了一个进程,和原来的进程不是同一个,所有退出后原来的进程并没有停止运行。

root@localhost ~]# docker exec -it mytomcat /bin/bash
root@f723aec41efc:/usr/local/tomcat# 

[root@localhost ~]# docker exec --help

Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

Execute a command in a running container

Aliases:
  docker container exec, docker exec

Options:
  -d, --detach               Detached mode: run command in the
                             background
      --detach-keys string   Override the key sequence for
                             detaching a container
  -e, --env list             Set environment variables
      --env-file list        Read in a file of environment variables
  -i, --interactive          Keep STDIN open even if not attached
      --privileged           Give extended privileges to the command
  -t, --tty                  Allocate a pseudo-TTY
  -u, --user string          Username or UID (format:
                             "<name|uid>[:<group|gid>]")
  -w, --workdir string       Working directory inside the container

5.2docker attach命令

[root@localhost ~]# docker attach --help

Usage:  docker attach [OPTIONS] CONTAINER

Attach local standard input, output, and error streams to a running container

Aliases:
  docker container attach, docker attach

Options:
      --detach-keys string   Override the key sequence for
                             detaching a container
      --no-stdin             Do not attach STDIN
      --sig-proxy            Proxy all received signals to the
                             process (default true)

5.3docker exec与docker attach区别:

原来就是一个进程,执行docker exec会重新创建一个进程,这个进程会窥探到原来的进程,exit退出以后,原来的进程没有停止。但是使用docker attach进去的进程就是原来的容器的进程,exit退出以后,原来的进程停止。

5.4补充:docker attach对tomcat不起作用原因(使用docker attach tomcat):

与tomcat的启停日志的相关。

查看日志命令 ls -l logs

[root@localhost ~]# docker attach mytomcat
^C17-Mar-2024 02:46:20.073 INFO [Thread-5] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
17-Mar-2024 02:46:20.083 INFO [Thread-5] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["ajp-nio-8009"]
17-Mar-2024 02:46:20.089 INFO [Thread-5] org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]
17-Mar-2024 02:46:20.155 INFO [Thread-5] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
17-Mar-2024 02:46:20.157 INFO [Thread-5] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["ajp-nio-8009"]
17-Mar-2024 02:46:20.159 INFO [Thread-5] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
17-Mar-2024 02:46:20.161 INFO [Thread-5] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["ajp-nio-8009"]

启动一个docker容器与其中的tomcat,指定容器名称为mytomcat,然后通过docker attach命令占用了命令行,但是没有任何输出,即使在浏览器访问该tomcat也没有任何输出,此时的mytomcat容器已经附加了标准输出,只不过,其输出的是tomcat启停日志信息。通过ctrl+c结束Tomcat,此时可以看到 停止日志显示出来,但由于此时的tomcat已经停止,tomca容器已经退出,所以docker attach 命令也就随之结束了。

六、容器内进程查看命令

6.1docker top命令查看指定容器里面正在运行的进程

[root@localhost ~]# docker top mytomcat
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                2390                2370                0                   21:42               ?                   00:00:09            /usr/local/openjdk-8/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

七、容器日志命令

[root@localhost ~]# docker logs --help

Usage:  docker logs [OPTIONS] CONTAINER

Fetch the logs of a container

Aliases:
  docker container logs, docker logs

Options:
      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g.
                       "2013-01-02T13:23:37Z") or relative (e.g.
                       "42m" for 42 minutes)
  -n, --tail string    Number of lines to show from the end of
                       the logs (default "all")
  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g.
                       "2013-01-02T13:23:37Z") or relative (e.g.
                       "42m" for 42 minutes)

7.1查看所有日志

[root@localhost ~]# docker logs mytomcat

7.2查看指定时间范围内的日志

[root@localhost ~]# docker logs --since "2024-3-9" --tail=3 mytomcat   #自从指定的时间到现在最后三行日志

7.3查看指定时间外的日志

[root@localhost ~]# docker logs --until 50m mytomcat

7.4查看运行中的动态日志?

[root@localhost ~]# docker logs -f --tail=3 mytomcat
17-Mar-2024 02:46:20.157 INFO [Thread-5] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["ajp-nio-8009"]
17-Mar-2024 02:46:20.159 INFO [Thread-5] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
17-Mar-2024 02:46:20.161 INFO [Thread-5] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["ajp-nio-8009"]

八、容器启停命令

启动容器docker start命令

停止容器docker stop命令

强制停止容器docker kill 命令

重启容器docker restart命令

九、容器删除命令

docker rm -f强制删除

docker rm 删除已经停止的容器

十、容器与宿主机文件传递cp

在宿主机下 docker cp 容器名:源路径 目标路径

在容器内 docker cp 源路径 容器名:目标路径

[root@localhost ~]# docker exec -it mytomcat /bin/bash
root@f723aec41efc:/usr/local/tomcat# ls
BUILDING.txt	 README.md	conf	 native-jni-lib
CONTRIBUTING.md  RELEASE-NOTES	include  temp
LICENSE		 RUNNING.txt	lib	 webapps
NOTICE		 bin		logs	 work
root@f723aec41efc:/usr/local/tomcat# pwd
/usr/local/tomcat
root@f723aec41efc:/usr/local/tomcat# exit
exit
[root@localhost ~]# docker cp mytomcat:/usr/local/tomcat/logs ./
Successfully copied 28.7kB to /root/./
[root@localhost ~]# ls
anaconda-ks.cfg  logs
[root@localhost ~]# cd logs
[root@localhost logs]# ls
catalina.2024-03-17.log      localhost_access_log.2024-03-17.txt
host-manager.2024-03-17.log  manager.2024-03-17.log
localhost.2024-03-17.log

十一、提交容器为镜像

十二、导入导出镜像

十三、docker system 命令集

相关推荐
大霞上仙32 分钟前
Ubuntu系统电脑没有WiFi适配器
linux·运维·电脑
Karoku0661 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
为什么这亚子1 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
布值倒区什么name1 小时前
bug日常记录responded with a status of 413 (Request Entity Too Large)
运维·服务器·bug
阿尔帕兹2 小时前
构建 HTTP 服务端与 Docker 镜像:从开发到测试
网络协议·http·docker
。puppy2 小时前
HCIP--3实验- 链路聚合,VLAN间通讯,Super VLAN,MSTP,VRRPip配置,OSPF(静态路由,环回,缺省,空接口),NAT
运维·服务器
颇有几分姿色2 小时前
深入理解 Linux 内存管理:free 命令详解
linux·运维·服务器
光芒再现dev3 小时前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
AndyFrank3 小时前
mac crontab 不能使用问题简记
linux·运维·macos
ZHOU西口3 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac