自勉,持续学习,docker入门
简介
记住重要的几点:
- Docker 是一个开源的应用容器引擎
- 诞生于 2013 年初,基于 Go 语言实现
- 独特的容器技术,避免了不同环境下的部署问题。
- 容器是完全使用沙箱机制,相互隔离
- 容器性能开销极低
一、 docker 的基本架构
- 镜像(Image): Docker 镜像(Image),就相当于是 一个 root 文件系统。
- 容器(Container):镜像(Image)和容器(Contain er)的关系,就像是面向对象程序设计中的类和对象一 样,镜像是静态的定义,容器是镜像运行时的实例,我们可以把镜像理解成模板,而容器是一个个的复制品。一个镜像可以创建多个容器,每个容器的环境也是独立而统一的。
- 仓库(Repository):仓库可看成一个代码控制中心, 用来保存镜像,可以类比成 Maven 仓库。
二、安装 docker
Docker可以运行在MAC、Windows、CentOS、UBUNTU等操作系统上,本演示我们基于CentOS 7 安装
Docker。
官网:https://www.docker.com
# 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
# *************** 以上操作,在镜像中都已经安装完成!****************************8
# 5、 查看docker版本,验证是否验证成功
docker -v
至此,我们 docker 就安装好勒, 我们可以学习一下 docker 的命令:
# 启动 docker 服务
systemctl start docker # systemctl 是 system ctrl 缩写
# 停止 docker 服务
systemctl stop docker
# 查看docker服务状态
systemctl status docker
# 开机启动docker服务
systemctl enable docker
三、 image 镜像
下载 Image 需要配置 Image 仓地址,采用默认仓下载速度较慢,这里我们采用阿里云的 Image 仓地址下载。
- 登陆阿里云账号,https://www.aliyun.com/。
- 搜索栏搜索镜像
- 查看文件/etc/docker/daemon.json,确认文件已被修改
# 执行如下命令:
cat /etc/docker/daemon.json
至此,我们的 Image 仓算是配好了,但是我们还没有下载镜像,在下载镜像之前,我们先学习一下docker 关于镜像的命令。
# 查看本地所有的镜像
docker images
docker images –q # 查看所用镜像的id
# 从网络中查找需要的镜像
docker search 镜像名称
eg:
docekr search redis
# 拉取镜像
docker pull 镜像名称
docker pull 镜像名:<version>
eg:
docker pull mysql:5.7
# 删除镜像
docker rmi 镜像id # 删除指定本地镜像
docker rmi `docker images -q` # 删除所有本地镜像
四、容器
上文说过,镜像和容器的关系可以理解成模板和复制品,现在模板有了,我们需要创建复制品(容器)。
安装之前,我们还是按例学习一下容器相关的命令:
# 查看容器
docker ps # 查看正在运行的容器
docker ps –a # 查看所有容器,包括正在运行和停止的容器
# 查看容器信息
docker inspect 容器名称或者容器id
# 创建并启动容器
docker run 参数
eg:
docker run -id --name=容器名 centos:7 #守护式创建: 创建容器后,不进入容器内部; ---> 只要不手动停止,会一直在后台运行!
docker run -it --name=容器名 centos:7 #交互式创建: 创建容器后,直接进入容器内部; ---> 如果退出容器,容器自动停止!
# 进入容器
docker exec 参数 # 退出容器,容器不会关闭
eg:
docker exec -it mycentos2 /bin/bash
# 停止容器
docker stop 容器名称或者容器id
# 删除容器
docker rm 容器名称或者容器id
# 删除所有容器:
docker rm `docker ps -aq`
好啦, 命令学完了,我们开始部署容器吧。
我们还是以 MySQL 为例:
# 部署
docker run -it --name my_container centos:7
五、数据卷概念
在学习这个问题之前,我们需要先问几个问题:
- Docker 容器删除后,在容器中产生的数据还在吗?(会随之销毁 )
- Docker 容器和外部机器可以直接交换文件吗? (不可以,docker和外部机器是隔离的 )
- 容器之间想要进行数据交互?(通过数据卷或者宿主容器)
那我们如何理解数据卷这个概念呢?
- 数据卷是宿主机中的一个目录或文件
- 当容器目录和数据卷目录绑定后,对方的修改会立即同步,如图所示:
- 一个数据卷可以被多个容器同时挂载
- 一个容器也可以被挂载多个数据卷
配置数据卷
创建启动容器时,使用 –v 参数 设置数据卷
docker run ... –v 宿主机目录(文件):容器内目录(文件) ...
eg:
# 将宿主机 /root/data 目录和 /root/data_container 绑定,任意一边的修改都会同步到另一边。
docker run -it --name C1 -v /root/data:/root/data_container centos:7
配置数据卷容器
多个容器绑定一个数据卷,命令会比较多,关系撸起来也会比较复杂,可以考虑采用数据卷容器的方式,如图:
通过容器 c1 c2绑定数据卷容器 c3 ,再用 c3 绑定数据卷,如此便可以实现 c1 c2 甚至更多的容器数据同步,实现起来也比较简单。
步骤:
# 1.创建启动c3数据卷容器,使用 –v 参数 设置数据卷
docker run –it --name=c3 –v /volume centos:7 /bin/bash # volume 是自定义的目录名,/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