Docker快速入门,全在这里!

一、Docker基础

容器和虚拟机的区别

  • 虚拟机是一个完整的、独立的系统,虚拟机是完全独立于物理机的,隔离级别较高,实现虚拟机的解决方案:vmware workstation、vsphere、openstack、kvm
  • 容器是会共用一部分物理机的资源【namespace】,比如共用物理机网络、共用物理机的主机名、共用物理机的挂载点....,容器的解决方案:docker

 

1.2 容器镜像文件

  • 启动虚拟机 iso
  • 启动容器的时候,用的是img文件,这个文件就称之为docker镜像文件

docker镜像文件的构成 

  • 分层构建
  • 联合挂载
  • 写时复制

 docker容器编排工具

  • 容器编排:控制多个容器的启动顺序、依赖关系
  • kubernetes => k8s
  • docker-compose

docker镜像文件的来源 

自己创建docker镜像文件
docker官方镜像【这里也有别人的做的镜像】:hub.docker.com

启动docker容器的流程 

客户端执行启动命令 

  • docker build:基于dockerfile文件,创建docker镜像文件
  • docker pull:从docker镜像文件的仓库下载docker镜像文件
  • docker run:将doker镜像文件启动成容器【docker run的时候,如果本地没有镜像文件,就会自动取下载】

Docker的应用场景

1.简化配置工作
工作中的环境有生产环境、测试环境、开发环境,测试环境又分为功能测试、性能测试;生产环境又分为预生产环境和生成环境。
在工作中有这么多的环境,环境不同,配置也就不同,如果配置不同,那么就可能会导致上线失败, 而我们使用docker就可以简化配置,也就是说我们可以做一个镜像,使用这个镜像就可以完成启动。
其实docker和openstack对比是不合适的,比较合适是的rpm包对比,因为他们都是事先配置环境的。

2.代码流水线管理【CD/CI】

我们的开发人员在开发完成以后,将代码传递到服务器上,然后测试人员可以从服务器上拉去代码进行测试,测试完成以后,开始进行发布,首先就是进行灰度发布,然后才是正事发布。

3.开发效率 

公司来了新员工以后,第一天除了是办理手续之外,就是开始配置各种环境,这个过程就往往是比较麻烦的,那么这里,我们就可以用docker做个容器轻松来实现。
4.应用隔离
各个应用之间互相是隔离的。
5.服务器整合
也就是说一个服务器可以跑多个容器实例
6.调试能力
处理bug的能力
7.多租户
8.快速部署
docker是秒级的,启动速度极其快。
比如之前说过,春晚的微信抢红包,用的是docker,说是可以1秒启动1000个docker程序。

二、安装配置docker 

 1. 基础要求

依赖的基础环境
  • l 64为的CPU
  • l linux内核版本3.10及以上

docker的也是双版本授权的
  • l ce:社区版
  • l ee:商业版本

 docker的下载地址

https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7.9/x86_64/stable/

2. 安装d安装docker ocker

1)配置yum源
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7.9/x86_64/stable/

2)安装docker-ce的组件  

yum install docker-ce 

3)修改docker的配置文件,设置docker加速镜像地址

4)启动docker 

5)检查docker的基础信息  

3. docker基础操作

查看帮助信息

 查看当前容器

 查看当前镜像文件

4.配置使用阿里云镜像

 第一步:登录mirrors.aliyun.com

第二步:搜索:容器镜像服务 - 加速器地址

第三步:修改配置文件,并重启服务 

 

三、docker的网络 

1 容器端口和linux随机端口进行绑定

-p 容器端口

案例:将容器的80端口向外进行暴露 

docker run --name c1 -d -v /dir1:/usr/share/nginx/html -p 80 nginx  

2. 容器端口和linux指定端口进行绑定 

-p 宿主机端口:容器端口

案例:将容器的80端口向外进行暴露到linux的1122端口  

docker run --name c3 -d -v /dir1:/usr/share/nginx/html -p 1122:80 nginx 

四、容器的卷 

 1. 容器存在的问题

在容器中创建、修改、编辑文件后,这些操作都是临时的,一旦删除了容器,重新创建的新容器中,以上前面的操作就会全部丢失

2. 配置使用逻辑卷 

-v linux目录:容器中的目录

五、dockerfile 

1.  简介

什么是dockerfile
dockerfile就是一个文本文件,通过这个文件中的设置,可以快速的创建docker镜像文件

作用:

可以自己定制docker镜像文件的 

docker file的组成结构

1) # 表示注释信息
2) 指令 参数
3) 一行一个指令,指令通常写成大写,但是其实大小写不敏感
4) docker file中的第一个非注释行必须是FROM(这是用来指定基础镜像,因为我们知道制作镜像都是基于一个基础镜像来做的。)
5) docker file中的内容是从上向下依次执行

2. dockerfile关键字 

