目录
- Docker简介
- docker 安装
- ubuntu 安装 docker
- Docker常用命令
- 查看可用的镜像(以java为例)
- 下载镜像
- 列出镜像
- 删除本地镜像
- 新建并启动容器
- 列出容器
- 停止容器
- 强制停止容器
- 启动已停止的容器
- 查看容器所有信息
- 查看容器日志
- 查看容器里的进程
- 进入容器
- 删除容器
- 使用docker部署nginx
- K8S 安装
Docker简介
Docker是一个开源的容器引擎,它有助于更快地交付应用。 Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用 Docker可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
docker 安装
ubuntu 安装 docker
apt-get update && apt-get install -y apt-transport-https curl
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
apt-get install docker.io -y
docker version
Docker常用命令
查看可用的镜像(以java为例)
docker search java
下载镜像
docker pull java:8
列出镜像
docker images
即可列出已下载的镜像
删除本地镜像
docker rmi java
新建并启动容器
使用以下docker run命令即可新建并启动一个容器,该命令是最常用的命令,它有很多选项,下面将列举一些常用的选项。
-d选项:表示后台运行
-P选项:随机端口映射
-p选项:指定端口映射,有以下四种格式。
-- ip:hostPort:containerPort
-- ip::containerPort
-- hostPort:containerPort
-- containerPort
--net选项:指定网络模式,该选项有以下可选参数:
--net=bridge:默认选项,表示连接到默认的网桥。
--net=host:容器使用宿主机的网络。
--net=container:NAME-or-ID:告诉 Docker让新建的容器使用已有容器的网络配置。
--net=none:不配置该容器的网络,用户可自定义网络配置。
docker run -d -p 91:80 nginx
这样就能启动一个 Nginx容器。在本例中,为 docker run添加了两个参数,含义如下:
-d 后台运行
-p 宿主机端口:容器端口 #开放容器端口到宿主机端口
访问 http://Docker宿主机 IP:91/
列出容器
docker ps -a
停止容器
docker stop f0b1c8ab3633(容器ID)
强制停止容器
docker kill f0b1c8ab3633
启动已停止的容器
docker start f0b1c8ab3633
查看容器所有信息
docker inspect f0b1c8ab3633
查看容器日志
docker container logs f0b1c8ab3633
查看容器里的进程
docker top f0b1c8ab3633
进入容器
使用docker container exec命令用于进入一个正在运行的docker容器。如果docker run命令运行容器的时候,没有使用-it参数,就要用这个命令进入容器。一旦进入了容器,就可以在容器的 Shell 执行命令了
docker container exec -it f0b1c8ab3633 /bin/bash
删除容器
docker rm f0b1c8ab3633
使用docker部署nginx
docker pull nginx:latest
1.docker images
2. mkdir -p /root/docker/my-dinner/nginx/config/
3. 配置nginx http代理 nginx-lb.conf
docker run --name nginx-lb -d -p 80:80 -v /root/docker/my-dinner/nginx/config/nginx-lb.conf:/etc/nginx/nginx.conf nginx:latest
4. 使用ngix 作为http server服务器,启动两个 http server实例。 nginx.conf
docker run --name nginx-test -d -p 8081:80 -v /root/docker/my-dinner/nginx/config/nginx.conf:/etc/nginx/nginx.conf -v /root/docker/my-dinner/nginx/www:/usr/share/nginx/html:/usr/share/nginx/html -v /root/docker/my-dinner/nginx/logs/:/var/log/nginx nginx:txy
docker run --name nginx-test2 -d -p 8082:80 -v /root/docker/my-dinner/nginx/config/nginx.conf:/etc/nginx/nginx.conf -v /root/docker/my-dinner/nginx/www2:/usr/share/nginx/html -v /root/docker/my-dinner/nginx/logs2/:/var/log/nginx nginx:txy
**3 volume**
volume也是绕过container的文件系统,直接将数据写到host机器上,只是volume是被docker管理的,docker下所有的volume都在host机器上的指定目录下/var/lib/docker/volumes。
docker run -d -p 8081:80 -v /root/docker/nginx:/mydata nginx:txy
将 /root/docker/nginx 挂载到 容器里 的 /mydata 目录
如果volume是空的则container中的目录也会是空,但是如果volume中已经有内容,则会将其拷贝到container中的目录。
***要使在宿主机上做的修改能在docker里马上生效,则需要设置 文件的权限为777
K8S 安装
DNS 设置
/etc/resolvconf/resolv.conf.d/base
nameserver 192.168.1.1
resolvconf -u
**2)安装 k8s**
//Ubuntu16.04安装K8s步骤和踩坑记录
https://www.jianshu.com/p/67083a454fcc
https://www.jianshu.com/p/f2d4dd4d1fb1 ubuntu 安装 k8s
******
****
k8s启动参数
2.1) 关闭 swap
swapoff -a
同时把/etc/fstab包含swap那行记录删掉。
2.2) 更新源并安装 kubeadm, kubectl, kubelet 软件包
apt-get update -y
apt-get install -y apt-transport-https
设置源
在 /etc/apt/sources.list 和 /etc/apt/sources.list.d/kubernetes.list 增加
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
添加秘钥(master 和 node)
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
2.3) 安装 k8s组件
apt-get update
apt-get install -y kubelet kubeadm kubectl
systemctl enable kubelet
2.4) 使用 kubeadmin 初始化 master 节点
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.13.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.13.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.13.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.2.24
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.2.6
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.13.2
把这些images重新tag一下
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.13.2 k8s.gcr.io/kube-controller-manager:v1.13.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.13.2 k8s.gcr.io/kube-scheduler:v1.13.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.13.2 k8s.gcr.io/kube-proxy:v1.13.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.2.6 k8s.gcr.io/coredns:1.2.6
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.13.2 k8s.gcr.io/kube-apiserver:v1.13.2
#设置 docker 和 kubelet 的 cgroupdriver 为 cgroupfs 不然启动kubelet要失败
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com",
"https://quay-mirror.qiniu.com"
],
"exec-opts": [ "native.cgroupdriver=cgroupfs" ],
"live-restore": true
}
#接着执行
systemctl daemon-reload && systemctl restart docker
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf(或者/lib/systemd/system/kubelet.service)
[Service]
ExecStart=
ExecStart=/usr/bin/kubelet --kubeconfig=/etc/kubernetes/kubelet.conf --pod-manifest-path=/etc/kubernetes/manifests --cgroup-driver=cgroupfs --feature-gates SupportPodPidsLimit=false --feature-gates SupportNodePidsLimit=false
#接着执行
systemctl daemon-reload && systemctl restart kubelet (或者 systemctl start kubelet)
kubeadm reset
2.5) 初始化 master 节点
kubeadm init --apiserver-advertise-address=192.168.1.5 --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.17.0 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --ignore-preflight-errors=all
--apiserver-advertise-address: k8s 中的主要服务apiserver的部署地址,填自己的管理节点 ip
--pod-network-cidr: 这个是 k8s 采用的节点网络,因为我们将要使用flannel作为 k8s 的网络,所以这里填10.244.0.0/16就好
--image-repository: 拉取的 docker 镜像源,因为初始化的时候kubeadm会去拉 k8s 的很多组件来进行部署,所以需要指定国内镜像源,下不然会拉取不到镜像。
--kubernetes-version: 这个是用来指定你要部署的 k8s 版本的,一般不用填,不过如果初始化过程中出现了因为版本不对导致的安装错误的话,可以用这个参数手动指定。
--ignore-preflight-errors: 忽略初始化时遇到的错误,比如说我想忽略 cpu 数量不够 2 核引起的错误,就可以用--ignore-preflight-errors=CpuNum。错误名称在初始化错误时会给出来。
#查看 kubelet 日志
journalctl -xefu kubelet
# 查看已加入的节点
kubectl get nodes
# 查看集群状态
kubectl get cs
get pod --all-namespaces
**4) 部署 flannel 网络**
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
**5) 配置Node**
5.1) 在node 节点上执行 2.1-2.4
5.2) kubeadm join 192.168.1.5:6443 --token h7u22o.nk23ias5f1ft8hj9 --discovery-token-ca-cert-hash sha256:9f93785608c9a9de3e5d74e9ed30b8302691abfee7efd946a8c1b80d8582fe92
6)****使用 helm****
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.12.3-linux-amd64.tar.gz
tar zxvf helm-v2.12.3-linux-amd64.tar.gz
cd linux-amd64/
mv helm /usr/bin/
helm version
helm install --name nls --set nls.version=1.0 k8s.tar.gz
ln -sf /var/run/resolvconf/resolv.conf /etc/resolv.conf
apt-get -y install upstart
https://www.runoob.com/docker/docker-install-nginx.html