Docker、Portainer、K8S环境搭建
安装Docker
安装步骤
-
安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
-
配置阿里云yum源,以便加速下载docker包
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
重建缓存
yum makecache fast
-
安装docker客户端
yum -y install docker-ce
-
设置ustc的镜像源;可加速docker镜像下载;ustc docker mirror的优势之一就是不需要注册,是真正的公共服务:https://mirrors.ustc.edu.cn/help/dockerhub.html
-
编辑该文件(如果不存在,就创建一个):
vim /etc/docker/daemon.json
-
在文件中输入如下内容并保存(第二个为阿里云的源):
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn", "https://registry.cn-hangzhou.aliyuncs.com"]}
-
重启docker服务:
systemctl restart docker
-
查看源配置:
docker info|grep Mirrors -A 2
-
-
启动docker
systemctl start docker
-
运行docker hello-world,验证docker安装
docker run hello-world
Docker常用操作命令
Docker容器信息
-
查看容器版本
docker version
-
查看容器版本号
docker -v
-
查看容器信息
docker info
-
查看容器帮助
docker --help
镜像操作(对于镜像的操作可使用镜像名、镜像ID)
-
查看镜像
docker images
-
搜索镜像
docker search 镜像名称
例如查找nginx镜像:
docker search nginx
-
拉取镜像
docker pull 镜像名称
例如拉取镜像halo:
docker pull ruibaby/halo:latest
-
上传镜像
docker push 镜像名称
-
删除镜像
docker rmi 镜像名称或者镜像ID
例如删除镜像halo:
docker rmi ruibaby/halo
或者docker rmi caebc1d425f9
-
强制删除镜像(针对基于有已运行容器进程的镜像)
docker rmi -f 镜像名称或者镜像ID
-
多个镜像删除,不同镜像间以空格间隔
docker rmi -f 镜像名称1 镜像名称2 ……
或者
docker rmi -f 镜像ID1 镜像ID2 ……
-
删除本地全部镜像
docker rmi -f $(docker images -q)
-
镜像构建
-
编写dockerfile
vim /usr/mydockerfile
-
构建docker镜像
docker build -f /usr/mydockerfile -t mydocker:1.1
-
容器操作(对于容器的操作可使用CONTAINER ID 或 NAMES)
-
创建并启动容器
创建容器命令:docker run 镜像名 参数
创建容器常用的参数说明:
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
–name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射 -
查看容器
- 查看正在运行的容器:
docker ps
- 查看正在运行的容器:
docker ps -q
- 查看所有容器:
docker ps -a
- 查看停止的容器:
docker ps -f status=exited
- 查看运行容器总文件大小:
docker ps -s
- 查看最近创建的n个容器(这里n=5):
docker ps -n 5
- 查看正在运行容器[容器名=halo]的IP:
ocker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' halo
- 查看正在运行的容器:
-
容器启动与停止
- 启动一个已经被停止的容器:
docker start CONTAINER_ID\NAMES
- 重启容器:
docker restart CONTAINER_ID\NAMES
- 停止运行中的容器:
docker stop CONTAINER_ID\NAMES
- 杀掉运行中的容器:
docker kill CONTAINER_ID\NAMES
- 启动一个已经被停止的容器:
-
容器删除
- 删除一个已停止的容器:
docker rm CONTAINER_ID\NAMES
- 强制删除一个运行中的容器:
docker rm -f CONTAINER_ID\NAMES
- 强制删除所有容器:
docker rm -f $(docker ps -a -q)
- 删除一个已停止的容器:
-
基于当前redis容器创建一个新的镜像
参数:-a 提交的镜像作者;-c 使用Dockerfile指令来创建镜像;-m :提交时的说明文字;-p :在commit时,将容器暂停;命令如下:
docker commit -a="Lundy" -m="my redis" [redis容器ID] myredis:v2.0
-
网络管理
- 随机分配端口号:
docker run -P
- 绑定特定端口号(主机的所有网络接口的5000端口均绑定容器的5000端口):
docker run -p 5000:5000
- 绑定主机的特定接口的端口号:
docker run -p 127.0.0.1:5000:5000
- 查看容器的5000端口对应本地机器的IP和端口号:
docker port <CONTAINER_ID> 5000
- 随机分配端口号:
PS: 目前很流行的说法是podman会代替docker; 但个人从开发角度认为,docker的易用性好于podman。podman需要搭配Buildah和Skopeo 工具才会更全面好用。如果从运维安全角度,可以优先考虑podman。从开发角度,还是建议docker
安装Kind
-
下载kind到用户执行目录
curl -Lo /usr/local/bin/kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64
-
添加执行权限
chmod +x /usr/local/bin/kind
-
验证安装成功
kind -h
安装K8S
k8s需要依赖 kubelet、kubeadm、kubectl; 因此在安装k8s前需要先安装这3个组件;为了防止网络访问问题;推荐配置阿里云源镜像进行安装;具体安装步骤如下:
-
配置阿里云源命令;复制以下命令粘贴到命令行窗口,然后回车即可:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
-
安装kubelet、kubeadm、kubectl这3个组件
yum install kubelet kubeadm kubectl -y
-
查看版本信息
kubectl version --client
-
创建k8s集群
kind create cluster --name wsl2k8s
踩坑记录: 在执行这一步创建k8s集群命令时,有可能会出现以下错误(本人第一次搭建时出现过):
ERROR: failed to create cluster: failed to ensure docker network: command "docker network create -d=bridge -o com.docker.network.bridge.enable_ip_masquerade=true -o com.docker.network.driver.mtu=1500 --ipv6 --subnet fc00:f853:ccd:e793::/64 kind" failed with error: exit status 1
出现此错误的原因为:Docker daemon默认只支持IPv4地址。
解决方案参考:https://www.cnblogs.com/yangyuliufeng/p/9989812.html
直接编辑/etc/docker/daemon.json文件,加入以下内容:
{ "ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64" }
其中2001:db8:1::/64是IPv6地址段,非固定值,可根据需要修改。
保存好daemon.json文件后,使用systemctl restart docker命令重启Docker,然后再重新执行指令创建k8s集群即可。
-
创建成功后,我们通过下面的命令看下节点信息:
kubectl cluster-info --context kind-wsl2k8s
效果如图:
安装K8S图形化控制面板
图形化控制面板有多个,可根据个人喜好选择,以下介绍两种:
K8S原生Dashboard
-
执行如下命令创建
Dashboard
节点kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
可通过
kubectl describe pod -n kubernetes-dashboard
查看创建日志如上显示,节点创建成功!
-
创建管理用户配置并获取token
-
创建
yaml
文件vim admin-user.yaml
-
添加文件内容,下面内容就是我们要创建的节点信息
--- apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard
-
在
k8s
中创建:kubectl apply -f admin-user.yaml
删除节点:
kubectl delete -f admin-user.yaml
-
执行以下命令获取授权token
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
-
复制token备用:复制上一步的token字符串备用
-
-
运行执行K8S代理命令(访问控制面板需要以代理的形式访问)
kubectl proxy
如需后台执行,则为:
kubectl proxy &
-
在浏览器中访问如下地址:
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/*#/error?namespace=kuboard*
出现如上界面后,输入刚才获取的token,点击登录,即可进入控制台:
安装kuboard控制面板(此控制面板由国人开发 ,有中文界面)
-
执行docker命令安装kuboard;具体命令如下:
先执行
ifconfig
,查看docker的IP地址;记录下IP地址,后面有用(172.17.0.1
)查看官方部署文档; 部署命令如下:
把命令中
KUBOARD_ENDPOINT
的内网IP
改为Docker的IP地址,然后执行sudo docker run -d \ --restart=unless-stopped \ --name=kuboard \ -p 10010:80/tcp \ -p 10086:10081/tcp \ -e KUBOARD_ENDPOINT="http://172.17.0.1:10010" \ -e KUBOARD_AGENT_SERVER_TCP_PORT="10086" \ -v /root/kuboard-data:/data \ eipwork/kuboard:v3.3.0.6
踩坑记录1:
- 注意上面启动命令中
KUBOARD_ENDPOINT
的内网IP
,根据官方文档说明,这个IP
不建议使用127.0.0.1
或者localhost
,所以我用的IP
地址是docker IP地址:172.17.0.1
;或者也可以使用127.0.0.2
,但后面生成探针文件时,仍需要修改为Docker的IP地址:踩坑记录2; - 命令中的端口说明:
80
端口和10081
端口分别为Kuboard 的 Web 服务端口和 Kuboard Agent Server 端口,不能更改!第4行和第6行的10010
端口为为宿主机访问Kuboard的映射端口,可根据需要修改,但要保持一致!第5行和第7行的10086
端口也可以根据需要修改,同样要保持一致!
- 注意上面启动命令中
-
测试安装是否成功
curl 172.17.0.1:10010
如图显示则为安装成功。
-
访问kuboard:在
windows
的浏览器中通过localhost:10010
或者127.0.0.1:10010
访问kuboard
默认登录信息:
- 用户名:
admin
- 密 码:
Kuboard123
登录后的界面如上图
- 用户名:
-
添加K8S集群信息
-
点击添加集群,然后选择
agent
,填入集群名称和集群描述,然后点“确定” -
点“确定”后,进入如下界面:
执行第一条生成探针指令:
curl -k 'http://172.17.0.1:10010/kuboard-api/cluster/wsl2k8s/kind/KubernetesCluster/wsl2k8s/resource/installAgentToKubernetes?token=oFVF5kKOFV0470kTVCh6hxpZ5p4Y6pQc' > kuboard-agent.yaml
踩坑记录2(如果前面运行的docker命令中没有使用docker的IP地址,则有此坑):
执行
curl -k 'http://127.0.0.2:10010/kuboard-api/cluster/wsl2k8s/kind/KubernetesCluster/wsl2k8s/resource/installAgentToKubernetes?token=vQAz6C4eJY9AN0yjI4zNCB8kePhPVr6k' > kuboard-agent.yaml
此命令后,在本地生成了一个探针文件,然后我们需要把这个探针文件导入到k8s
中,但在导入之前,我们必须要先修改下这个yaml
文件,否则后面会出错;修改内容如下:-
先执行
ifconfig
,查看docker的IP地址 -
记录下docker的IP地址(172.17.0.1),后面有用。
-
执行文件编辑命令:
vim kuboard-agent.yaml
; 在文件中找到KUBOARD_ENDPOINT
和KUBORAD_AGENT_HOST
,把下面的value
中的ip
改成我们wsl
中docker
的地址;总共有两个地方(除了截图,往下翻还有),一定要全部改掉!
-
-
创建探针服务的命令,也就是页面上的第二行命令:
kubectl apply -f ./kuboard-agent.yaml
执行后,正常情况下,在kuboard网页上会出现以下提示:
执行完毕后勾选“我已执行导入命令”
勾选后,出现以上几个状态检查命令; 再次依次拷贝执行;
kubectl get pods -n kuboard -o wide -l "k8s.kuboard.cn/name in (kuboard-agent-1f3x577, kuboard-agent-1f3x577-2)"
看到如图状态,即为安装导入成功。
-
安装完成
-
PS: K8S很重,需要占用大量资源;我8GB内存的笔记本电脑,在wsl2搭建完K8S环境后,没有运行别的容器。内存占用就达到了80%以上;因此,如果仅个人开发,不建议使用K8S;推荐使用Portainer。
安装Portainer
因为K8S非常占用资源,比较适用生产服务器上使用,更方便运维。
而对于日常开发,我更推荐另一款可视化的容器镜像的图形管理工具:Portainer
;利用Portainer可以轻松构建,管理和维护Docker环境。 而且完全免费,基于容器化的安装方式,方便高效部署。以下为具体安装步骤:
-
搜索镜像
docker search portainer
如图,搜索结果列出了各个版本的 Portainer ;值得一说的是,Portainer原生并不支持中文,但在大神做了汉化处理;因此我们选择第一个CE汉化版;如果习惯英文的,也可以选择官方版本。
-
下载镜像
docker pull 6053537/portainer-ce
-
运行镜像
docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock 6053537/portainer-ce
-
在浏览器访问管理界面:http://localhost:9000
第一次访问需要设置用户密码;输入密码后点击创建用户即可
-
选择本地环境–>local; 即可看到控制面板仪表盘信息;安装完成