这是我参与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镜像,速度太慢.
- USTC:中科大镜像加速器(docker.mirrors.ustc.edu.cn)
- 阿里云 : (www.aliyun.com/)
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 镜像相关命令
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会实现同步,从而实现两个容器之间的交互.
- 分别创建两个容器,两个容器都挂载宿主机中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 )