docker | 简单使用

876 阅读3分钟

一、容器命令

1、容器理解
image文件生成的容器实例,本身也是一个文件,称为容器文件。
也就是说,一旦容器生成,就会同时存在两个文件: image文件和容器文件。
而且关闭容器并不会删除容器文件,只是容器停止运行而已。

hello-world容器输出hello docker.....之后,hello world就会停止运行,容器自动终止。
有些容器不会自动终止,因为提供的是服务.
对于那些不会自动终止的容器,必须使用docker container kill/stop 命令手动终止。

每条命令都可以docker command --help
查看该命令的作用和参数
2、容器停止and删除
停止所有的container,这样才能够删除container:
docker stop $(docker ps -a -q)

如果想要删除所有container的话再加一个指令:
docker rm $(docker ps -a -q)
3、容器运行
docker run -it ubuntu:15.10 /bin/bash
-d:守护进程,也就是后台方式运行,只有在父进程即docker进程退出的时候才会去把容器退出。

-t:在新容器内启动一个终端,tty: teletype终端,即:当前操作界面
如果只是-t的话,可以进入一个伪终端,但是输入命令是没反应的,也就是容器是收不到外部的输入的
-i:允许对容器内的标准输入进行交互,也就是可以对容器进行输入操作;
只是-i的话,宿主机可以对容器进行输入命令,容器也会正常响应,但是没有起一个容器的终端,而是在宿主机直接输入命令到容器中

-it:进入一个可以交互的伪终端,产生的效果就像是进入了另一台主机似的。

-itd:启动一个后台的容器,就算这个容器没有在运行任务也不会挂掉(是因为启动了终端)
如:go run -idt alpine
docker exec -it  2d34 /bin/sh	进入容器内
如果只是docker run -d alpine,容器会马上挂掉,因为没有任务在运行

docker run alpine 可以+command
如:docker run alpine ls,可以输出列表情况
那么docker run -it alpine /bin/sh有无必要?这里把/bin/sh去掉也是可以正常交互的
或者对于有多个类型shell脚本的容器来说,/bin/sh只是指定使用shell的类型而已

--rm:容器停止后自动删除
--restart=always:容器挂了后自动重启
docker ps -a --no-trunc  查看容器完整信息
docker ps -aqf 'name=123'	根据容器名,获取容器id
docker attach :连接到正在运行中的容器。
docker inspect : 获取容器/镜像的元数据,就是详细的配置信息等
docker restart :重启容器
4、进入容器内部and退出
进入后台运行的容器内
docker attach 容器名/id,但是exit的话,会把容器挂掉

docker exec:Run a command in a running container
也有-d -i -t
docker exec container_id command
docker exec -it 775c7c9ee1e1 /bin/bash
//-d在后台执行一个进程。可以看出,如果一个命令需要长时间进程,使用-d参数会很快返回。
//如果不使用-d参数,由于命令需要长时间执行,docker exec会卡住,一直等命令执行完成才返回。 

临时退出一个正在交互的容器的终端,而不终止它
按 Ctrl-p Ctrl-q。如果按 Ctrl-c 往往会让容器内应用进程终止,进而会终止容器。

二、镜像命令

1、删除镜像

删除images,通过image的id来指定删除谁
docker rmi <image id>	

想要删除untagged images,也就是那些id为<None>的image的话可以用
docker rmi $(docker images | grep "none" | awk '{print $3}') 

要删除全部image的话
docker rmi $(docker images -q)

2、重命名镜像

docker  tag  IMAGEID(镜像id)  REPOSITORY:TAG(新仓库名:标签)

会生成一个新的镜像,和原镜像同一个 ID ,没有容器引用的镜像,就可以直接删除。

docker rmi REPOSITORY:TAG

三、容器rootfs(根文件系统)命令

1、docker commit :从容器创建一个新的镜像。

docker commit container_id  iamge_name:tag;

2、docker cp :用于容器与主机之间的数据拷贝。

四、查看docker信息

docker stats:查看容器cpu\内存占用等情况

docker logs container_name\id:查看容器日志

docker version:查看docker版本信息

docker info:查看docker系统消息

五、其他

查看镜像为alpine:latest的容器的id
docker ps -a | awk '/alpine:latest/{print $1}'

删除镜像为alpine:latest的容器
docker rm $(docker ps -a | awk '/alpine:latest/{print $1}')

删除容器名包含‘container’的容器
docker rm $(docker ps -a |grep container | awk '{print $1}')