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

相关推荐
HaSaKing_7211 分钟前
【实战记录】Docker Compose 单机部署 EMQX 3 节点集群(5.8.8 社区版)完整踩坑与解决方案
docker·容器·eureka
一周困⁸天.2 分钟前
GitOps 详解与工具链全解析
linux·运维·devops
weixin_462446233 分钟前
【原创实践】使用 Docker 在 MySQL 容器中批量导出所有数据库
数据库·mysql·docker
l1t3 分钟前
docker 启动 oracle容器报1521: bind: address already in use错误的解决
docker·oracle·容器
叫致寒吧4 分钟前
Docker资源限制 与数据卷
linux·运维·docker
小宇的天下8 分钟前
Synopsys Skipper 核心功能与使用指南(结构化总结)
运维·服务器
苹果醋38 分钟前
24.记录Vue项目iview组件日期获取时间少一天
java·运维·spring boot·mysql·nginx
丁丁丁梦涛8 分钟前
nginx在多层服务器代理接口地址的应用
运维·服务器·nginx
有谁看见我的剑了?10 分钟前
ESXI 虚机机硬盘类型和硬盘模式学习
运维·学习·云计算
GISer_CV攻城狮11 分钟前
MapLibre/Martin 地图服务器docker化安装部署
运维·服务器·docker