Docker基础——NWU_LK

Docker基础

Docker概念

Docker是基于GO语言实现的云开源项目,docker的主要目标是“build,ship and run APP,anywhere“也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP及用户环境能够做到”一次封装,到处运行“。Docker是开发人员和系统管理员使用容器开发、部署和运行应用程序的平台。使用Linux容器来部署应用程序称为集装箱化。使用docker轻松部署应用程序。

集装箱化的优点:

  • 灵活:即使是复杂的应用程序也可封装。
  • 轻量级:容器利用并共享主机内核。
  • 便携式:您可以在本地构建,部署到云上并在任何地方运行。
  • 可扩展性:您可以增加和自动分发容器副本。
  • 可堆叠:您可以垂直堆叠服务并及时并及时堆叠服务。
安装Docker

Linux安装Docker:

  1. curl -fsSL get.docker.com -o get-docker.sh

  2. sudo sh get-docker.sh --mirror Aliyun

  3. 配置docker镜像加速器,在/etc/docker/下新建daemon.json,并且输入镜像地址。如果下载镜像还很缓慢,则用阿里云的镜像(自行百度)。

    {
    	"registry-mirrors":[
    		"https://registry.docker-cn.com"
    	]
    }
    
  4. 加载docker配置:systemctl daemon-reload

  5. 重启docker:systemctl restart docker

  6. 查看docker版本:docker --version

Docker中的三大关键词
  • 镜像:好比一个模板,通过该模板可以创建多个容器,比如通过redis镜像可以创建redis的实例。镜像是一个轻量级、可执行的软件包。包含了代码、库和环境变量以及配置文件。docker的镜像实际是由一层一层的文件系统组成。这种层级的文件系统叫unionFS。
  • 容器:是一个具体的应用实例,通过镜像来创建,有启动、停止、重启等命令。启动一个容器时,先看本地是否有该镜像,有的话则启动,没有的话会从远程仓库下载后启动,若远程仓库也没有,那么启动会报错。
  • 仓库:用来存放各种软件的镜像,本地可以将仓库中的镜像拉去下来进行使用
Docker的常用命令
  • 镜像的基本命令
命令说明
docker images显示本地所有的镜像
docker search 镜像名查看仓库中有关该镜像的信息
docker pull 镜像[:版本号]将仓库中的镜像拉取到本地
docker rmi 镜像id删除镜像
docker image rm 镜像id删除镜像
docker image prune删除虚悬镜像
  • 容器的基本命令
    1.用镜像启动docker容器:docker run【参数】 镜像名
参数说明
- -name 容器名指定容器的名称
- -rm容器退出后删除容器
-d后台运行
-it运行容器后进入容器
-p 8080:8080将主机的端口映射到容器
  1. 删除容器:docker rm 容器id
  2. 启动已停止的容器:docker start 容器id
  3. 重启容器:docker restart 容器id
  4. 停止容器:docker stop 容器id
  5. 显示正在运行的容器:docker ps
  6. 显示所有容器:docker ps -a
  7. 删除所有未运行的容器:docker container prune
  8. 交互进入容器:docker exec -it 容器id bash
  9. 将容器变为镜像:docker commit 容器id 镜像名
  10. 将容器的文件拷贝到宿主机:docker cp 容器名:路径 宿主机路径
  11. 查看日志:docker logs 【参数】 容器
参数说明
-t显示时间戳
-f跟随日志的增加输出
–tail number显示指定的条数
  1. 查看容器元数据:docker inspect 容器id
数据卷

当我们在使用docker容器的时候,会产生一系列的数据文件,这些数据文件在我们删除docker容器时是会消失的,但是其中产生的部分内容我们是希望能够把它给保存起来另作用途的,Docker将应用与运行环境打包成容器发布,我们希望在运行过程钟产生的部分数据是可以持久化的的,而且容器之间我们希望能够实现数据共享。数据卷由docker挂载到容器,但不属于联合文件系统,Docker不会在容器删除时删除其挂载的数据卷。

挂载分为匿名挂载和具名挂载

  • 匿名挂载
    语法:-v 容器内目录[:ro或:rw]
    默认docker将匿名数据卷存在/var/lib/docker/volumes中。ro:表示容器内只读,只能操作外部的数据卷;rw是默认的方式,容器内可读可写。
  • 具名挂载
    语法:-v 卷名:容器目录[:ro或:rw]-v 虚拟机目录:容器目录[:ro或:rw]
    例:docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql --name mysql3306 mysql:5.7

