简介
docker的学习,基本概念,以及镜像命令和容器命令的使用
docker
docker的基本概念
一次镜像,处处运行。
在部署程序的过程中,往往是很繁琐的,要保证运行的环境,软件的版本,配置文件,第三方依赖等等都要一致,docker就是解决系统的平滑移植,方便做持续集成和整体发布的容器虚拟化技术。
它是通过将程序和程序所需的系统环境都打包来达到跨平台的无缝运作的。
虚拟机和容器对比
虚拟机
虚拟机就是一种带环境安装解决方案,它在原来的操作系统上虚拟出各种硬件,然后在这些硬件的基础上安装别的操作系统,在另一种操作系统上安装部署各种软件。
缺点:
- 占用资源多
- 冗余步骤多
- 启动慢
docker
docker容器是在操作系统上实现虚拟化,不需要模拟一个完整的操作系统,而是对进程进行隔离,只需要软件工作所需的库资源和设置。直接使用本地的操作系统,容器内没有自己的内核,也没有硬件的虚拟。每个容器之间相互隔离的,每个容器都有自己的文件系统,也即容器之间的进程不会相互影响。
优点:
- 启动速度快
- 占用体积小
docker的作用
- 更快速的应用交付和部署
- 更便捷的升级和扩缩容
- 更简单的系统运维
- 更高效的计算资源利用
docker的基本组成
- 镜像
- 容器
- 仓库
镜像
docker镜像是一个只读的模版,可以用来创建docker容器,并且可以创建多个,相当于Java中的类模版
容器
独立运行的一个或一组应用,应用运行在容器中,即容器包含类似于一个虚拟化的运行环境和它里面运行的应用。每个容器都是相互隔离的,保证安全的。它可以被启动,开始,停止,删除。相当于Java中的类对象。
仓库
集中存放镜像文件的地方。分为公开仓库和私有仓库。
docker工作架构
docker是一个client-server结构系统,主要工作的就是docker守护进程,运行在server端,通过socket接收client端的命令管理运行在server端的容器。
docker hello world
启动docker:systemctl start docker
可以使用 ps -ef | grep docker
查看docker是否启动成功
运行:docker run hello-world
,如果没有hello-world,docker会去仓库下载镜像然后运行。
docker常用命令
帮助启动类命令:
- systemctl start docker:启动docker
- systemctl stop docker:停止docker
- systemctl restart docker:重启docker
- systemctl status docker:docker的状态
- systemctl enable docker:每次linux开机都启动docker
- docker info :docker的概要信息
- docker (具体命令) --help:命令的帮助文档
镜像命令
docker images
docker images:列出本地主机上的镜像
解析:
- repository:镜像源
- tag:镜像的版本号
- image id:镜像的id
- created:镜像的创建时间
- size:镜像的大小
docker search
docker search -- limit 3 redis
:查找排名前三的redis镜像
解析:
- name:镜像的名称
- description:镜像的说明
- starts:镜像的点赞数
- official:是否是官方的
- automated:是否是自动构建的
docker pull
docker pull redis
:拉取redis的镜像,可以加上版本号拉取指定版本,不加是拉取最新版的。
docker system df
docker system df
:查看镜像、容器、数据卷,构建缓存所占空间
docker rmi
docker rmi -f 镜像名字/id:强制删除镜像,可以用名字和id指定
docker rmi -f hello-world
docker rmi -f a b c
:可以同时删除多个镜像
docker rmi -f $(docker images -qa)
:删除全部的镜像
容器命令
docker run
docker run 参数 镜像名:启动容器
参数:
- - - name指定容器名字
- -d:后台运行容器
- -i:以交互模式运行容器
- -t:为容器重新分配一个伪输入终端
- -P:随机端口映射
- -p:指定端口映射
docker ps
docker ps:显示所有正在运行的容器
参数:
- -a:当前正在运行的和历史上运行过的
- -l:最近创建的容器
- -n:加数字可以显示个数
- -q:只显示容器编号
退出容器
方式一:exit,退出容器会停止
方式二:ctrl+p+q,退出但容器不停止
docker start
docker start 容器id或容器名:启动已经停止的容器
docker restart
docker restart 容器id或容器名:重新启动容器
docker stop
docker stop 容器id或容器名:停止容器
docker kill
docker kill 容器id或容器名:强制停止容器
docker rm
docker rm 容器id:删除已经停止的容器
启动守护式容器
docker run -d 容器名:启动容器的后台运行模式
后台运行模式必须要有一个进程,不然会自动退出
docker run -d redis
,后台运行模式启动redis容器。
启动交互式容器
docker run -it 容器名/容器id:启动交互式的容器,也即有个等待输入的终端交互,
docker logs
docker logs 容器id:查看容器的日志
docker top
docker top 容器id:查看容器运行的进程
docker inspect
docker inspect 容器id:查看容器内部细节
docker exec
docker exec -it 容器id /bin/bash:重新进入容器(后台运行模式的容器)
docker exec -it f1df1159515f /bin/bash
进入到了redis容器里面
可以进行redis操作了
docker attach
docker attach 容器id:也是进入docker容器
和exec的区别是:
attach是直接进入容器启动命令的终端,不会启动新的进程,使用exit退出的时候,会导致容器停止。
exec是在容器中打开新的终端,并且可以启动新的进程,使用exit退出的时候不会导致容器停止
一般来说,还是使用exec比较多的。
docker cp
docker cp 容器id:容器内路径 主机路径:可以把容器中的文件复制到主机中,这样子就不用担心容器删了,里面的内容也不见了。
容器的导入导出
docker cp只是把一个文件导出到主机中
docker export 容器id>文件名.tar :可以把容器的内容导出作为一个tar归档文件,相当于把整个容器都备份了。
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号:可以根据这个文件名.tar创建一个新的镜像,运行这个镜像得到的容器就是之前导出的容器,里面的内容都是有的。镜像用户/镜像名:镜像版本号是自己取的。