关键:1:FROM
作用:指定基础镜像文件
案例:
FROM centos:latest
关键字2:COPY指令
将宿主机中的工作目录中的文件复制到目标镜像的文件系统中
语法格式
复制一个文件:COPY
复制多个文件:COPY [ ... ]
注意:
源文件路径,一般是相对路径
目标文件路径,一般是绝对路径
支持使用通配符
文件复制的准则
准则 1:src必须是工作目录下的目录或者文件,不能是父目录中的
【工作目录就是dockerfile文件所在的目录】
准则 2:如果dest不存在,会被动自动创建
准则 3:如果src是目录,那么在进行复制的时候,会将src下的全部内容都递归方式复制过去,但是 src自身不会被复制过去
准则 4:如果指定了多个src或者在src中使用了通配符,那么dest必须是一个目录,并且比用以/为结

例子:将当前工作目录下的index.html复制到目标容器的文件系统中的/data/web/html下 

COPY index /data/web/html  

案例:基于centos7作为基础镜像,然后将工作目录下的abc.html复制到镜像中  

 关键字3:ADD指令

与COPY类似,都是将一个做入到镜像中,区别是ADD支持使用URL路径,也就是,如果你的做镜像的这个主机可以联网,那么就可以将网络上的一个文件下载到本地并引入到你的文件中。
ADD的另一个作用就是如果源文件是一个本地文件,并且这个文件是tar压缩归档的文件,那么ADD 可以自动将这个文件解压展开到你的工作目录, 需要特别注意 ,如果源文件是一个网络文件,那么无法自动解压展开。

语法格式:

l ADD
l ADD ["" "" ... ""]
案例:在前面案例基础上,用add自动下载nginx的镜像文件,并解压到/usr/share/ng x
下载nginx的tar包
wget https://nginx.org/download/nginx-1.12.2.tar.gz
下载的文件必须放到dockerfile相同目录下
编辑dockerfile
FROM centos:7
COPY abc.html /home/dir1/
ADD nginx-1.12.2.tar.gz /usr/share/ngx

制作镜像

docker build -t myimage3 .

 指令4:WORKDIR指

用于设定工作目录,比如上个例子中,将nginx放在了/usr/loca/src下,我们就可以将这个目录设置 为工作目录
对上面的dockerfile修改如下,修改前后分别如下
FROM centos:7
COPY abc.html /home/dir1/
ADD nginx-1.12.2.tar.gz /usr/share/ngx
FROM centos:7
COPY abc.html /home/dir1/
WORKDIR /usr/share/ginx
ADD nginx-1.12.2.tar.gz ./
指令5:VOLUME
用于在镜像中创建一个挂载点目录,用以挂载宿主机上的卷或者其他容器上的卷
基于dockerfile创建的卷,是无法指定卷所在的宿主机的目录的,需要自动生成
语法格式:
VOLUME
案例:将/usr/share/nginx/html设置为逻辑卷
FROM busybox
COPY abc.html /home/dir1/
WORKDIR /usr/share/nginx
ADD nginx-1.12.2.tar.gz ./
VOLUME /usr/share/nginx/html

制作镜像 

docker build -t bx .

 启动容器

此时,容器没有主进程的命令,因此这个容器必须运行在前台
 
docker run --name new1 -it bx
指令6:EXPOSE指
l 为容器打开监听的端口以实现和外部主机进行通信
语法格式:
l EXPOSE [/] [/] [/] ...
l protocol是指定协议,可以是tcp,也可以是udp,默认tcp
例子:暴漏多个端口
EXPOSE 11211/udp 11211/tcp
案例:将容器的80端口暴露出来
dockerfile
基于这个镜像启动容器

 指令7:RUN命

l 而RUM命令是基于Dockerfile构建镜像的时候要运行的命令,比如我们就基于url的方式来获取 nginx的安装包,获取以后是一个gz的压缩包,而我们知道docker是不会自动解压url获取的包的, 那么这个时候就需要使用RUN指令来运行tar来解压展开这个nginx的包了。

案例:在镜像中下载编译安装nginx 

 

指令8:CMD
l 定义一个镜像文件启动为容器的时候,默认要运行的程序,也就是那个pid为1的程序
l 系统中的主进程只能有一个,所以CMD指令通常只能有一个

案例:在容器中启动 nginx  

 六、容器编排

 1. 简介

容器容器编排其实就是控制多个容器启动的时候的先后顺序,并且控制他们之间的依赖关系

实现容器编排的方法

k8s
docker-compose

2. 安装docker-compose

下载官网: https://docs.docker.com/compose/
安装过程
  • 第一步:将docker-compose放到 /bin
  • 第二步:设置可执行权限
chmod +x d /bin/docker-compose

3. 实现容器编排 

案例1:用容器编排的来启动三个nginx容器

 

启动和关闭docker compose中的容器  

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值