目录
1、docker
1.1 启动docker服务
systemctl start docker.service
systemctl enable docker.service(开机启动)
1.2 启动新容器
(创建一个新的容器并运行一个命令):docker run IMAGE [COMMAND] [ARG...]
- IMAGE 启动的镜像
- COMMAND 命令
- ARG 参数
docker run echo 'hello world'
docker run learn/tutorial echo 'hello world'(run启动容器,运行echo命令)
docker run learn/tutorial apt-get install -y ping(在容器中安装ping命令,此时在容器的可写层执行)
docker run learn/ping ping www.google.com
1.3 进入容器
1.3.1 使用docker attach进入Docker容器
Docker提供了attach命令来进入Docker容器。接下来我们创建一个守护态的Docker容器,然后使用docker attach命令进入该容器。
$ sudo docker run -itd ubuntu:14.04 /bin/bash
然后我们使用docker ps查看到该容器信息,接下来就使用docker attach进入该容器
$ sudo docker attach 44fc0f0582d9
但使用该命令有一个问题。当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。因为这个原因,所以docker attach命令不太适合于生产环境,平时自己开发应用时可以使用该命令。
1.3.2 其他方法:
- 使用SSH
- 使用nsenter
- 使用exec
- $ sudo docker ps
- $ sudo docker exec -it 775c7c9ee1e1 /bin/bash
1.4 启动交互式容器:
docker run -i -t IMAGE /bin/bash
- -i --interactive=ture|false 默认是false(告诉docker的守护进程,为容器始终打开标准输入)
- -t --tty=ture|false 默认是false(告诉docker为创建的容器分配一个tty终端(伪输入终端),这样,新创建的容器才能提供一个交互式的shell)
- -d: 后台运行容器,并返回容器ID(不会进入终端界面)
后台启动的容器,使用ps查看时发现已经退出,这是docker机制的问题:后台进程模式运行一个容器,导致docker前台没有什么运行的应用,docker会立即自杀(因为它觉得没有什么事可做了),所以,docker容器后台运行,就必须有一个前台进程。
docker run -it centos(创建一个基于centos镜像的容器,进入docker里的centos的根目录下的一个终端界面)
centos IMAGE ID:88ec626ba223
docker run -it 88ec626ba223(以这个ID为模板,生成一个容器,会进入docker里的centos的根目录下的一个终端界面)
docker run -d centos /bin/sh -c "while true;do echo hello zzyy;sleep 2;done"(后台一直在运行,可以通过docker ps 和 docker logs 查看)
- 退出:exit
- 使用ctrl+p+q可以在不关闭容器的情况下退出,即回到宿主机
1.5 自定义容器名:
docker run --name=container01 -i -t ubuntu /bin/bash
docker run -it --name centos_base centos(创建一个基于centos镜像的名称为centos_base的容器)
docker run --name mynginx -d nginx:latest(使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。)
1.6 重新启动停止的容器:
docker start -i container01
1.7 删除已经停止的容器:
docker rm 53ccbc3188b4
1.8 基本操作:
参考https://www.runoob.com/docker/docker-command-manual.html
docker version(查看版本)
docker --help(帮助)
docker info(概要信息)
docker ps (ps查看当前运行的容器)
docker ps -a(查看所有容器---鲸鱼背上有哪几个容器)
docker ps|grep 15663 (查看指定容器)
# 15663是端口
docker logs 0742 (查看指定容器的日志)
# 0742是容器ID
docker ps -l (查看最近创建的有哪些容器)
docker ps -q(静默模式,只显示容器编号。)
docker ps -n 3(查看最近3个容器)
docker start 容器ID
docker stop 容器ID
docker kill 容器ID(强制停止)
docker rm -f $(docker -a -q)(一次性删除多个容器)
docker -a -q | xargs docker rm(一次性删除多个容器)
docker start containername
重新启动一个结束的容器,containername为查看容器时最后一列NAME
docker attach containername
进入一个容器(已启动但未进入或者退出没有结束状态的容器,docker ps 中所列所有容器均是此状态)
docker logs -f -t -tail 容器ID(查看容器日志)
-f 加入时间戳
-t 跟随最新的日志打印
-tail 数字 显示最后多少条
docker top 容器ID(查看容器内运行的进程)
docker inspect 容器ID(查看容器内部细节,获取容器/镜像的元数据)
(参数为容器的名字或唯一ID)
docker inspect 53ccbc3188b4
docker inspect container01
(进入正在运行的容器并以命令行交互)
# docker attach 容器ID(直接进入容器启动命令的终端,不会启动新的进程)进去以后再做
# ls -l /tmp
# docker exec -t 容器ID ls -l /tmp(在容器中打开新的终端,并且可以启动新的进程)直接做
docker exec -t 容器ID /bin/bash 等同于docker attach 容器ID
总结:exec隔山打牛,直接得到结果
(从容器内拷贝文件到主机上)
docker cp 容器ID:容器内文件路径 主机路径
退出
Ctrl-q + Ctrl-p
退出不结束(连续按Ctrl+q和Ctrl+p)
在docker内exit
结束退出, 退出的容器还可以再次进入
1.9 docker run --rm
清理(-rm)
即使在容器退出后,默认情况下容器的文件系统仍然存在。这使调试更容易(因为您可以检查最终状态),并且默认情况下保留所有数据。但是如果你正在运行短期的 前台 进程,这些容器文件系统可能真的堆积如山。相反,如果您希望Docker 在容器退出时自动清理容器并移除文件系统,则可以添加该--rm
标志:
注意:设置--rm
标志时,当容器被移除时,Docker 也会删除与容器关联的卷。这与运行相似docker rm -v my-container
。只有未指定名称的卷才会被删除。例如,与docker run --rm -v /foo -v awesome:/bar busybox top
,/foo
将被删除,但/bar
不会。
使用-rm标志运行容器对于那些用于非常短暂而只是为了完成某些事情的容器是有好处的,例如,在容器内编译应用程序,或者只测试它工作的东西,然后你知道它是一个短暂的容器并告诉你的Docker守护进程一旦运行完毕,擦除与之相关的所有内容并保存磁盘空间.
2、images:
参考:https://www.cnblogs.com/quanxiaoha/p/10542278.html
2.1 基础命令
# 列出容器
docker ps
# 显示所有的容器,包括未运行的。
docker ps -a
docker images(查看有哪些镜像)
REPOSITORY:镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
# 下载镜像文件,层级式文件系统
docker pull learn/tutorial
# 将镜像保存到docker HUb上
docker push learn/ping
# 运行基础镜像:
sudo docker run -it f61366ed169e /bin/bash
# 利用容器编号提交,相当于创建了个新的镜像
docker commit 6982a948422 new_images:v1
# 将镜像comments_classification:v1保存至本地comments_classification.tar:
sudo docker save -o comments_classification.tar comments_classification:v1
2.2 查找镜像
docker search XXX(在docker hub中查找XXX镜像)
docker search -s 30 XXX(筛选点赞数大于30的XXX镜像)
2.3 删除镜像
docker rm 67d63ab86986(先删除容器)
# 删除镜像,其中[image]可以是image ID
docker rmi [image](才能删除镜像)
docker image rm [image]
docker rmi -f 镜像名1:TAG 镜像名2:TAG # 强制(-f)删除多个
docker rmi -f $(docker images -qa) # 删除全部
# 同一个镜像拥有多个标签时,执行 docker rmi 命令,只是会删除了该镜像众多标签中指定的标签而已,并不会影响原始的那个镜像文件。
2.4 清理镜像
docker image prune
子命令有:
-a, --all: 删除所有没有用的镜像,而不仅仅是临时文件;
-f, --force:强制删除镜像文件,无需弹出提示确认;
注意点:
1. 删除前需要保证容器是停止的 stop(除非 -f 删除)
2. 需要注意删除镜像和容器的命令不一样。 docker rmi ID ,其中 容器(rm) 和 镜像(rmi)
3. 顺序需要先删除容器