数据卷容器:指的是创建一个容器时,挂载的数据为另一个容器所挂载的数据。语法位:--volumes-from 容器名

DockerFile

是一段命令脚本,用来构建docker镜像。
DockerFile文件使用到的指令

指令说明
FROM指定基础镜像
MAINTAINER说明镜像是谁写的
RUN需要运行的命令
ADD添加的内容
WORKDIR指定工作目录,即进入容器后所在目录
VOLUME指定挂载的数据卷
EXPOSE指定对外暴露的端口
CMD容器启动的时候要运行的命令
ENTRYPOINT启动时要追加的命令
COPY拷贝文件到镜像
ENV构建时设置环境变量

将DockerFile构建为镜像:docker build -f DockerFile文件名 -t 镜像名:tag .

发布镜像
  • 发布到docker-hub
  1. 注册docker-hub账号
  2. 在linux中登录:docker login -u 用户名,然后输入密码
  3. 发布镜像:docker push 账号名/镜像名:tag
  • 发布到阿里云
  1. 登录阿里云,找到容器镜像服务
  2. 在阿里云创建命名空间
  3. 创建镜像仓库
  4. 点击创建的仓库,查看上传的流程
Docker网络

在虚拟机输入ip addr可以看到docker0网卡,该网卡就是docker实现网络通信的。启动一个容器,用命令docker exec -it 容器名 ip addr可以查看当前容器的网卡信息,我的容器信息为4: eth0@if5。此时再用命令ip addr查看虚拟机的网络信息,发现多了一个5: veth479ee8d@if4。这是通过veth-pair来实现的,能够将docker0和容器网络连通。删除容器之后,那么5: veth479ee8d@if4就会消失。

容器和容器通信原理
在这里插入图片描述
启动了tomcat1和tomcat2两个容器。docker exec -it 容器1 ping 容器2的IP 可以实现,但若使用docker exec -it 容器1 ping 容器2的名称不能ping通。若要实现能用容器名ping通的功能,只需要在启动容器1的时候添加参数--link 容器2,相当于在容器1的etc/host文件中添加了映射。但是容器2不能ping通容器1的名称。

自定义网络

查看所有的docker网络:docker network ls

网络模式:bridge(网桥模式,默认)、host(与主机共享网络)、none(不配置网络)

创建网络mynet:docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

创建容器的时候,使用--net 网络名就可以将容器放在该网络下,在同一网络的各个容器可以直接用容器名ping通彼此。

将容器连接到自定义网络上:docker network connect 网络名 容器名

将SpringBoot项目打包成docker镜像

参考部署Eureka:跳转到部署流程

Docker Compose简介

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

docker compose的安装

curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

测试安装成功与否:docker-compose -v,如果显示版本号则说明安装成功

使用docker compose的关键就是编写docker-compose.yml文件。然后使用docker-compose up启动,用docker-compose down关闭容器并删除容器。

以下是使用docker-compose启动一些常用容器的流程:

Swarm简介

Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。如下图所示,swarm 集群由管理节点(manager)和工作节点(work node)构成。
在这里插入图片描述

搭建Swarm集群:

  1. 准备四台虚拟机,都安装docker
  2. 第一台初始化docker swarm init --advertise-addr 虚拟机IP地址,其变为管理节点
  3. 查看如何让其他机子变为manager节点或worker节点
    3.1 变为manager节点加入集群:docker swarm join-token manager
    3.2 变为work节点加入集群:docker swarm join-token worker
  4. 在其他机子上分别用生成的令牌加入集群即可
  5. 离开集群:docker swarm leave

swarm集群的本质用到了raft算法,raft算法可以参考:raft算法详解

用swarm启动服务

  • 集群启动一个服务:docker service create -p 8888:80 --name mynginx nginx
  • 查看启动的服务:docker service ls,可以看到只有一个副本
  • 在每台机器上用命令docker ps查看启动的那个副本是否在当前的机器。发现只有其中的一台机器有docker容器,但是此时用集群中任何一个机器的IP+端口号都可以访问nginx
  • 修改副本个数:docker service update --replicas 3 mynginx或者docker service scale mynginx=3
    此时用docker ps命令查看其他机器,可以看到一共3台机器启动了nginx,如果再将副本改为1,那么有两台机器的nginx容器会被删除。
  • 移除一个服务:docker service rm mynginx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值