Docker之基础1

144 阅读7分钟

这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战

1 Docker概述

我们开发的代码会接触到不同环境:开发环境、测试环境以及生产环境: 在这里插入图片描述

1.1 Docker概述

  • Docker 是一个开源的应用容器引擎
  • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上
  • 容器是完全使用沙箱机制,相互隔离
  • 容器性能开销极低

1.2 docker安装

==本示例基于CentOS 7 安装演示== Docker官网

1.2.1 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

1.3 docker架构

在这里插入图片描述

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

1.4 配置 Docker 镜像加速器

1 默认情况下,将来从docker hub(hub.docker.com/)上下载 docker镜像,速度太慢.

2 查看文件/etc/docker/daemon.json

# 执行如下命令: 
cat /etc/docker/daemon.json

在这里插入图片描述

2 Docker命令

2.1 进程相关命令

# qido启动docker服务
systemctl start docker

# 停止docker服务
systemctl stop docker

# 重启docker服务
systemctl restart docker

# 查看docker服务状态
systemctl status docker

# 开机启动docker服务
systemctl enable docker

2.2 Docker 镜像相关命令

菜鸟教程之docker命令

2.2.1 查看镜像

# 查看本地所有的镜像
docker images

docker images -q # 查看所用镜像的id
  • REPOSITORY:镜像名称
  • TAG:镜像标签
  • IMAGE ID:镜像ID
  • CREATED:镜像的创建日期
  • SIZE:镜像大小

2.2.2 搜索镜像

docker search 镜像名称
  • NAME:镜像名称
  • DESCRIPTION:镜像描述
  • STARS:用户评价,反应一个镜像的受欢迎程度
  • OFFICIAL:是否官方
  • AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的

2.2.3 拉取镜像

# ()可选 如果不指定版本号,默认下载最新版本,可去docker hub查询镜像版本
docker pull 镜像名称(:版本号)

2.2.4 删除镜像

# 删除指定本地镜像
docker rmi 镜像id 

# 删除所有本地镜像
docker rmi docker images -q

2.3 容器相关的命令

2.3.1 查看容器

docker ps # 查看正在运行的容器
docker ps –a # 查看所有容器,包括正在运行和停止的容器

2.3.2 创建并启动容器

docker run 参数

参数说明:

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

1 交互式容器:交互式方式创建并启动容器,启动完成后,直接进入当前容器。使用exit命令退出容器。需要注意的是以此种方式 启动容器,如果退出容器,则容器会进入停止状态.

#创建并启动名称为 mycentos7 的交互式容器;
# 下面指令中的镜像名称 centos:7 也可以使用镜像id 
# 使用的shell是/bin/bash
docker run -it --name=mycentos7 centos:7 /bin/bash

2 守护式容器: 创建一个守护式容器;如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器.

#创建并启动守护式容器  -id和di相等
docker run -di --name=mycentos2 centos:7

#登录进入容器命令为:docker exec -it container_name (或者 container_id) /bin/bash(exit退出 时,容器不会停止)
docker exec -it mycentos2 /bin/bash

2.3.3 进入容器

# docker exec -it container_name (或者 container_id) /bin/bash
#exit退出 时,容器不会停止)
docker exec 参数 
# eg: 
docker exec -it mycentos2 /bin/bash

2.3.4 停止容器

docker stop 容器名称或者容器id

2.3.5 启动容器

docker start 容器名称或者容器id

2.3.6 删除容器

注意:如果容器是运行状态则删除失败,需要停止容器才能删除

#删除指定容器
docker rm 容器名称或者容器id

# 删除所有容器:
docker rm docker ps -a -q

2.3.7 查看容器信息

docker inspect 容器名称或者容器id

在这里插入图片描述 ps: 容器之间在一个局域网内,linux宿主机器可以与容器进行通信;但是外部的物理机笔记本是不能与容器直接通信的,如果需要则需要通过宿主机器端口的代理.

3 Docker容器的数据卷

3.1 数据卷概念

  • 数据卷是宿主机中的一个目录或文件
  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步
  • 一个数据卷可以被多个容器同时挂载
  • 一个容器也可以被挂载多个数据卷 在这里插入图片描述 作用:
  • 容器数据持久化
  • 外部机器和容器间接通信
  • 容器之间数据交换

3.2 配置数据卷

创建启动容器时,使用 –v 参数 设置数据卷

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

注意事项:

  • 目录必须是绝对路径
  • 如果目录不存在,会自动创建
  • 一个容器可以挂载多个数据卷
  • 一个数据卷也可以被多个容器挂载
  • 两个容器可以挂载同一个容器
# 如将容器的/root/data_container目录挂载到宿主机的/root/data目录 
docker run -it --name=cl -v /root/data:/root/data_container centos /bin/bash

在这里插入图片描述 同时我们我们回到宿主机中,可以在data文件夹下创建一个文件cf.txt ,可以发现在容器中也会生成cf.txt文件.

总结:

  • 数据卷的持久化:
    • 当我们把c1容器删除后,宿主机中的数据卷依然存在。 所以当我们重新创建一个容器的同时依然可以挂载宿主机中的data文件夹,对应data里的数据依然同步到容器中.
  • 一个容器可以挂载多个数据卷:
  • 多个容器可以挂载同一个数据卷:
    • 分别创建两个容器,两个容器都挂载宿主机中data目录,当 修改c3容器的data目录c4会实现同步,从而实现两个容器之间的交互. 在这里插入图片描述

3.3 配置数据卷容器

多容器进行数据交换

  • 多个容器挂载同一个数据卷
  • 数据卷容器 在这里插入图片描述 步骤:
  • 创建启动c3数据卷容器,使用 –v 参数 设置数据卷
docker run –it --name=c3 –v /volume centos:7 /bin/bash
  • 创建启动 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

总结:

  • 数据卷: 宿主机的一个目录或文件
  • 数据卷作用:
    • 容器数据持久化
    • 客户端和容器数据交换
    • 容器间数据交换
  • 数据卷容器
    • 创建一个容器,挂载一个目录,让其他容器继承自该容器( --volume-from )