安装命令如下: yum install -y docker 安装如图所示:1.2 查看是否安装成功
查看是否安装成功 yum list installed | grep docker 查询结果如图所示:1.3 启动docker
启动dcker systemctl start docker 启动如图所示:1.4 查看是否启动成功
查看docker 启动状态 systemctl status docker 查看状态如图所示:2、 Docker 的核心概念 2.1 Docker的镜像(images)
镜像的定义:一个镜像就代表一个软件,通俗点说比如MySQL是一个软件, 他在docker中就是一个镜像,镜像就是相当于一个软件的安装包。2.2 Docker的容器 (container)
容器定义:一个容器就代表一个服务,通俗点说比如通过一个镜像安装包将MySQL 安装了起来并提供了一些服务,这个服务就叫做容器。一个镜像可以启动多个容器。2.3 Docker的仓库 (repository)
仓库定义:仓库是用来存储所有的docker镜像的具体位置。仓库分为两种, 第一种是远程仓库,第二种是本地仓库。远程仓库是docker官方在全球 范围内维护的唯一的一个仓库。本地仓库是我们自己的镜像存储在本地的镜像。2.4 镜像、容器、仓库之间的关系 2.5 Docker 镜像查询地址
https://hub.docker.com/ 备注:镜像中含有以下标识表示为官方镜像。2.6 Docker 配置镜像加速服务
# 进入阿里云官网控制台搜索容器与镜像服务,找到镜像加速器查看配置文档。
# 修改配置文件
vim /etc/docker/daemon.json
# 写入以下配置
{
"registry-mirrors":[
"https://3pmzliym.mirror.aliyuncs.com"
]
}
# 执行更新文件命令
sudo systemctl daemon-reload
sudo systemctl restart docker
2.7 查看Docker镜像下载地址
# 查看Docker镜像下载地址(查看docker信息) docker info # 备注:以下圈起来的就是docker镜像下载地址3、 Docker 基础使用 3.1 Docker镜像下载
# 下载docker镜像 docker pull mysql:5.7 mysql是镜像名字,5.7是镜像的版本号3.2 重命名镜像
# 查看现有镜像 docker images # 重命名镜像 docker tag docker.io/mysql:5.7 mysql:5.73.3 docker 删除镜像
# 删除镜像(两种方式均可) docker rmi docker.io/mysql:5.7 docker image rm docker.io/mysql:5.73.4 启动MySQL镜像
# 启动镜像 docker run -itd --name mysql -p 8206:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.73.5 查看镜像启动状态
# 查看镜像启动状态 docker ps # 查看容器信息 docker container ls3.6 进入MySQL数据库
# 进入docker 环境 docker exec -it mysql /bin/bash # 使用数据库客户端 mysql -u root -h localhost -p1234563.7 Docker的基础命令 3.7.1 将tar包导入成镜像
# 将tar包导入成镜像 docker load -i 导入tar的镜像文件名称3.7.2 搜索镜像命令
# 搜索MySQL镜像 docker search mysql3.7.3 停止容器运行
# 停止容器运行 docker stop 7f9d31bc1f593.7.4 删除容器
# 删除容器 7f9d31bc1f59 是容器id docker rm 7f9d31bc1f593.7.5 查看容器运行日志
# 查看容器运行日志 docker logs c377ef3ca2f1 # 查看实时的日志 docker logs -f c377ef3ca2f1 # 查看实时的日志并加时间戳 docker logs -tf c377ef3ca2f1 # 查看最后多少条日志 docker logs --tail 100 c377ef3ca2f13.7.6 查看容器内的进程
# 查看容器内的进程 docker top c377ef3ca2f13.7.7 宿主机进入容器
# 从宿主机进入到容器内部 bash是容器内部的命令行 docker exec -it c377ef3ca2f1 bash # 退出容器 exit
# 操作系统与容器的文件交互 # 从容器复制文件到操作系统 docker cp c377ef3ca2f1:容器内的资源路径 操作系统中的路径 # 从操作系统复制文件到容器 docker cp 操作系统中的文件路径 容器id:容器内的资源路径3.7.9 查看容器内部的细节
# 查看容器内部的细节 docker inspect c377ef3ca2f13.7.10 Docker的数据卷 (Volume)
# 数据卷作用:实现宿主机系统和容器之间的文件共享。 # 数据卷的使用:在启动容器之前指定数据卷的映射关系 # -v 是数据卷的缩写 # 自定义数据卷 docker run -itd --name mysql -v 宿主机的目录:容器中的目录 -p 8206:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 # 自动数据卷 # 这个aa表示的是数据卷的名字没有回默认的创建(在docker的默认目录之下)同时会将容器中的目录结构和文件映射到aa之下。 docker run -itd --name mysql -v aa:容器中的目录 -p 8206:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.73.7.11 将运行的容器打包成一个自己的镜像
# 将运行的容器打包成一个自己的镜像 docker commit -m "描述信息" -a "作者信息" 容器id 镜像名称:版本号3.7.12 将镜像备份到另一台机器上
# 将镜像备份到另一台机器上 -o表示保存到哪个文件中 docker save 镜像名称:版本号 -o 文件名称3.8 Docker 的网络通信 3.8.1 docker 网络通信的作用
docker运行外部访问容器或者通过容器互联的方式来提供网络服务。以此来达到容器之间相互通信的需求。3.8.2 docker 网络通信的基础 3.8.2.1 docker虚拟网桥的创建
当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge网桥, 可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。当创建一个 Docker 容器的时候, 同时会创建了一对 veth pair 接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。 这对接口一端在容器内,即 eth0;另一端在本地并被挂载到 docker0 网桥,名称以 veth 开头 (例如 vethAQI2QT)。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。 Docker 就创建了在主机和所有容器之间一个 虚拟共享网络。
网桥使用注意点:一般在使用docker网桥bridge实现容器与容器之间通信的时候都是站在 应用角度对容器进行的通信。这样所有的通信请求都会经过docker0网桥来进行通信。 这样会加大网桥的压力,所以每个容器都可以创建自己的一个网络。3.8.2.2 docker创建自定义网桥
# 创建自定义网桥命令 docker network create bridge_name # 启动容器指定网桥 docker run -itd --network bridge_name --name mysql -p 8206:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 # 删除网桥 docker network rm bridge_name3.8.2.3 docker 网络通信相关命令
# 查询目前有的网桥 docker network ls # 查看网桥信息 docker inspect bridge_name # 删除未使用的网桥 docker network prune # 查看端口映射配置 docker port fa 803.8.2.4 docker容器访问外部网络
# 容器要想访问外部网络,需要本地系统的转发支持。在Linux 系统中,检查转发是否打开。 # 查看转发是否打开(如果是0则是没有开启转发,需要手动打开) # 如果在启动 Docker 服务的时候设定 --ip-forward=true, Docker 就会自动设定系统的 ip_forward 参数为 1 sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1 # 打开转发 sysctl -w net.ipv4.ip_forward=13.8.2.5 docker容器之间的访问 3.8.2.5.1 容器之间通信的条件
容器之间能否能够进行通信需要两个条件: 容器的网络拓扑是否已经相互关联。默认情况下,所有容器都会被连接到docker0网桥上。 本地系统的防火墙软件-- iptables 是否允许通过。3.8.2.5.2 容器之间的访问端口
默认情况下,不同容器之间是允许网络互通的。如果为了安全考虑可以在/etc/docker/daemon.json
文件下配置{"icc": false}来禁止容器之间相互通信。如果想要指定端口之间的通信那么
可以通过--link=CONTAINER_NAME:ALIAS 选项来访问容器的开放端口。
执行命令 sudo iptables -nL可以查看iptables的规则。
3.8.2.5.3 映射容器端口到宿主机
容器所有到外部网络的连接,源地址都会被 NAT 成本地系统的 IP 地址。 这是使用 iptables 的源地址伪装操作实现的。查看主机的 NAT 规则。 sudo iptables -t nat -nL3.9 Docker 的数据卷(Volume) 3.9.1 数据卷的作用
数据卷的导读:我们将镜像启动的时候就会变成容器,比如MySQL,需要进行存储数据, 那么这些数据就会存储在容器中,一旦我们删除这个容器从,MySQL之前持久化的数据 就会一并被删除掉,显然这不是我们想要的,那么我们就会想怎么能够删除容器而不删除数据。 那么就可以使用数据卷。 数据卷的作用:将容器和宿主机的磁盘进行一个映射,将容器中的数据文件映射到宿主机的磁盘中, 也可以将宿主机的文件映射到容器之中,最终达到宿主机和容器之间的数据共享的结果。3.9.2 数据卷的特点
数据卷可以在容器之间互相共享和重用 对数据卷的修改会立刻生效影响到容器的数据 对数据卷的更新修改不会影响到镜像 数据卷会一直存在,即使容器被删除3.9.3 数据卷的操作
# 自定义数据卷 docker run -v 宿主机的路径:容器的路径 # 自动创建数据卷 docker run -v 数据卷名称(自己起的):容器内路径 # 查看数据卷 docker volume ls # 查看数据卷的细节 docker volume inspect 卷名 # 删除数据卷 docker volume rm 数据卷名称(id) # 删除未使用的数据卷 docker volume prune # 创建数据卷 dockcer volume create 数据卷名称4、 Docker的镜像原理
镜像是一直轻量级的、可独立执行的软件包。它具有以下特性,包含这个软件运行的所有的代码包括 运行时的库和环境变量,配置文件等。他是一个联合的文件系统(unionFS)这是分层的,并且高性能 的文件系统,他支持文件的多层叠加。unionFS是docker镜像的基础,镜像可以通过分层来继承。那 么镜像为什么需要采用分层结构,原因其实很简单为了资源的共享。如果不能够进行资源共享那么 docker的一些公共的基础镜像就会很大占用资源空间。
欢迎关注我的微信公众号,更多内容将在微信公众号中发布:



