Docker学习(一) —— 容器

本文详细介绍了Docker的基本概念、使用方法,包括Docker架构、安装步骤、常用命令,以及数据卷和数据卷容器在容器数据持久化和多容器数据交换中的作用。通过对Docker的学习和实践,可以有效解决环境迁移问题,提高开发和运维效率。
摘要由CSDN通过智能技术生成


Docker官网

提示:以下是本篇文章正文内容,下面案例可供参考

一、Docker是什么?

1.1 问题思考

我们开发过程中,会有好几个环境:开发环境、测试环境和生产环境;那么我们的代码在不同的阶段是否会产生“水土不服”的情况呢?比如,我们使用jdk1.8进行开发,测试使用jdk1.7进行测试,程序是否还能正常运行(如1.8的lombok表达式1.7不支持);所以我们单单只是把代码交给别人,就很容易出现各种各样的问题。这就是我们常听到的“我电脑上是好的呀!”
在这里插入图片描述

1.2 问题分析

那出现1.1的问题我们要怎么解决呢?想想,你不是水土不服吗,那我连“水土”一起交出去,生成一个容器。这样别人在拿到的就不是单纯的代码,而是一整套的产品(代码+环境)。这样一来,由于容器中的代码和环境和开发环境是完全一致的,所以和开发环境所运行的效果是完全一致的。这样就不会出现由于环境问题导致的bug。

1.3 Docker

为规避环境迁移所引发的问题,我们把软件铲平和其所依赖的环境等其他相关产品,一起打包成容器,这就是docker所解决的问题
在这里插入图片描述

  • Docker诞生于2013年初,基于Go语言实现,dotCloud公司出品(公司后来改名为Docker Ins);
  • Docker从17.03版本之后分为社区版(CE:Community Edition)和企业版(EE:Enterprise Edition);
  • Docker是一个开源的应用容器容器引擎;
  • Docker可以让开发者打包他们的应用、依赖到到一个轻量级、可以治的容器中,然后发不到任何流行的Linux机器上;
  • 容器完全使用沙箱机制,相互隔离;
  • 容器性能开销极低;

**总结:docker是一中容器技术,解决了环境的迁移问题。**从而提高了测试、运维的效率,降低了成本。

二、Docker的使用

2.1 Docker架构

在这里插入图片描述
Docker架构分为三部分,clients(客户端)相当于我们的Docker命令行,是一系列的Linux命令,用来操作镜像和容器;这些命令会发送给我们的Hosts(主机)的daemon(守护进程,daemon相当于我们运行的Docker),Docker接受到命令之后,如果操作的是镜像,比如说下载,就会从Repository(远程仓库)中下载对应的镜像;

  • 镜像(Image): Docker镜像(Image),相当于是一个root文件系统,比如官方镜像Ubuntu:16.04就包含了一套完整的Ubuntu 16.04最小系统的root文件系统;
  • 容器(Container): 镜像和容器的关系,就像是Java中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体,可以被创建、启动、停止、删除和暂停等等;
  • 仓库(Repository): 仓库可以看成一个代码控制中心,用来保存镜像。

2.2 安装Docker

Docker目前可以运行在Mac、Windows、CentOS、Ubuntu等主流系统上;我们是安装在CentOS 7上;
安装的过程会比较耗时,请耐心等待:

  1. 更新yum包到最新
yum update

在这里插入图片描述
遇到选择输入的就输入 y,然后等到更新完成
在这里插入图片描述
2. 安装需要的软件包
yum-util 提供了yum-config-manager功能,另外的两个是devicemapper的驱动依赖;

yum install -y yum-utils device-mapper-persistent-data lvm2

在这里插入图片描述
3. 设置yum源

yum-config-manager --add-repo https://download.docker.com

在这里插入图片描述
4. 安装docker,出现输入的界面都按 y
-y:表示所有的选择输入都输入y;

在这里插入图片描述
5. 查看docker版本,也是校验安装是否成功

docker -v

在这里插入图片描述
6. 镜像加速器
阿里云镜像获取地址,登录后,左侧菜单选中镜像加速器就可以看到自己的专属地址:
在这里插入图片描述
地址:
在这里插入图片描述
7. 配置镜像加速器
/etc/docker/daemon.json 文件中,添加刚刚获取镜像地址:

{
	"registry-mirrors": ["https://你的ID.mirror.aliyuncs.com"]
}

如果没有 /etc/docker/daemon.json 路径和地址,可以自己创建,并不是所有的Docker安装之后都有这个路径和文件的。

2.3 Docker命令

2.3.1 进程相关

  • 查看Docker服务状态
systemctl status docker

在这里插入图片描述

  • 停止Docker服务
systemctl stop docker

在这里插入图片描述

  • 启动Docker服务
systemctl start docker

在这里插入图片描述

  • 重启Docker服务
systemctl restart docker

在这里插入图片描述

  • 设置docker开机启动
systemctl enable docker

在这里插入图片描述

2.3.2 镜像相关

  • 查看镜像
    查看本地所有的镜像
docker images    # 查看本地所有镜像
docker images -q    # 查看本地所有的镜像id

在这里插入图片描述

  • 搜索镜像
    从网络中查找需要的镜像
docker search "镜像名称"   # 从网络中搜索需要的镜像

在这里插入图片描述

  • 拉取镜像
    从Docker仓库下载镜像到本地,镜像名称格式为 名称:版本号,如果版本号不指定则是最新的版本
    lastest。
