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

相关推荐
Jacket Li10 分钟前
Kubeadm 安装 Kubernetes 高可用集群 v1.30.0
云原生·容器·kubernetes
战族狼魂26 分钟前
CentOS 上安装各种应用的命令行总结
linux·运维·centos
学Linux的语莫1 小时前
ansible变量
linux·运维·服务器·ansible
爱吃喵的鲤鱼1 小时前
Linux——文件系统清尾、动静态库
linux·运维·服务器
泰山小张只吃荷园1 小时前
期末Python复习-输入输出
java·前端·spring boot·python·spring cloud·docker·容器
最数据1 小时前
Linux或者Docker中时区查询和修改(差8小时问题)
linux·运维·服务器·docker·.net
与君共勉121382 小时前
Jenkins-Ansible 插件相关用法
linux·运维·ansible·jenkins
Ch.yang2 小时前
【Docker】Centos7 Jenkins 踩坑笔记
docker
m0_519523102 小时前
Linux——环境变量
linux·运维·服务器
ShangCode2 小时前
Linux系统三剑客之AWK
linux·运维·awk