Docker新手入门篇

docker在现在的微服务系统的出现基本上就是程序员必备的一项技术了,曾经被人取笑还有人现在不会docker的[狗头],为什么现在的docker成为程序员必备的一项技能呢,就是因为现在微服务时代,为了各个服务之间得通讯。

首先Docker是一个开源应用容器引擎,是基于Go语言下得,并遵循Apache2.0协议开源,Docker可以让开发者集成里面得环境一起通过dockerfile(后面会讲到)形式形成一个轻量级,可值移的应用,然后部署成一个镜像,可以通过镜像运行,可以发布在任何的linux机器上,容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker在工作中的体现
在这里插入图片描述
docker的架构
1,镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

2,容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

3,仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

docker的常用命令如下:

docker容器的一些操作
##查看docker容器版本
docker version
##查看docker容器信息
docker info
##查看docker容器帮助
docker --help

image镜像的一些操作
##列出本地的镜像
docker images
##列出本地的镜像含中间映像层
docker images -a
docker images -qa
##列出本地的镜像只显示镜像id
docker images -q
##显示镜像摘要信息(DIGEST列)
docker images --digests
##显示镜像完整信息
docker images --no-trunc
##搜索镜像(类似maven仓库搜索jar)
docker search 镜像名
##搜索镜像根据条件
docker search --filter=搜索条件 镜像名
docker search --filter=stars=600 mysql
##下载镜像(不写版本就默认为最新版本)
docker pull 镜像名
docker pull redis
##下载仓库所有Redis镜像
docker pull -a redis
##下载私人仓库镜像
docker pull bitnami/redis
##删除单个镜像(默认最新的)
docker rmi redis(docker rmi redis :lastst)
##强制删除镜像(针对于正在运行的镜像进行强制删除)
docker rmi -f redis
##强制删除多个镜像
docker rmi -f mysql redis nginx
##删除本地全部镜像
docker rmi -f ¥(docker images -q)

构建镜像dockerfile
##编写一个docker
cd /docker/dockerfile
vim mycentos
##构建一个镜像
docker build -f /docker/dockerfile/mycentos -t mycentos:1.1

容器的操作
##新建并启动容器,参数:-i 以交互模式运行容器;-t 为容器重新分配一个伪输入终端;–name 为容器指定一个名称
docker run -i -t --name 镜像名
docker run -i -t --name mycentos
##启动容器-d后台运行
docker run -d 镜像名
##启动一个或者多个容器
docker start redis
##重启容器
docker restart redis
##停止容器
docker stop 容器
##杀掉一个运行中的容器
docker kill 容器
##删除一个容器
docker rm 容器
##删除一个正在运行的容器
docker rm -f 容器
##-v 删除容器,并删除容器挂载的数据卷
docker rm -v redis
##查看正在进行的进程(外部)(内部)
docker inspect redis(查看镜像的元信息)
docker ps
##查看redis容器日志,参数:-f 跟踪日志输出;-t 显示时间戳;–tail 仅列出最新N条容器日志
docker logs -f -t --tail=20 redis
##直接进入centos 容器启动命令的终端,不会启动新进程,多个attach连接共享容器屏幕,参数:–sig-proxy=false 确保CTRL-D或CTRL-C不会关闭容器
docker attach --sig-proxy=false centos
##在 centos 容器中打开新的交互模式终端,可以启动新进程,参数:-i 即使没有附加也保持STDIN 打开;-t 分配一个伪终端
docker exec -i -t centos /bin/bash

docker镜像
docker的镜像可以理解为一个实体类,当我们实例化的时候就是一个容器,镜像的结构是层级的一个镜像当作一层,每添加一个镜像就是相当于加上一层镜像,然后最底下的那层镜像就是基础镜像,可以理解为就像rabbitmq的基础镜像就是erlang语言的镜像,镜像可以上传到dockerhub仓库,这是一个开源的仓库,通过一个账号注册完成了,就成为一个仓库,其他人可以在仓库上上传和拉取镜像,当在docker上拉下来之后就可以通过命令实例化成一个容器

docker容器
上面也说到,镜像实例化run出来就是一个容器,容器就是相当于一个自己独立的服务器,各自的容器之间互不干扰,容器的主要作用是通过容器去运行单个应用程序,里面可以有应用程序的还环境包括,这样就形成了一个分布式的应用程序模型,避免服务之间的互相影响。实现 高内聚,低耦合。职责的逻辑分离:开发人员只需要关注容器中运行的程序,运维人员只需要关注对容器的管理。Docker开发提高了开发程序和部署容器的一致性

容器数据卷volume
容器数据卷简单来说就是相当于数据的持久化,因为数据在容器里面的话,一旦容器服务删除了或者出现异常了,里面的数据就没有了,这样我们就要使用容器数据卷技术,将我们容器里面的数据挂载到容器外面,这样可以做到数据共享,当然容器与容器之间也可以做数据共享
这个命令会在宿主机和容器内分别建立两个目录,两个目录是对接的,里面的数据可以共享:docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名

第二种就是利用dockerFile的形式添加
首先在linux服务器根目录上新建docker文件夹并建立DockerFile文件,使用volume命令(出于可移植可分享的的考虑,用以上 -v /宿主机绝对路径目录 : /容器内目录 的这种方式不能够直接在dockerFile中直接实现,因为宿主机目录是依赖于特定的宿主机的,并不能保证所有的宿主机都存在这样特定的目录)

FROM 镜像名
VOLUME ["/生成的目录路径"] – privileged=true
CMD echo “success build”
CMD /bin/bash

然后我们通过命令行docker build执行我们写好的dockerFile文件生成镜像然后运行(docker build和docker commit两个命令都可以建立docker镜像,docker commit 需要在容器内进行,docker build 不需要)

这是容器之间的数据卷实现
在这里插入图片描述

dockerfile
dockerfile其实是一个用来构建镜像的一个文件,通过文件里面的参数脚本,一步一步执行脚本创建出一个镜像,然后通过build命令构建镜像,run运行镜像,push发布镜像,别人乐意通过pull拉取镜像运行,现在一般用于企业的代码交付,就是服务部署,,实现jar服务的部署,就是通过携带jar在指定目录下,然后通过指令执行jar即可部署一个服务

dockerfile的指令如下
在这里插入图片描述

最好docker还有一些docker网络原理,idea整合docker,docker compose,docker swarm在这里就先不讲了我也还得深造

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值