2.docker容器

时间:2022-02-08 16:46:00

docker run 镜像,生成镜像容器,并运行

有以下参数

--name="new name",为容器指定一个新名字

-d:后台运行容器,返回容器id,即启动守护式容器

-i:以交互模式运行容器,通常与-t一起使用

-t:为容器重启输入一个伪输入终端,通常与-i一起使用

-P:随机端口映射

-p:指定端口映射

2.docker容器

 此时我便进入了docker下的centos

docker ps,查看当前正在运行的容器

docker ps -a,查看所有运行过的容器

docker ps -l,查看上一次运行过的容器

docker ps -n,查看上n次运行过的容器

docker ps -q,只显示id

退出容器,两种方式

exit,容器停止退出

Ctrl+p+q,容器不停止退出

docker start 容器名/id,启动容器

docker restart 容器名/id,重新启动容器

docker stop 容器名/id,温柔停止容器(类似于关机)

docker kill 容器名/id,强制停止容器(类似于直接拔电源)

docker rm -f 容器名/id,删除某个容器

一次性删除多个容器,docker rm -f $(docker ps -a -q), 或者 docker -a -q | xargs docker rm

----------------------重要-----------------------

首先docker run -d 镜像,会后台运行,不会进行交互式

2.docker容器

返回一串id,说明容器启动过,但是

2.docker容器

查看正在运行的容器,却没有显示centos。因为我静悄悄的来又静悄悄的走了

原因:docker容器后台运行,就必须要有一个前台进程。容器运行的命令如果不是那些一直挂起的命令(比如top,tail),就是会自动退出的。

这个是docker的机制问题,比如web容器,我们一Nginx为例,正常情况下,我们配置启动响应服务,只需要启动响应的service即可,例如service nginx start。

但是这样做,nginx为后台进城模式运行,导致docker前台没有运行的应用。这样的容器后台启动后会立即自杀,因为它觉得没有事可做了。

所以最佳的解决方案是将要运行的程序以前台进程的形式运行。

查看容器日志

docker logs -f -t  --tail 数字 容器id,,

-t:加入时间戳

-f,跟随最新的日志打印

--tail 数字:显示最后多少条

查看容器内运行的进程

docker top 容器id

查看容器内部的细节

docker inspect 容器id

2.docker容器

进入正在运行的容器并以命令行交互

之前说过,ctrl+p+q,可以不停止容器退出,那么如果我想再次进入呢?

2.docker容器

docker attach 容器id

2.docker容器

在不进入容器的前提下进行操作

docker exec -t 容器id 相应的操作

2.docker容器

在外面对容器进行操作

2.docker容器

两者的区别就是,一个进入容器操作,不会启动新的进程。另一个是直接在容器当中打开新的终端,启动新的进程

将数据从容器内部拷贝到主机上

比如容器我不想要了,但是里面的数据我需要保留,因此需要将数据从容器里面拷贝到主机上

docker cp 容器id:容器路径 目的主机路径

运行tomcat

docker run -it -p 8888:8080 tomcat,-p是自己指定端口

2.docker容器

2.docker容器

docker run -it -P tomcat,随机指定端口

2.docker容器

2.docker容器