容器操作
查看容器:
docker ps --查看运行中的容器
docker ps -a --查看所有容器
docker ps -l --查看最后一次运行的容器
docker ps -f status=exited --查看停止的容器
docker ps -a -f =ancestor=busybox --只列出busybox这个镜像的容器
选项:
-a -- 查看所有容器(docker ps -a)
-f --添加过滤条件(docker ps )
-q --只列出容器id
删除容器:
docker rm
案例:
docker rm $(docker ps -a -q) -- 删除所有容器
docker rm $(docker ps -a -q -f =ancestor=busybox) --删除busybox镜像的所有容器
创建新容器
创建后容器的状态处于停止状态,可以使用docker start启动它
docker create -di hello-world
启动容器
docker start hello-world
停止容器:
docker stop 容器ID
重启容器:
docker restart 容器ID
创建并启动新容器
docker run
介绍:
等价于先执行docker create,再执行docker start
docker run的背后逻辑:检查本地有无此镜像,如果没有就先下载,启动容器,分配文件系统,从宿主机桥接一个虚拟接口到容器,从地址池配置一个ip给容器,执行用户指定的应用程 序,执行完毕后容器终止。
一个镜像可以启动多个容器,且每次启动都会给一个默认的名字,可以使用--name设置名字
案例:
docker run 镜像名 --创建运行容器
docker run 镜像名 --name 容器名 --创建运行容器,并指定名称
docker run -it 镜像名 --创建运行容器,进入命令行(伪终端),一旦退出容器就停止(相当于关机)。
docker run -id 镜像名 --创建运行容器,守护式方式运行(后台)
docker run -p ip:hostPort:containerPort 镜像名 -- 把主机端口hostPort映射到容器端口containerPort
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 --privileged=true centos:7 --数据卷(指定地址)
docker run -di -v myvolume1:/usr/local/myhtml --name=mycentos3 --privileged=true centos:7 --数据卷(指定数据卷名称)
docker run -di -p 5556:5000 --name registry2 --link registry1:REG1 registry --建立容器连接
选项:
-d 后台运行(如果后台启动后什么也不干,也不启动后台进程,这个后台容器就停止了)
-i 运行容器
-t 命令行模式,容器启动后进入命令行模式
-it 交互模式
--name 给容器起个名字
-p 端口映射,第一个是通过地址访问的端口号的端口,第二个是本地主机端口号。可以使用多个-p做多个端口映射
-v 目录挂载,我们可以在创建容器时,将宿主机的目录与容器内的目录进行映射,这样就可以通过修改宿主机的某个目录从而影响容器
--link 让容器之间安全的进行交互
退出当前容器:
exit
登录守护式容器
docker exec -it 容器名(或者id) /bin/bash
附加到容器:(如果容器已经停止,则需要先启动容器)
docker attach 容器ID
拷贝文件到容器:
docker cp 需要拷贝的文件或目录 容器名称:容器目录
容器文件拷贝到宿主机:
docker cp 容器名称:容器目录 需要拷贝的文件或目录
查看容器各种数据:
docker inspect 容器名称(容器ID)
导出容器:(用来备份)
docker export hello-world >hello-world.tar
导出的容器导入到镜像:
cat hello-world.tar|docker import - fan/hello-world:t1
查看容器端口映射:
docker port mysql
容器迁移:
非常规手段,一个运行了很长时间的Container,应该是可以 restart 、甚至 kill 后再重新 run 也不影响既有功能的。 任何有依赖的状态,都应该考虑持久化、网络化,而不能单纯地保存在本地文件系统中。
适用于已经上线,且状态复杂、重新启动不能正常工作的服务。容器迁移的包包含镜像
步骤:
1、导出一个容器到一个文件
docker export hello-world >hello-world.tar
2、导出的容器导入到镜像,import后得到的是一个镜像,相当于执行了comit操作
cat hello-world.tar|docker import - fan/hello-world:t1
3、启动容器
docker run fan/hello-world:t1