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 命令集

相关推荐
TO_ZRG5 分钟前
使用jenkins打包unity工程
运维·unity·jenkins
liujiangxu11 分钟前
jenkins声明式流水线语法详解
运维·自动化·jenkins
攸攸太上24 分钟前
Docker学习
java·网络·学习·docker·容器
Sylvan Ding32 分钟前
Docker+PyCharm远程调试&环境隔离解决方案
docker·容器·pycharm
guoguoqiang.1 小时前
我与Linux的爱恋:命令行参数|环境变量
linux·运维·服务器·c语言·学习
客观花絮说2 小时前
DSC+DW实时+异步搭建部署
运维
x66ccff2 小时前
【linux】4张卡,坏了1张,怎么办?
linux·运维·服务器
_道隐_3 小时前
如何在Windows上安装Docker
windows·docker
我命由我123453 小时前
GPIO 理解(基本功能、模拟案例)
linux·运维·服务器·c语言·c++·嵌入式硬件·c#
kka杰4 小时前
Linux 进程3
linux·运维·服务器