Docker入门

1、Docker概述

1.1Docker为什么会出现

一款产品,开发和上线两套环境,应用环境配置费时费力,而且容易出问题,尤其对于机器学习和深度学习的库更是如此,很可能存在版本问题、底层依赖冲突问题

所以发布项目时,不只是一套代码过去,而是代码+环境整体打包过去

所谓开发即运维,保证系统稳定性,提高部署效率

在这里插入图片描述

使用Docker后的流程:

开发:建立模型–环境–打包带上环境,即镜像–放到Docker仓库
部署:下载Docker中的镜像,直接运行即可

Docker的思想来自于集装箱,集装箱,对环境进行隔离
Docker通过隔离机制,可以将服务器利用到极致。

1.2 Docker概念

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

总结:docker是一种容器技术,他解决容器环境迁移问题

2、Docker安装

# 1、yum 包更新到新 
yum update 

# 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/linux/centos/docker-ce.repo 

# 4、 安装docker,出现输入的界面都按 y 
yum install -y docker-ce 

# 5、 查看docker版本,验证是否验证成功 
docker -v

镜像加速器

阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登陆后,左侧菜单选中 镜像加速器就可以看到你的专属地址了:

在/etc/docker/daemon.json,文件末尾增加如下内容

//每个人都不同,要自行申请再复制
{  
"registry-mirrors": ["https://你的ID.mirror.aliyuncs.com"] 
}

3、Docker架构

3.1 基本组成

在这里插入图片描述

  1. 镜像(image):docker镜像好比一个模板,可以通过这个模板来创建容器(container),一个镜像可以创建多个容器,类似Java中的Class

  2. 容器(container):类似Java中通过Class创建的实例,Object;容器可以理解为一个简易的系统

  3. 仓库(repository):存放镜像的地方,分为共有仓库和私有仓库

  • Docker Hub:国外的
  • 阿里云:配置镜像加速

4、Docker命令

4.1 进程相关的命令

启动docker服务:
systemctl start docker

停止docker服务:
systemctl stop docker

重启docker服务:
systemctl restart docker

查看docker服务状态:
systemctl status docker

设置开机启动docker服务:
systemctl enable docker

4.2 镜像相关命令

镜像命令包括如下内容:查看镜像、搜索镜像 、拉取镜像 、删除镜像

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

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

#例:查找redis镜像
docker search redis

拉取镜像:从Docker仓库下载镜像到本地,镜像名称格式为 名称:版本号,如果版本号不指定则是新的版本 lastest。

如果不知道镜像版本,可以去docker hub 搜索对应镜像查看
docker pull 镜像名称
docker pull redis #下载最新版本redis
docker pull redis:5.0 #下载5.0版本redis

删除镜像:删除本地镜像
docker rmi 镜像id/名称 #删除指定本地镜像
docker images -q #查看所有的镜像列表
docker rmi $(docker images -q) #删除全部镜像

4.3 容器相关命令

查看容器、创建容器、进入容器、启动容器、停止容器、删除容器、查看容器信息

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

创建并启动容器
docker run 参数
docker run -it --name=c1 centos:7 /bin/bash #创建交互式容器
docker run -id --name=c2 centos:7 #创建守护式容器

参数说明:

  • i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭。
  • t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。
  • d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容 器不会关闭。
  • it 创建的容器一般称为交互式容器,-id 创建的容器一般称为守护式容器
  • –name:为创建的容器命名
  • -p 指定容器的端口 如-p 8080::8080
    -p 主机端口:容器端口
    -p 容器端口
  • -P 随机指定端口

进入容器
docker exec -it 容器名/容器id /bin/bash

停止容器
docker stop 容器名

启动容器
docker start 容器名

删除容器:如果容器是运行状态则删除失败,需要停止容器才能删除
docker rm 容器名/容器id
docker rm -f $(docker ps -aq) #删除所有容器

查看容器信息
docker inspect 容器名

把容器中文件拷贝到宿主机
docker cp 容器id:目录

5、Docker容器的数据卷

5.1 数据卷概念及作用

问题:Docker 容器删除后,在容器中产生的数据何去何从?
在这里插入图片描述
问题:Docker 容器和外部机器可以直接交换文件吗?
在这里插入图片描述
容器之间想要进行数据交互?
在这里插入图片描述

数据卷概念

  • 数据卷是宿主机中的一个目录或文件
  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步
  • 一个数据卷可以被多个容器同时挂载
  • 一个容器也可以被挂载多个数据卷

数据卷的作用

  • 容器数据持久化
  • 外部机器和容器间接通信
  • 容器之间数据交换

5.2数据卷配置

创建启动容器时,使用 –v 参数 设置数据卷
docker run … –v 宿主机目录(文件):容器内目录(文件) …

注意:

  1. 容器目录必须是绝对路径
  2. 如果目录不存在,会自动创建
  3. 可以挂载多个数据卷

在这里插入图片描述

挂在一个容器卷
docker run -it --name=c1 -v /root/data:/root/data_container centos:7 /bin/bash

一个容器挂载多个数据卷
docker run -it --name=c2 \
-v ~/data2:/root/data2 \
-v ~/data3:/root/data3 \
centos:7
注:在linux中可使用 \ 使得命令行换行

两个容器挂载同一个数据卷
docker run -it --name=c1 -v /root/data:/root/data_container centos:7 /bin/bash
docker run -it --name=c2 -v /root/data:/root/data_container centos:7 /bin/bash
注:在一个容器中修改文件,看到另一个容器也跟着

5.3数据卷容器配置

多容器进行数据交换,多个容器挂载同一个数据卷容器,完成数据交互。即是创建一个容器,挂载一个目录,让其他容器继承自该容器( --volume-from )。

在这里插入图片描述

  1. 创建启动c3数据卷容器,使用 –v 参数 设置数据卷
    docker run –it --name=c3 –v /volume centos:7 /bin/bash
    注意:这里没有指定宿主机目录,默认生成一个宿主机目录
  1. 创建启动 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

6、Docker镜像的原理

思考:

  • Docker 镜像本质是什么?
  • Docker中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个个G?
  • Docker中一个tomcat镜像为什么有600MB,而一个tomcat安装包只有70多MB?

操作系统组成部分:

  • 进程调度子系统
  • 进程通信子系统
  • 内存管理子系统
  • 设备管理子系统
  • 文件管理子系统
  • 网络通信子系统
  • 作业控制子系统

Linux文件系统由bootfs和rootfs两部分组成

  • bootfs:包含bootloader(引导加载程序)和 kernel(内核)
  • rootfs: root文件系统,包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc等标准目录和文件
  • 不同的linux发行版,bootfs基本一样,而rootfs不同,如ubuntu,centos等
    在这里插入图片描述

docker镜像原理

  • Docker镜像是由特殊的文件系统叠加而成
  • 底端是 bootfs,并使用宿主机的bootfs
  • 第二层是 root文件系统rootfs,称为base image(基础镜像)
  • 然后再往上可以叠加其他的镜像文件
  • 统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
  • 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,底部的镜像成为基础镜像。
  • 当从一个镜像启动容器时,Docker会在顶层加载一个读写文件系统作为容器
    在这里插入图片描述

回答问题

  1. Docker 镜像本质是什么?
    答:是一个分层文件系统

  2. Docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个个G?
    答:Centos的iso镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层

  3. Docker 中一个tomcat镜像为什么有600MB,而一个tomcat安装包只有70多MB?
    答:由于docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖于父镜像和基础镜像,所有整个对外暴露的tomcat镜像大小600多MB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值