docker pull “镜像名称”   # 下载镜像(默认拉取最新版本)
docker pull redis    # 下载redis镜像(最新版)
docker pull redis:5.0  # 下载5.0版本的redis镜像

在这里插入图片描述

  • 删除镜像
    删除本地镜像,如果镜像有创建的容器尚未删除,可能导致镜像删除失败;
docker rmi "镜像id"  # 删除指定的镜像
docker rmi  `docker images -q`  # 删除本地所有镜像

删除指定镜像:
在这里插入图片描述
删除所有镜像:
在这里插入图片描述

2.3.3 容器相关

  1. 查看容器
docker ps  # 查看正在运行中的容器
docker  ps  -a    # 查看所有容器

在这里插入图片描述
2. 创建并启动运行容器

docker run "参数"

参数说明

  • -i: 保持容器运行。通常与 -t 同时使用,加入 it 这两个参数,容器创建成功后自动进入容器,退出容器后,容器自动关闭;
  • -t: 为容器重新分配一个未输入终端,通常与 -i 一起使用;
  • -d: 以守护(后台)模式运行容器,创建一个容器在后台运行,需要使用 docker exec 命令进入容器,退出后,容器不会关闭;
  • -it: 创建的容器一般称为交互式容器
  • -id: 创建的容器一般称为守护式容器
  • –name: 为创建的容器命名;
docker run -it --name=c1 centos:7 /bin/bash  # 创建交互式容器:名字为c1 使用centos7的镜像

在这里插入图片描述

docker run -id --name=c2 centos:7 /bin/bash # 创建守护式容器:名为c2,使用centos7的镜像

在这里插入图片描述

PS:交互式容器,exit后容器自动关闭,守护式容器会在后台继续执行。

  1. 进入容器
docker exec -it c2 /bin/bash  # 进入c2容器

在这里插入图片描述
4. 停止容器

docker stop "容器名称"

在这里插入图片描述

  1. 启动容器
docker start “容器名”

在这里插入图片描述

  1. 删除容器
docker rm  "容器id/容器名称"  # 无论id还是名称都能删除

在这里插入图片描述

  1. 查看容器信息
docker inspect "容器名称"

在这里插入图片描述

2.4 Docker容器的数据卷

2.4.1 概念及作用

思考:

  1. Docker容器删除后,在容器中产生的数据还在吗?
    不在了,删除后,容器中的数据会丢失;
    在这里插入图片描述
  2. Docker容器和外部机器可以直接交换文件吗?
    不可以,外部机只能访问到宿主机;
    在这里插入图片描述
  3. 容器之间如何进行数据交换?
    通过第三方数据文件的方式进行交换;
    在这里插入图片描述

什么是数据卷?

  1. 数据卷是宿主机中的一个目录或文件;
  2. 当容器目录和数据卷目录绑定后,对方的修改会立刻同步;
  3. 一个数据卷可以被多个容器挂载;
  4. 一个容器可以挂载多个数据卷;

作用:

  1. 容器数据持久化 ;
  2. 外部机器和容器之间进行通信;
  3. 容器之间的数据交换。

2.4.2 使用

容器启动时使用 -v参数 设置数据卷:

docker run ... -v 宿主机目录(或文件):容器内目录(或文件)

PS:注意事项:

  • 容器目录必须是绝对路径
  • 如果目录不存在,会自动创建;
  • 可以挂载多个数据卷;
  • 也可以被多个容器挂载。
    在这里插入图片描述

2.4.3 演示

  • 创建 容器c1 挂载宿主机 /root/data/ 到容器的 /root/data_container 目录:
docker run -it --name=c1 -v /root/data:/root/data_container centos:7 /bin/bash

在这里插入图片描述
宿主机挂载目录:
在这里插入图片描述

容器挂载目录:
在这里插入图片描述
宿主机上创建文件,会自动、立刻同步到容器中(反过来也是):
在这里插入图片描述
删除容器c1,新建容器c2,挂载到原目录上:
在这里插入图片描述
原来c1容器的数据会同步到c2上,达到数据持久化的目的。

  • 一个容器挂载多个数据卷
docker run -it --name=c2 \
-v ~/data2:/root/data2 \
-v ~/data3:/root/data3 \
centos:7
  • 两个容器挂载同一个数据卷
docker run -it --name=c3 -v /root/data:/root/data_container centos:7 /bin/bash
docker run -it --name=c4 -v /root/data:/root/data_container centos:7 /bin/bash

2.5 数据卷容器

2.5.1 数据卷容器

多容器进行数据交换,多个容器挂载同一个数据卷容器,完成数据交互;简单来说,及时大家都到一个容器的指定数据卷哪里找文件;此时的数据卷不是宿主机上的目录或文件,而是数据卷容器上的;
在这里插入图片描述

2.5.2 使用

  1. 创建容器C3,并使用 -v 参数 设置数据卷:
docker run -it --name=c3 -v /volume centos:7 /bin/bash

在这里插入图片描述
2. 创建 c1 c2 容器,使用 –volumes-from 参数,设置数据卷

docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash

在这里插入图片描述
使用 c3数据卷容器挂载到c1,c2容器卷,这时即使c3关闭不影响c1, c2交互

2.5.3 小结

  1. 创建一个容器,挂载一个目录,让其他容器继承自该容器;
  2. 通过简单方式实现数据卷配置。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值