Docker 容器
1. Docker是什么?
Docker 是开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Q&A
a.什么是容器?
依托与linux 内核功能的虚拟化技术
b. docker 是什么?
能够把应用程序自动部署到容器的开源引擎
c. docker 跟原有的工具有何区别?
-
传统的部署模式是:安装(包管理工具或者源码包编译)->配置->运行;
-
Docker的部署模式是:复制->运行。
d. docker 会对服务器端开发/部署带来什么变化?
实现更轻量级的虚拟化,方便快速部署
2. Docekr应用场景
web应用的自动化打包和发布
自动化测试和持续集成、发布
在服务型环境中部署和调整数据库或其他应用
3. Docker 优势:
持续集成、版本控制、可移植性、隔离性和安全性
4. Docker的安装
Docker 安装【41 开发服务器安装实例】
1. 安装最新版
# install docker
1. curl -fsSL https://get.docker.com | sudo bash -s docker --mirror Aliyun
2. rm -rf get-docker.sh
安装指定版本
查看新版本列表:
yum list docker-ce --showduplicates | sort -r
选择指定版本:
sudo yum install docker-ce-18.03.0.ce-1.el7
查看安装的版本:
docker -v
2.设置开机启动
sudo systemctl enable docker
sudo systemctl restart docker
3.配置镜像加速器(原有 dockerHub 镜像源较慢)
创建文件夹:
sudo mkdir -p /etc/docker
编辑 /etc/docker/daemon.json 文件,没有则创建,添加如下内容
{
"registry-mirrors": ["https://*****.mirror.aliyuncs.com"]
}
或者直接执行以下命令:
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://*****.mirror.aliyuncs.com"]
}
EOF
tips:https://*****.mirror.aliyuncs.com 是阿里云免费提供的镜像加速地址,可在阿里云账号"容器镜像服务"中免费获取
4.重启docker
sudo systemctl daemon-reload sudo systemctl restart docker
<<< 踩到的坑 >>>
1. 启动时报错:
xfsprogs版本低
yum install xfsprogs
2.修改 服务器docker存储库位置(默认位置磁盘不够,做了修改)
/data/dockerlib
修改 docker 默认存储路径(服务器磁盘不够才去修改)
# 关闭docker服务
systemctl stop docker.service
# 移动数据到新的目录
mv /var/lib/docker /data/dockerlib
# 修改docker.service文件,使用-g参数指定存储位置
vim /usr/lib/systemd/system/docker.service
在 ExecStart=/usr/bin/dockerd 后添加 --graph /data/dockerlib
ExecStart=/usr/bin/dockerd --graph /data/dockerlib
# reload配置文件
systemctl daemon-reload
# 重启docker
systemctl restart docker.service
【Docker的卸载】
docker 卸载不干净
例如:
官网介绍docker卸载的方法一般为
1> yum remove docker-ce -y
2> rm -fr /var/lib/docker*
但试过后依然无法安装新版本,尤其是高版本降到低版本docker,问题在于docker并没有卸载干净
正确的卸载方法如下:
1> yum list installed|grep docker 查看
2> yum remove [docker名称]
5. Docker之docker-compose 组件
Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器,使用Docker Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。
docker-compose默认的模板文件是 docker-compose.yml,其中定义的每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来自动构建。
docker-compose的安装
#下载docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#给docker-compose执行权限
sudo chmod +x /usr/local/bin/docker-compose
#测试安装是否成功,成功的话打印出docker-compose的版本信息
docker-compose --version
<<< 踩到的坑 >>>
下载docker-compose 时报错
error:
curl: (35) Peer reports incompatible or unsupported protocol version.
原因:
curl 不兼容或不支持的协议版本
解决方法(更新curl):
yum update -y nss curl libcurl
6. Docker 之网络配置
首先,要实现网络通信,机器需要至少一个网络接口(物理接口或虚拟接口)来收发数据包;此外,如果不同子网之间要进行通信,需要路由机制。
Docker 中的网络接口默认都是虚拟的接口。虚拟接口的优势之一是转发效率较高。 Linux 通过在内核中进行数据复制来实现虚拟接口之间的数据转发,发送接口的发送缓存中的数据包被直接复制到接收接口的接收缓存中。对于本地系统和容器内系统看来就像是一个正常的以太网卡,只是它不需要真正同外部网络设备通信,速度要快很多。
Docker 容器网络就利用了这项技术。它在本地主机和容器内分别创建一个虚拟接口,并让它们彼此连通(这样的一对接口叫做 veth pair)
1. 查看docker 独立网络
docker network ls
2. 创建独立网络环境
直接复制执行以下命令,可自定义网络IP
#!/bin/bash
docker network create \
--driver=bridge \
--subnet=171.205.0.0/16 \
--ip-range=171.205.0.0/24 \
--gateway=171.205.0.1 \
zhh-net
tips:zhh-net 是创建网络的名称(可创建不同网络,供不同容器组使用)
<<< 踩到的坑 >>>
在41服务器创建网络的时候,使用172网段,与宿主机(即41服务器)网段冲突,导致宿主机与容器网络不通容器网络
3. 删除网络
docker network rm [name]
4. 查看当前网络使用
docker network inspect name/id
============Cloud 微服务 Docker 部署 实例=============
准备工作:
1. docker , docker compose 和 虚拟网络(非必要,会默认) 环境安装配置 完成
2. 搭建阿里云私有镜像仓库(有不同的云都提供免费的镜像服务,自行选择)
a.创建阿里云账号,免费获取 容器镜像服务
b.在容器镜像服务中,创建命名空间来存放镜像
c.在需要使用私有仓库的 docker 机上登陆账号
。
。
。
未完待续
下一步实现【一处构建,处处运行】