小言_互联网的博客

Docker这么好用再不懂就过分了

509人阅读  评论(0)

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

  1. 编写dockerfile(这一个的解读我就没写在这了,不难,dockerHub上看几段代码就会了,不要求手写)
  2. build
  3. 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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场