docker虚拟化技术

第一部分 基础命令
操作容器使用容器ID,操作镜像可以使用ID或者是名字

为什么要使用docker,因为docker相对于虚拟机容量小,速度快,一处配置好,处处可用
docker之所以速度快,是因为没有虚拟机的操作系统,使用宿主的操作系统,并且没有硬件的虚拟资源。
所以docker只有100多MB,而虚拟机却又几个GB,运行速度docker是秒级,虚拟机是分钟级

docker三要素,镜像,容器,仓库
三要素关系,仓库存放镜像,镜像实例化容器
1、安装
https://blog.csdn.net/snowhite91/article/details/80823720 修改源
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
2、修改镜像源
https://blog.csdn.net/snowhite91/article/details/80823720 修改源
3、docker run hello-world默认是latest最后一个版本,可以在镜像中标注镜像版本 run是运行容器,容器是由镜像实例化的对象,所以先在本地找镜像,本地如果没有镜像,就在远程仓库里找,找到后下载到本地,实例化镜像,运行容器

hub是仓库,这点类似github,远程仓库
常用命令 操作镜像名与镜像id是同等效果,镜像名必须是唯一,默认版本号latest最新
1、镜像命令
docker images 查看本地仓库拥有的镜像
docker run 镜像名 实例化镜像(容器),并运行容器
docker search 镜像名 查看hub里的镜像
docker pull 镜像名:latest 向hub里拽取镜像到本地
docker rmi -f 镜像名 删除指定镜像,因为镜像是多层结构,所以要加循环参数 -f,镜像名可以是多个,中间用空格分隔,举例 docker rmi -f nignx redis
执行命令使用$()
docker rmi -f ( d o c k e r i m a g e s − q ) 删 除 所 有 的 镜 像 , (docker images -q) 删除所有的镜像, (dockerimagesq)()是执行内部命令,得到相应的返回值

2、容器命令
容器的命令与linux 很像ps top等
启动容器
docker run -it 镜像名 run 做三件事,1获取镜像,实例化镜像为容器,运行容器, -it常常在一起使用,是选项,作用是获取一个伪终端,命令是进入容器的终端
docker run -d 镜像名 启动守护容器,也就是不进行交互

docker ps 显示所有的容器 -l显示上次运行的容器,-n +数量 显示之前运行的一定数量容器
退出容器的两种方式
exit 容器停止退出
ctrl+P+Q 容器不停止退出

启动容器
docker start 容器ID 如果没有容器,使用docker run 镜像名称 生成容器运行

停止容器
docker stop 容器ID

强制关闭
docker kill 容器ID

删除容器
docker rm 容器ID 强制删除参数-f
docker ps -aq | xargs docker rm 等价于 docker rm $(docker ps -aq)

查看log日志
docker logs -f -t --tail 容器ID -t 是日志显示出时间 -f 是跟随最新的日志打印也就是实时更新 --tail 数字 显示最后多少条

查看容器内部细节
docker inspect 容器ID

操作具体的容器
方式1 启动容器时采取交互的模式 如果推出后向重新进入docker attach 容器ID
方式2 docker exec -t 容器ID shell命令
方式2 同样可以进入终端 docker exec -it 容器ID

容器转成镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker commit -a “runoob.com” -m “my apache” a404c6c174a2 mymysql:v1
id 是容器id 镜像名重新加上版本号

第二部分 数据共享与持久化

windows 共享文件夹
windows 使用docker 是使用docker-machine ssh docker-machine是宿主机(master)
可以通过dockerfile构建镜像后,再对镜像进行数据共享与端口映射

docker run -it -v /masterdockerdata:/home/project -p 127.0.0.1:5000:5000 myubuntu /bin/bash 

https://www.cnblogs.com/yanzilove/articles/8028883.html
1、虚拟机管理器中,设置虚拟机共享文件夹,即可实现windows7与docker-machine文件共享,文件夹位于docker-machine根目录下
2、docker-machine与容器文件共享
docker run -it -v /masterdockerdata:/branchdockerdata 镜像名(ubuntu:18.04) 表示主机与容器的响应的文件共享
综上所述,虽然windows7与docker不能直接进行交互,但可以通过docker-machine进行间接交互,从而实现windows7与容器的文件共享,另外还可以通过配置dockerfile进行容器与docker-machine的文件共享
来自继承的数据共享
前提是父容器内由数据卷
执行
docker run --name doc1 镜像名 给容器起名doc1
docker run --name doc2 --volumns-from doc1 镜像名 意思是创建容器doc2是doc1的子容器

父子容器的数据是共享的,都在数据卷内,相当于所有的容器值存在一组数据卷

第三部分 dockerfile的使用
总体步骤 编写Dockerfile 构建镜像build 实例化容器docker run
实例化容器时一定要使用 -it 进行交互,否则会进行闪退,因为容器运行必须有一个前台!!或者实例化容器时就运行服务器,然后使用-d启动后台!!!总之必须使用-it 或-d
编写
https://www.cnblogs.com/edisonchou/p/dockerfile_inside_introduction.html
编写时需注意,安装软件时如果需要判断 ,需要在后面加上 -y 比如RUN apt-get install vim -y

构建dockerfile 命令
docker build -f dockerfile文件绝对路径 -t 镜像的名字 . 最后又一个点

因为dockerfile 是很多行命令,所以镜像是通过很多层构建而成的,也体现了docker的多层结构
创建多层容器

BUG区
https://blog.csdn.net/lafengwnagzi/article/details/77984616 安装ubuntu,apt-get 首先应该update
访问不了宿主机的数据卷,是因为权限问题,修改权限后即可

安装mysqlclient报mysql_config错误解决方法 linux
https://www.cnblogs.com/yoyoketang/p/12131101.html

设置默认编码格式utf-8
https://blog.csdn.net/weixin_34184561/article/details/90421851
https://www.jianshu.com/p/43a3468362aa

ssh主机默认密码
https://www.cnblogs.com/canger/p/9028723.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值