Docker容器
模块一:安装docker
在三台服务器的完成docker的安装
1,配置IP地址进行连接
2,关闭selinux,防火墙,配置主机名和域名解析
systemctl disable firewalld;systemctl stop firewalld //关闭防火墙和开机自启
iptables -F; iptables -X; iptables -Z; iptables-save
hostname set-hostname master //修改主机名为master
vim /etc/hosts //编辑hosts文件 增加主机IP地址映射
192.168.100.10 master
192.168.100.20 slaver
192.168.300.30 client
cat >>/etc/hosts << EOF //编辑hosts文件,脚本的写法
192.168.100.10 master
192.168.100.20 slaver
192.168.300.30 client
EOF
vim /etc/selinux/config //修改selinux状态
/* 修改的状态检查 */
systemctl status firewalld;iptables -L;hostname;cat /etc/hosts;getenforce
3,配置仓库
tar -zxvf Docker.tar.gz -C /opt //解压Docker到opt
Docker 文件解压到 /opt ,挂载光盘
mkdir /opt/centos7 //创建挂载文件夹
mount /dev/cdrom /opt/centos7 //将光盘挂载到刚刚创建的文件夹
echo "mount /dev/cdrom /opt/centos7" >> /etc/rc.d/rc.local //开机自动挂载
chmod +x /etc/rc.d/rc.local //赋给执行权限,不然开机不会执行
mkdir /tmp/bf
mv /etc/yum.reposd.d/C* /tmp/bf
vim /etc/yum.repos.d/local.repo //配置yum源
[docker]
name=docker
baseurl=file:///opt/Docker
gpgcheck=0
enable=1
[centos]
name=centos
baseurl=file:///opt/centos7
gpgcheck=0
enable=1
4,配置服务器master
yum install vsftpd
vim /etc/vsftpd/vsftpd.conf
anon_root=/opt
systemctl start vsftpd;systemctl enable vsftpd
yum install nfs-utils //共享文件夹,三台服务器都要装
vim /etc/exports
/opt *(rw,no_root_squash,sync) //共享opt目录下所有的文件,权限为读写,sync同步
/*
1,no_root_squash:当登录NFS主机使用共享目录的使用者是root时,其权限将被转换成为匿名使用者,通常它的UID与GID都会变成nobody身份。
2,root_squash;如果登录NFS主机使用共享目录的使用者是root,那么对于这个共享的目录来说,它具有root的权限。
*/
/* 在另外两台主机上配置 */
mount -t nfs master的IP地址:/opt /opt //将master的文件夹挂载到本地opt文件下
df -Th //查看挂载
echo "mount -t nfs master的IP地址:/opt /opt" >> /etc/rc.d/rc.local //挂载开机自启
chmod +x /etc/rc.d/rc.local //赋给执行权限
source /etc/rc.d/rc.local //执行脚本
systemctl start nfs; systemctl enable nfs
showmount -e 127.0.0.1 //查看共享的文件夹
5,关闭交换分区
三台机器都要做
free //查看交换分区,公有云主机中是不提供交换分区的
swapoff -a //临时关闭交换分区,所有docker都需要关闭交换分区,影响性能
vim /etc/fstab //永久关闭交换分区
#swap
/* 配置sysctl.conf */
cat /etc/redhat-release //查看内核版本
modprobe br_netfilter //加载内核模块
/* 凡是跑docker的机器都需要执行,7.5内核以下没有这个,需要 update升级,不然会导致,下面设置的两条防火墙参数无法执行 */
vim /etc/sysctl.conf //编辑Linux内核设置参数文件增加三条路由转发协议
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
/*
不用去记上面参数,只需要记住大概就行,然后使用内核参数命令去筛选查找
sysctl -a | grep ip_forward
sysctl -a | grep nf-call
*/
sysctl -p //使修改的命令生效
6,安装Docker支持
yum install yum-utils device-mapper-persistent-data lvm2
/*不安装lvm2 storage driver(存储驱动器) 会是overlay2文件系统,安装会是另一种文件系统,
目前最好的文件系统是aufs,但是红帽不支持 */
7,安装Docker
yum install docker-ce
systemctl start docker;systemctl enable docker
//centos8 可以使用systemctl start docker is enable;一条命令启动并开机自启
8,检查Docker
docker info
模块二:docker的基本使用和docker-compose编排
1,docker基本命令
/* 要会用help命令,docker help ,查看docer子命令用man ,例如man docker-run*/
docker load
/*进入docker/image子目录下导入镜像,也可直接执行docker目录下的脚本直接导入所有镜像
cd /opt/docker/image
docker load-i centos_latest.tar
*/
docker images //查看导入的镜像,镜像完整名字是 路径名/仓库名:标签
docker rmi 镜像名 //删除镜像
docker tag
/* 给镜像打标签
docker tag centos centos:v2
*/
docker run
/*运行镜像
docker run -itd --name centos 镜像名字:标签可以省略
i 是执行 t:是交互 d:是后端
模板:
docker run -itd --name 容器名 -p主机端口:容器端口 -v指定镜像启动数据卷 镜像名字
*/
docker exec
/*使用镜像,例如执行centos镜像下/bin/bash 这条命令
docker exec-it centos /bin/bash
*/
/* 这样就可以直接使用这个镜像去装软件了,查看镜像版本 cat /etc/os-release */
docker ps -a //看现在正在运行的容器
docker stop xxx //停止使用哪个容器
docker rm xxx //删除容器,先关闭容器才能删除
/*
1、批量删除容器
docker rm $(docker container ls -a -q)
2、批量删除镜像
docker rmi $(docker image ls -a -q)
*/
docker pull
docker push
docker login
2,安装docke-compose
echo $PATH //查看系统使用的命令都在哪个目录下
/*在docker-compose目录下的文件都是docker-compose的执行文件,将这个文件复制到/usr/local/bin/目录下,然后赋予执行权限,这样在系统的任何目录下都可以使用 docker-compose命令 */
cp /opt/compose/docker-compose /usr/local/bin
chmod -x /usr/local/bin/docker-compose
docker-compose --version //查看docker-compose版本
/* docker-compose 目录下文件作用 */
app.py //会在屏幕上输出网页,使用py来编写的
Dockerfile //把这个文件进行导入,用py语句来执行app.py这个脚本
requirements.txt //这个文件里面提供了两个镜像名称
docker-compose.yml //这个文件是用来编排的,
3,导入所有镜像
/*执行docker下的脚本文件*/
./images.sh
4,准备docker-compose文件夹
mkdir /tmp/test
cp /opt/compose/docker-compose/* /tmp/test
cd /tmp/test/ //到这个文件夹下,这些文件可以自动的编辑镜像,自动的启动服务
5,创建docker-compose项目内容
(1),应用文件app.py,文件中内容有错更改为下面的:
import time
import redis
from flask import Flask
app = Flask(_name_)
cache = redis.Redis(host='redis',port=6379)
def get_hit_count();
retries = 5
while True;
try:
return cache.incr('hits')
excpt redis.execptions.ConnectionError as exc:
if retries == 0;
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen{}
times.\n'.format(count)
if _name_ == '_main_':
app.run(host="0.0.0.0",debug=True)
(2),镜像需求文件requirements.txt
(3),Python应用需要得Dockerfile文件
(4),docker-compose.yml的编排文件
(5),通过docker-complose up 命令启动应用
docker-compose up //这个命令必须在compose目录下执行和docker run 的区别是,compose可以一起启动多个容器
docker-compose ps //查看compose平台下启动了的容器
(6),验证服务:输入IP地址加端口号验证
(7),停止服务,更新服务器文件,绑定挂载,重建服务
模块三,Harbor仓库配置
他有两种仓库:
一种仓库是简易仓库,由Docker公司提供:有一个镜像 镜像名字叫registry_lasterst.tar 优点:很简单,缺点:没有图形界面
1,导入镜像
cd /opt/
./image.sh //执行脚本导入所有镜像
2,创建安全认证
mkdir -p /data/ssl //创建证书
cd /data/ssl //进入证书
/* key密钥 crt证书 csr请求 */
/*第一步:创建私钥和权威认证证书 */
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key //创建私钥 ca.key 权威认证密钥
-x509 -days 2.235 -out ca.crt //创建证书 用这个对等下我们生成的请求进行签名
/*第二部:生成请求 */
openssl req -newkey rsa:4096 -nodes -sha256 -keyout
www.yidaoyun.com.key -out www.yidaoyun.com.csr //使用网站www.yidaoyun.com.key生成请求 www.yidaoyun.com.csr
/*第三步:利用密钥和请求 去签名 生成一个权威认证的签名证书,这个签名证书会出现在网站上被客户端访问到 */
openssl x509 -req -days 2.235 -in www.yidaoyun.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out
//网站证书csr和网站私钥key需要成对出现
cp -rfv www.yidaoyun.com.crt /etc/pki/ca-trust/sources/anchors
updata-ca-trust enable //使证书生效
updata-ca-trust extract
3,查看docker-compose信息
docker-compose --version
4,解压Harbor安装包
mkdir /opt/harbor //这个是主服务器要用到的
tar -zxvf /opt/harbor-offline.tgz -C /opt/harbor
5,配置harbor
vim /opt/harbor/harbor.cfg
/* 修改一下信息 */
hostname = 服务器IP
ui_url_protocol = https
ssl_cert = /data/ssl/www.yidaoyun.com.crt //存放证书的位置
ssl_cert_key = /data/ssl/www.yidaoyun.com.key ///证书密钥存放的位置
harbor_admin_password = 000000 //harbor仓库的账号密码
6,使用脚本安装harbor
cd /opt/harbor
./prepare //执行脚本
./install.sh --with-notary --with-clair //这个脚本是用来加载系统当中harbor的镜像
7,访问测试
https://服务器IP地址
模块四:Harbor仓库服务器作为docker客户端与镜像安装配置
1,配置客户端的非安装仓库
vim /etc/docker/daemon.json
{
"insecure-registries":["服务器IP地址"]
} //使用docker info 查看非安全仓库 insecure registries:
systemctl daemon-reload //重新加载
systemctl restart docker //重启docker服务
2,重启harbor私有镜像仓库
./prepare //清理掉所有进程
docker-compose down
docker-compose up -d
3,登入验证harbor仓库
docker login https://192.168.100.10
admin,000000
4,修改镜像标签,上传镜像
docker tag centos 192.168.100.10/library/centos:latest //给centos打上标签latest
docker push 192.168.100.10/library/centos:latest //将centos镜像上传
5,开启安全扫描功能
./install.sh --with-notary --with-clair //只需要在上传一个镜像时候启用就可以
6,查看上传结果,进行扫描,设置仓库安全等级
模块五:Docker客户端拉取和上传镜像
1,向客户端下发域名证书
master:
cd /data/ssl
scp -r www.yidaoyun.com.crt 192.168.100.30:/etc/pki/ca-trust/source/ancors
client:
update-ca-trust enable
update-ca-trust extract
systemctl restart docker
2,客户端配置本地非安全仓库
vim /etc/docker/daemon.json
{
"insecure-registries":["192.168.100.10"]
}
systemctl daemon-reload
systemctl restart docker
3,使用客户端登入仓库
cd /etc/pki/ca-trust/source/anchors
docker login https://192.168.100.10 //docker 服务器的IP地址
admin,000000
4,在客户端上导入镜像
docker load i /opt/images/nginx_latest.tar //加载docker镜像
docker tag nginx 192.168.100.10/library/nginx:latest //将刚刚加载的nginx镜像打标签latest
docker push 192.168.100.10/library/nginx:latest
5,查看镜像结果
模块六:harbor主从复制服务器
1,安装harbor
在slaver从服务器上完成模块三
2,导入全部镜像
cd /opt
./image.sh
3,创建安全认证,
mkdir -p /data/ssl
cd /data/ssl
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 2.235 -out ca.crt
openssl req -newkey rsa:4096 -nodes -sha256 -keyout www2.yidaoyun.com.key -out www2.yidaoyun.com.csr
openssl x509 -req -days 2.235 -in www2.yidaoyun.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out www2.yidaoyun.com.crt
cp -rvf www2.yidaoyun.com.crt /etc/pki/ca-trust/sources/anchors
4,..... 和模块三一样
5,分发证书
/*Harbor-Master节点从Harbor-Slave节点拷贝证书*/
master:
scp 192.168.100.20:/data/ssl/www2.yidaoyun.com.crt /etc/pki/ca-trust/source/anchors
update-ca-trust enable
update-ca-trust extract
systemctl restart docker
6,重启Harbor
master:
docker-compose down
./prepare
./install.sh --with-notary --with-clair
7,构建Harbor主从同步并检查
/*
默认系统只同步标签为latest的镜像
仓库管理>新建目标>添加从库
系统管理>复制管理>新建规则>创建复制规则>即刻
*/
docker rm-f 'docker ps -aq' //删除所有的容器
模块七:swarm编排
架构:
192.168.100.10 master
192.168.100.20 node
1,基本配置
配置主机名,主机解析,关闭防火墙,安装docker,参考模块一
2,配置Docker API(两台)
vi /lib/systemd/system/docker.service
将
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
改为
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
//开放tcp2375端口,允许所有网络访问,使master和node之间能够通过API(0.0.0.0:2375)去远程调用对方的docker
systemctl daemon-reload
systemctl restart docker
docker info //查看是否开启API
3,查看swarm镜像
docker images | grep swarm
4,初始化集群
docker swarm init --advertise-addr 192.168.100.10
生成docker swarm join --token 的加入命令
可以通过docker swarm join-token manage 进行查看
5,node节点加入集群
docker swarm join --token xxxxxx-xxxxx-xxxxx-xxxxxxx 192.168.100.10:2377 //node 作为一个计算节点加进去swarm
//这条命令就是master生成的docker swarm join --token 命令
6,验证集群
// 登入master:
docker node ls //就可以看见现在有两台容器编排服务器 一主一从 *代表是管理节点
7,安装Portainer
//安装portainer管理界面对swarm进行管理
docker volume create portainer_data //创建存储卷
docker service create --name portainer --publish 9000:9000 --replicas=1 --constraint 'node.role==maager' --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock --mount type=volume,src=portainer_data,dst=/data portainer/portainer -H unix:///var/run/docker.sock
8,登入Portainer检查
http://192.168.100.10:9000
9,运行service
docker service create --name web --replicas 2 nginx //使用nginx镜像 去启web服务,这个web的副本数启两台容器
docker service rm web //删除这个服务,先不要删后面还有用
docker service ls //查看docker启动的服务和副本
docker service ps web //查看web服务启动的容器
10,service 伸缩
docker service scale web=5 //拓展刚刚的web服务启动的容器为5台
docker service ls
docker service ps web
11,调度节点
docker node update --availability drain master //进入维护模式,这样的话这个节点就不再承担计算了
docker node ls //查看dokcer节点,查看节点可用性 availability
docker service ps web //查看web服务启动的容器,master主机上已经没有启动的容器了
12,访问service
docker service update --publish-add 8080:80 web //对web服务进行端口映射
13,直接新建带有访问端口的service
docker service create --name web_server --publish 8080:80 --replicas=2 nginx
标签:opt,容器,compose,--,etc,镜像,Docker,docker
From: https://blog.51cto.com/u_15433935/6326666