Docker简单入门
简介
Docker有两个比较重要的概念镜像、容器。
- 镜像:一种文件存储形式。一个磁盘的数据拷贝到另一个磁盘中,另一个磁盘中的这份数据就是镜像。
- 容器:利用开源的容器引擎,让开发者打包应用以及依赖到一个可移植的镜像中,然后部署到服务器上。
color{red}容器是实例化后的镜像。
Docker作用:将应用程序与该程序的依赖,打包在一个文件里,运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。color{red}避免环境不统一的问题。Docker 也支持跨平台。
镜像还能有另一个功能:内网依赖提供给外网用。(不确定合不合理,学校和tx的合作项目,tx导师就是这么干的)
这里顺带提一下,开发时一般会弄两条流水线的原因:
一条用于推上去测试用,另一条在小组合并分支的时候自动触发(测试用的会减少检测分支命名规则、发送邮件通知评审人两个环节)
Docker只是初步了解,多多包涵。有问题还希望评论提醒。
Docker常用操作
查看命令用法
docker
:查看Docker的命令用法
docker COMMAND --help
:查看指定命令详细用法
镜像操作
- 查找镜像:
docker search 关键词
- 下载镜像:
docker pull 镜像名:Tag
(Tag表示版本,latest
,表示最新版本)
- 查看镜像:
docker images
(查看本地所有镜像)
- 查看镜像的详细信息:
docker inspect 镜像ID或镜像名:Tag
- 删除镜像:
docker rmi -f 镜像ID或镜像名:Tag
(rmi
的rm
是删除,而i
是镜像,因为docker rm
是删除容器的命令,-f
表示强制删除)
容器操作
创建容器,并运行一个命令:docker run 镜像ID或镜像名:Tag
// 可加参数
--name:指定容器名,不指定自动命名
-i:以交互模式运行容器
-t:分配一个伪终端
-p:指定映射端口,将主机端口映射到容器内的端口。-p 5000:80就是将容器的80端口映射给主机的5000端口,之后就能通过5000端口访问
-d:后台运行容器
-v:指定挂载主机目录,默认是读写模式`rw`,`ro`表示只读
查看容器列表:docker ps
(不加参数表示查看正在运行的容器,-a
表示查看所有容器,-q
表示只查看容器ID)
启动容器:docker start 容器ID或容器名
停止容器:docker stop 容器ID或容器名
删除容器:docker rm -f 容器ID或容器名
)
查看日志:docker logs 容器ID或容器名
进入正在运行的容器:docker exec -it 容器ID或容器名 /bin/bash
/bin/bash是固定写法。
因为docker后台必须运行一个进程,否则容器就会退出。
在这里表示启动容器后启动bash。
拷贝文件
主机中文件(文件夹)拷贝到容器中:
代码语言:javascript复制docker cp 主机文件路径 容器ID或容器名:容器路径
容器中文件(文件夹)拷贝到主机中:
代码语言:javascript复制docker cp 容器ID或容器名:容器路径 主机文件路径
文件:
文件夹:
- 获取容器详细信息:
docker inspect 容器ID或容器名
- 更新镜像:
docker commit -m="描述信息" -a="作者" 容器ID或容器名 镜像:Tag
容器和虚拟机区别
缺点:
和虚拟机相比,Docker隔离性更弱,属于进程之间的隔离,而虚拟机可以实现系统级别的隔离。
Docker的安全性也更弱,Docker的租户root和宿主机的root等同,一旦容器内的用户从普通用户权限提升为root权限,它就直接具备了宿主机的root权限,进而可进行无限制的操作