一、容器基础
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