Docker入门
1.为什么需要Docker
开发过程中后端与运维交付项目,运维部署运行不成功,两者无法判定是哪方问题
环境问题
docker解决-搬家问题直接入住
一次封装,到处运行
docker是什么?
解决了运行环境和配置的问题,方便持续集成有助于整体发布的容器虚拟化技术
2. Docker能干嘛
有点像我们的虚拟机一样,虚拟机也是带软硬件直接安装在我们电脑上自带环境运行,但是它启动太慢了,而且耗资源,步骤也多,docker是秒级的
但是它也不是完整的一个操作系统,而是运行所需要什么东西就加载什么东西。轻量级的
每个容器互相隔离,且不自带内核
开发自运维
docker的好处
下载地址: https://www.docker-cn.com, https://www.docker.com
Docker流程图
3 Docker三剑客
3.1 镜像
镜像就是一个只读模板,她可以创建Docker容器,一个镜像可以创建很多容器
比如:仍然是同一个模板,却有不同的对象
Person p1=new Person();
Person p2=new Person();
Person p3=new Person();
关系类比:
Docker | 面向对象 |
---|---|
容器 | 对象 |
镜像 | 类 |
3.2 容器
容器是可以独立安全运行应用的环境,是镜像用来运行的实例,容器可读可写
3.3 仓库
是集中存放镜像文件的场所
3.4 小结
4.Docker的使用
docker环境安装 yum install -y epel-release
docker安装 yum install -y docker-io
安装完在 /etc/docker下
启动docker: service docker start
当出现下面这个
Redirecting to /bin/systemctl start docker.service
说明需要用到systemctl命令来启动
启动docker:systemctl start docker
停止docker:systemctl stop docker
重启docker:systemctl restart docker
查看docker状态:systemctl status docker
开机启动:systemctl enable docker
查看docker概要信息:docker info
查看docker帮助文档:docker --help
查看docker安装的版本: docker --version
查看docker环境: docker version
systemctl status docker查看了一下,在运行中
目前为止已经成功安装好了
5. 阿里云镜像加速
https://dev.aliyun.com/search.html
获取加速器地址,第一次点击这边的需要设置一个密码就可以看到了
我这里是centos7版本的
直接复制下面的话执行就可以了
然后再回车重启,查看docker info发现
配置成功
5.1 网易云加速器
步骤和上面一样,只是需要去网易云找加速器地址,把那个阿里云的换成网易云的就可以了
5.2 docker run 运行
docker如何运行
为什么它比虚拟机快
- docker更少的抽象层,短小精干,
- docker用的是本机的内核和操作系统,虚拟机都自带
6. 常用Docker命令
6.1帮助命令
docker info //对应的描述
docker version //docker 版本
docker --help //帮助命令
6.2 镜像命令
docker images//查看本机镜像
docker images (-a 列出所有的镜像,包括最外层,-q 列出镜像的id,-qa就是所有镜像的id --digests 会显示DIGESTS说明 --no-trunc 完整说明,比如完整id)
docker serach 镜像名 加上-s 查看点赞数 //docker serach -s 30 tomcat 大于30点赞的
docker search -s 30 --no-trunc tomcat //--no-trunc完整的摘要信息
docker pull tomcat //等于下载最新tomcat
docker pull tomcat:3.2 //指定版本
//下载成功
//Digest: sha256:cae591b6f798359b0ba2bdd9cc248e695ac6e14d20722c5ff82a9a138719896f
//Status: Downloaded newer image for tomcat:latest
docker rmi 名字或者id
出现上面的原因是因为容器在运行,需要强制删除
docker rmi -f 名字或者id
删除成功
docker rmi -f 名字1 名字2 //多个一起删除
docker rmi -f $(docker images -qa) //删除查询出来的全部id===全部删除
7.容器命令
docker pull centos 惊奇发现它才200多M,这无疑证明了docker去掉了繁重的配置,比虚拟机更为轻量级
新建并启动交互式容器,起别名mycentos docker run -it --name mycentos id名或者名字
输入完,终端就进入mycentos了等于虚拟机进入终端时的根目录下
查看正在运行的容器
docker ps
docker ps -l 查看上一次运行的 -a查看现在运行和以前运行过的 -n显示最近n个创建的容器 -q只显示容器编号 --no-trunc 不截断输出,显示全部信息
进入那个centos终端后,但是退出不想直接exit,可以按住ctrl+p+q然后退出,会发现centos仍然在运行
启动容器 docker start id或者名字
重启容器 docker restart id或者名字
停止容器,慢慢自己关闭 docker stop id或者名字
强制停止,强行关闭 docker kill id或者名字
删除已停止的缓存信息 docker rm id或者名字
找出全部容器全部删除 docker rm -f $(docker ps -a -q) 或者 docker s -a -q| xargs docker rm
重要的命令
docker run -d 容器名 启动守护式容器,docker ps看不到
docker logs -f -t --tail 容器id 查看容器日志 -t是加入时间显示 -f跟随最新的日志打印 --tail 数字 显示最后n条
**docker run -d centos /bin/sh -c “while true;do echo hello zzyy;sleep 2;done”**以后台运行
查看日志
docker inspect id 查看容器内部细节
docker top id 查看容器内部进程
docker attach id名字 重新进入终端命令行
docker exec -t id名字 命令语句 可以不进入终端然后返回终端执行结果
如果命令语句是一个路劲,那么就是跟docker attach id名字一样进去终端
docker cp id名 /tmp/yum.log /root 拷贝文件,这个和linux无区别
8.镜像原理
为什么docker要分层结构
因为缓存,方便删除完,下次下载更快,如果分层的话,比如其它层是相同的base文件产生的,下次速度会更快产生
9. Docker Commit
修改完镜像副本,然后提交成一个新镜像,比如加个作者啥的 原镜像依然存在
docker commit
docker run -it -p 8888:8080 tomcat 运行以8888访问tomcat
docker run -it -P tomcat 大写的p会随机分配端口
加了-d就可以后台运行
10.Docker容器数据卷
有点像redis的rdb和aof,主要用来持久化数据,实现容器数据共享
docker cp id名 容器内路径 目的路径
命令给容器类添加数据卷
docker cp /路径:/目的地址 镜像名
两个路径之间数据共享,新建一个文件都看得到,可以用docker inspect 容器名查看json是否挂载成功
docker cp /路径:/目的地址:ro 镜像名 只读,是不可以修改的
jhhhhhhhhhhhhhhhhhh
DockerFile添加数据卷
先编写dockerfile 然后build, docker build -f 路劲 -t 路劲
容器之间共享 --volumes-from
docker run -it --name dc04 --volumes-from dc03 容器名字 相 当于继承dc03,那么所有数据dc04都可看,即使dc03删除,全量备份
容器卷之间有数据共享,,而主机与容器则需要自己写数据卷
11. DockerFile
- 编写dockerfile(这一个的解读我就没写在这了,不难,dockerHub上看几段代码就会了,不要求手写)
- build
- run
DockerFile是构建镜像的构建文件,是由一系列命令和参数构成的脚本
执行流程
11.1 关键字解读
- from 说明镜像基于哪个镜像
- maintainer 镜像维护者的姓名和邮箱
- run 容器构建时要执行的命令
- expose 对外暴露的端口号
- workdir 创建容器后,默认登录的工作目录
- env 构建环境过程中设置环境变量
- add 拷贝加解压缩,自动处理url
- volume 容器数据卷
- copy 拷贝
- cmd 容器启动时执行的命令,只生效最后一个cmd
- entrypoint 和cmd一样,但不会覆盖命令会追加执行
- onbuild 当子镜像继承父镜像时,父镜像的onbuild会执行
11.2 存放仓库
登录完
docker tag[imageid] registry.cn-hangzhou.aliyuncs.com/镜像名字:[版本号]
然后push
docker push registry.cn-hangzhou.aliyuncs.com/镜像名字:[版本号]
再执行==docker serach 镜像名字:[版本号]==就会从仓库发现你推送的镜像
d 拷贝加解压缩,自动处理url
- volume 容器数据卷
- copy 拷贝
- cmd 容器启动时执行的命令,只生效最后一个cmd
- entrypoint 和cmd一样,但不会覆盖命令会追加执行
- onbuild 当子镜像继承父镜像时,父镜像的onbuild会执行
11.2 存放仓库
[外链图片转存中…(img-lRF0CZXE-1587998755433)]
登录完
docker tag[imageid] registry.cn-hangzhou.aliyuncs.com/镜像名字:[版本号]
然后push
docker push registry.cn-hangzhou.aliyuncs.com/镜像名字:[版本号]
再执行==docker serach 镜像名字:[版本号]==就会从仓库发现你推送的镜像
而且你还可以docker pull 镜像名字:[版本号] 给下载下来
转载:https://blog.csdn.net/jiohfgj/article/details/105801864