容器命令

发布时间 2023-09-23 15:28:55作者: lxd670

1.关系

Docker 面向对象
镜像
容器 对象

2.查看容器

docker ps -aq
	  			-a #列出正在运行+历史运行过的容器
    			-q #只列出容器id
    			-l #显示最近创建的容器
         	-n=3 #列出n个最近创建的容器

3.启动容器

docker run [参数] 镜像名[:版本] 执行的命令
参数:
	-it    # 使用交互命令进入容器(前台交互式运行)
		-i: 以交互式方式运行容器
		-t: 为容器分配一个伪终端
	--name="centos_test"  # 容器名称,用来区分容器,唯一
	--rm 			#容器启动后,执行命令/程序完成后就销毁
	-d        #后台运行容器并返回容器ID,即守护式容器(后台运行)
	-p        #指定端口
    -p ip:主机端口:容器端口
    -p 主机端口:容器端口
    -p 容器端口
    -P      #随机端口
  -e 设置环境变量
  -v 数据卷
	
如:
docker run -d --name tomcat7 -p 8080:8080 tomcat /bin/bash

启动前台交互式运行

docker run -it 镜像名:版本 /bin/bash

启动守护式容器

大部分场景下,我们希望docker的服务是在后阳台运行的,通过-d指定后台运行

docker run -d 镜像名:版本

注意

docker容器后台运行,必须有一个前台进程

如果运行的不是一直挂起的命令(如top、cat、tail),就会自动退出,这就是docker的机制

后台运行centos7
docker run -d centos:7
使用docker ps -a查看,容器已经退出

run和start区别

docker run 只在[第一次运行时]使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可。
docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。

4.启动容器

STATUS 的状态Exited变为Up

docker start 容器ID/名字 # 启动指定容器
docker start $(docker ps -aq) # 启动所有容器

5.停止容器

优雅停止容器

STATUS 的状态Up状态变为Exited

docker默认会允许容器中的应用程序有10秒的时间用以终止运行,在docker stop命令执行的时候,会先向容器中PID为1的进程发送系统信号SIGTERM,然后等待容器中的应用程序终止执行,如果等待时间达到设定的超时时间,或者默认的10秒,会继续发送SIGKILL的系统信号强行kill掉进程。

docker stop 容器ID/名字 # 停止指定容器
docker stop $(docker ps -aq) # 停止所有容器

强制停止容器

杀掉一个运行中的容器。

默认情况下,docker kill命令不会给容器中的应用程序有任何等待的机会。它会直接发出SIGKILL的系统信号,以强行终止容器中程序的运行。

docker kill 容器ID/名字 # 停止指定容器

6.删除容器

删除已经停止的容器

docker rm 容器ID/名字	# 删除指定容器(离线状态)
docker rm $(docker ps -aq) # 删除所有的容器(离线状态)

删除正在运行的容器

docker rm -f 容器ID/名字	# 强制删除指定容器(运行状态)
docker rm -f $(docker ps -aq) # 强制删除所有的容器(运行状态)

7.进入容器

exec

docker exec [参数] 容器ID/名字 /bin/bash

参数
  -d	在后台运行命令
  -i	即使没有附加也保持 STDIN 打开,和 -t 配合
  -t	进入容器的 CLI 模式
  -e	设置环境变量
  --env-file	读入环境变量文件
  -w	需要执行命令的目录
  -u	指定访问容器的用户名

attach

docker attach 容器ID/名字

exec和attach区别

attach直接进入容器终端,不会启动新的进程,用exit退出会导致容器停止
exec在容器中打开新的终端,并且可以启动新的进程,用exit退出不会导致容器停止
	一般用-d后台启动的程序,使用exec进入容器

8.退出容器

exit退出

run进入容器,exit退出,容器停止

# 现在在容器中
root@43ad0be59cf3:/usr/local/tomcat/webapps/ROOT# exit
exit
[root@ai-test-ai ~]

ctrl+p+q退出

run进入容器,ctrl+p+q退出,容器不停止

Mac: control+p+q

~ docker exec -it ccc /bin/bash
[root@09bf640491c0 /]# read escape sequence

9.查看容器内进程

docker top [容器ID/名字]

10.查看容器内部信息

在docker网络和网桥的时候经常用到

docker inspect [容器ID/名字]

11.查看容器日志

docker logs [容器ID/名字]

12.拷贝容器和宿主机传文件

主要对资料进行备份什么的

# 容器复制到宿主机
docker cp [容器ID/名字]:[路径path] /root
# 宿主机复制到容器
docker cp /root/a.txt [容器ID/名字]:[路径path]

13.导入和导出容器

备份整个容器

适用场景:主要用来制作基础镜像,比如从一个ubuntu镜像启动一个容器,然后安装一些软件和进行一些设置后,使用docker export保存为一个基础镜像。然后把这个镜像分发给其他人使用,作为基础的开发环境。(因为export导出的镜像只会保留从镜像运行到export之间对文件系统的修改,所以只适合做基础镜像)

注意事项:
	会丢弃历史记录和元数据。
	启动export与import命令导出导入的镜像必须加/bin/bash或者其他/bin/sh,否则会报错。

export

导出一个容器快照

# 导出容器的内容留做一个tar归档文件
docker export 容器ID > 文件名.tar

~ docker export 95aa7fc4eef2 > test_centos7.tar
~ ls
install.sh  md  nginx  p.py  test_centos7.tar

import

导入一个容器快照到本地镜像库

# 从tar包中的内容创建一个新的文件系统,再导入作为镜像
cat 文件名.tar | docker import - [镜像用户/镜像名:镜像版本]
# 等同命令
docker import [文件名.tar] [镜像用户/镜像名:镜像版本]

~  cat test_centos7.tar | docker import - nkippis/centos:670
~  docker images
REPOSITORY           TAG       IMAGE ID       CREATED          SIZE
nkippis/centos       670       8cae7c50e48f   23 seconds ago   204MB

14.commit

docker镜像层都是只读的,容器层是可写的

当容器启动时,一个新的可写成被加载到镜像的顶部

这一层通常被叫容器层,容器层下的都被叫镜像层

commit把容器变成一个新的镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID [新的镜像名]:[版本号]
选项说明:
 -a:提交的镜像作者
 -c:使用dockerfile指令来创建镜像
 -m:提交时的说明文字
 -p:在commit的时候,将正在运行的容器暂停
 
适用场景:主要作用是将配置好的一些容器复用,再生成新的镜像。

commit是合并了save、load、export、import这几个特性的一个综合性的命令,它主要做了:
将container当前的读写层保存下来,保存成一个新层
和镜像的历史层一起合并成一个新的镜像
# 查看容器
~ docker ps
CONTAINER ID   IMAGE     COMMAND      CREATED          STATUS          PORTS                                       NAMES
3f66378f7dae   centos:7  "/bin/bash"  14 seconds ago   Up 13 seconds   lucid_wright

# 在容器内部安装vim
[root@3f66378f7dae /]# yum install vim

# 安装完后退出容器
[root@3f66378f7dae /]# exit

# 生成镜像
~ docker commit -m='add vim centos' -a='lxd670' 3f66378f7dae nkippis/centos_vim:7.1
sha256:ca5adee0ac8536e199406284b2956cdfda5fb6672f0ce1cd89ac2e1e5a7cb607

# 查看镜像
~ docker images
REPOSITORY           TAG       IMAGE ID       CREATED         SIZE
nkippis/centos_vim   7.1       ca5adee0ac85   7 seconds ago   436MB
centos               7         eeb6ee3f44bd   11 months ago   204MB