DOCKER的常用命令
镜像相关命令
镜像结构底层其实是UnionFS,即联合文件系统,有多层文件系统构成,我们再执行下载时可以观察到,镜像实质是按层进行的下载,分层结构的目的是为了共享资源。
1、查看镜像相关命令:
- 查看镜像: docker image ls 等价于 docker images
- 查看所有镜像:docker images -a
- 查看镜像image iD: docker images -q
- 查看所有镜像image ID :docker images - qa
- 查看镜像摘要信息:docker images - -digests
- 查看镜像完整信息:docker images --no-trunc
2、镜像移除相关命令:
- 移除特定镜像:eg.移除ngix , docker rmi nginx
- 强制移除镜像:docker rmi -f nginx
- 删除多个镜像(用空格连接):docker rmi -f ngix hello-world
- 查询所有image ID号并完成批量删除镜像:docker rmi -f $(docker images -qa)
3、镜像搜索相关命令:
- HUB上搜索镜像:docker search 镜像 eg. docker search tomcat (返回字段信息:名称,描述,星级,是否官方,是否自动构建)
- HUB上搜索星级30星以上的镜像:docker search -s 30 tomcat
- HUB上搜索星级30星以上的镜像并展开详细描述:docker search -s 30 --no-trunc tomcat
- HUB上搜索星级30星以上且属于自动构建的镜像并展开详细描述:docker search -s 30 --no-trunc --automated tomcat
4、镜像下载相关命令:
- docker pull 镜像:版本号 e.g. docker pull tomcat等价于docker pull tomcat:lastest
5、镜像提交相关命令:
- docker commit -m=‘描述信息’ -a=‘作者’ 容器ID 要创建的目前镜像名:[标签名tag] 作用:提交容器副本(即修改后的容器),使之成为一个新的镜像
e.g.docker commit -m=‘tomcat without docs’ -a=‘dongminghao’ ccda50862dae test/mytomcat
容器相关命令
1、交互式虚拟伪终端方式新建并运行一个容器:
- docker run -it imageid
- 参数说明: -I:交互式 -t :终端方式 - -name:用来指定容器名称 -P 随机端口映射 -p:指定端口映射 (-p的四种方式:1、ip:hostPort:containerPort 2、ip:containerPort 3、hostPort:containerPort 4、containerPort)
- e.g. docker run -it -p 8888:8080 tomcat 8888是docker对外端口,宿主机访问时用的端口 8080 是tomcat的对外端口
2、守护式启动一个容器(非交互式):
- docker run -d imageid 后台方式运行,容器运行的命令如果不是一直挂起的命令(top,tail),就会自动退出
3、查看容器:
- docker ps
- 参数说明:
- -a:列出当前所有正在运行的容器,和历史上运行过的容器
- -l:显示最近创建的容器
- -n:显示最近n个创建的容器
- -q:显示容器编号
- –no-trunc:不截断输出(显示详细信息)
4、退出容器(交互式退出):
- 方式一:exit(关闭并退出容器)
- 方式二:control +p+q(退出但并不关闭容器)
5、启动容器:
- docker start containerID , e.g:docker start 8074ed6fc954
6、重启容器:
- docker restart containerID
7、停止容器:
- docker stop containID
8、强制停止容器:
- docker kill containID
9、删除已停止容器:
- docker rm containID
10、一次性删除所有容器:
- docker rm -f $(docker ps -a -q) 或者 docker ps -a -q | xargs docker rm
11、查看docker日志:
- docker logs -f -t —tail n containerID
- 参数说明:
- -t 是加入时间戳
- -f 跟随最新的日志打印
- –tail 数字 显示最后几条
12、查看docker容器内的进程:
- docker top containerID
13、查看docker容器内部细节:
- docker inspect containerID 以json串的形式返回容器内部细节
14、重新进入正在运行但是退出的交互式容器(前提是以control+P+Q的方式退出的容器):
- 方式一:进入容器交互式 docker attatch containerID
- 方式二:进入容器并在容器中执行相关操作并退回宿主机 docker exec -it containerID ls -l /tmp
- 其中:docker exec -it containerID /bin/bash 等价于 docker attatch containerID
15、将容器内数据拷贝到主机(宿主机上运行):
- docker cp 容器ID:容器路径 目的主机路径
容器数据卷相关理念:
目的即实现数据持久化,完成数据的迁移与同步,即容器之间的资源共享。
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过UnionFileSystem提供一些用于持续存储或共享数据的特性。
卷的目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
特点:
1、数据卷可在容器间共享或重用数据
2、卷中的更改可以直接生效
3、数据卷中的更改不会包含在镜像的更新中
4、数据卷的生命周期一直持续到没有容器使用它为止
容器数据卷相关命令:
1、添加容器数据卷:
- 方式一:命令添加方式 docker run -it -v /宿主机的绝对目录:/容器的内目录 镜像名
- eg. docker run -it -v /Users/admin/mydataVolumn:/dataVolumnContainer centos
-
通过inspect命令可以查询到相关信息
"Type": "bind", "Source": "/Users/admin/mydataVolumn", "Destination": "/dataVolumnContainer", "Mode": "ro", "RW”:true, "Propagation": "rprivate"
-
备注:此时宿主机与容器的数据卷已经同步共享,随便修改宿主机或容器上的数据卷内容,两者都可以保持同步内容更新;容器在停止退出后,主机修改文件,当重新运行容器时,文件仍可以同步到容器中。
-
- e.g. docker run -it -v /Users/admin/mydataVolumn:/dataVolumnContainer:ro centos
-
通过inspect命令可以查询到相关信息
"Type": "bind", "Source": "/Users/admin/mydataVolumn", "Destination": "/dataVolumnContainer", "Mode": "ro", "RW": false, "Propagation": "rprivate"
-
备注:容器内目录只读不可写 read-only操作
-
- eg. docker run -it -v /Users/admin/mydataVolumn:/dataVolumnContainer centos
- 方式二:DockerFile添加添加方式
-
步骤一:根目录下新建mydocker并进入
-
步骤二:在Dockerfile中使用VOLUME指令类给镜像添加一个或多个数据卷
VOLUME语法规则: VOLUME[“/dataVolumnContainer1”,“/dataVolumnContainer2”,“/dataVolumnContainer3”]
-
步骤三:FIle构建 构建dockerfile文件,文件内容如下:
#volume test FROM centos VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] #定义两个数据卷 CMD echo "finished,---------success1" CMD /bin/bash
-
步骤四:build生成镜像 获得一个新镜像 dongminghao/centos
docker build -f /Users/admin/mydocker/dockerfile -t dongminghao/centos .-
运行后,提示信息如下:
Sending build context to Docker daemon 2.048kB Step 1/4 : FROM centos ---> 67fa590cfc1c Step 2/4 : VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] ---> Running in 8b243d47a2a6 Removing intermediate container 8b243d47a2a6 ---> 442b5f347138 Step 3/4 : CMD echo "finished,---------success1" ---> Running in 5d2a3639c3de Removing intermediate container 5d2a3639c3de ---> b8cd1b9177dc Step 4/4 : CMD /bin/bash ---> Running in 4ca239604d34 Removing intermediate container 4ca239604d34 ---> 88e38f8371d2 Successfully built 88e38f8371d2 Successfully tagged dongminghao/centos:latest
-
结果:
REPOSITORY TAG IMAGE ID CREATED SIZE dongminghao/centos latest 88e38f8371d2 34 seconds ago 202MB
-
-
步骤五:运行新镜像,并进入容器
docker run -it 88e38f8371d2
通过ls 命令查看通过dockerfile生成的数据卷 dataVolumeContainer1与dataVolumeContainer2 -
步骤六: docker inspect containerID 可以查看宿主机默认的数据卷存放路径 : /var/lib/docker/volumes/ee813e32423ab0ccaf71d446218dfe143638a70520f5cbf02b5411b58f828e1b/_data
- LINUX系统直接查询上述返回的数据卷路径即可,即可查到宿主机上的数据卷
- MAC系统会出现路径不存在问题,解决方案如下:
- (1):screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty 加回车
- (2) 再执行 cd /var/lib/docker/volumes/ee813e32423ab0ccaf71d446218dfe143638a70520f5cbf02b5411b58f828e1b/_data 即可进入相应的数据卷中,这时宿主机与容器的数据卷已经实现同步,与方式一效果相同
- 备注:
如果需要干掉这个screen,按ctrl+a + k,最后按y确认即可以kill掉这个screen了;
如果只是暂时退出这个screen,下次再进去,使用ctrl+a + d,而如果需要再次进入的时候应当使用screen -dr,否则使用screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty再进去会是一片乱码
-
内容总结来源
[1] 尚硅谷docker容器讲解视频