- docker
- 搭配zookeeper容器,软连接到本地data和conf
- 表示启动容器后执行的操作
- K8S
- google源
- https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -">sudo curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
- sudo apt-get update
- cat <
/etc/apt/sources.list.d/kubernetes.list - https://apt.kubernetes.io/ kubernetes-xenial main">deb https://apt.kubernetes.io/ kubernetes-xenial main
- EOF
- sudo apt-get install -y kubelet kubeadm kubectl —allow-unauthenticated
- 国内源
- 附录
docker
命令
Dockerfile
# 告诉 Docker 使用哪个镜像作为基础FROM ubuntuMAINTAINER yanjingRUN mkdir -p /usr/lib/jvm/jdk1.8RUN mkdir /usr/local/tomcatRUN mkdir /usr/local/zookeeper# COPY 复制本地文件到镜像COPY jdk1.8/ /usr/lib/jvm/jdk1.8/COPY tomcat/ /usr/local/tomcat/COPY zookeeper/ /usr/local/zookeeper/COPY web.war /usr/local/tomcat/webapps/ENV JAVA_HOME /usr/lib/jvm/jdk1.8ENV JRE_HOME ${JAVA_HOME}/jreENV CLASSPATH .:${JAVA_HOME}/lib/dt.jar:${JRE_HOME}/lib/tool.jarENV TOMCAT_HOME /usr/local/tomcatENV PATH ${JAVA_HOME}/bin:${JRE_HOME}/bin:${TOMCAT_HOME}/bin:${ZOOKEEPER_HOME}/bin:$PATH# 向外部开放端口EXPOSE 8090ENTRYPOINT ["zkServer.sh", "start"]# 容器启动后运行的程序CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
build
# build镜像(具名file)如果改变了Dockerfile名字,则需要指定 -f 文件名称docker build -t deepdraw_image:test -f ./deepdawDockerFile .docker build -t xiaochangwei/tomcat:v1 --rm=true .# 默认当前目录的Dockerfiledocker build -t deepdraw_image:test .
镜像
# 查看centos镜像是否存在docker search centos# 利用pull命令获取镜像docker pull centos# 方仓库注册服务器下载较慢,可以从其他仓库下载docker pull dl.dockerpool.com:5000/ubuntu:12.04# commit 修改已有镜像# 其中,-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a 可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息$ sudo docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2# tagsudo docker tag 5db5f8471261 ouruser/sinatra:devel# pushsudo docker push ouruser/sinatra# 删除镜像docker rmi image_name/image_iddocker rm -fv $(sudo docker ps -aq) # 注意括号内也要sudodocker rmi $(sudo docker images | grep "none" | awk '{print $3}') # 删除所有none的镜像# 导入导出镜像docker save -o centos.tar xianhu/centos:git # 保存镜像, -o也可以是--outputdocker load -i centos.tar # 加载镜像, -i也可以是--input
run
# 查看正在运行的容器信息$sudo docker ps$sudo docker container ls# 终止状态的容器可以用 docker container ls -a 命令看到$sudo docker ps -a$sudo docker container ls -a# 日志docker logs container_name/container_id# 启动一个容器# 这里-it是两个参数:-i和-t。前者表示打开并保持stdout,后者表示分配一个终端(pseudo-tty)# -i: 以交互模式运行容器,通常与 -t 同时使用;# -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;# -d: 后台运行容器,并返回容器ID;docker run ubuntu:18.04 /bin/echo 'Hello world'docker run -it centos:latest /bin/shdocker run -d -p 8080:8080 jpressdocker run --name javademo -d -p 7001:7001 jdk8demo# 进行挂载目录,运行tomcat容器,设置开机自启:--restart=alwaysdocker run -d -p 8088:8080 -v /warPackage/:/usr/local/tomcat/webapps --restart=always docker.io/tomcat# 所有的stdout都输出到logdocker run centos:latest /bin/sh -c "while true; do echo hello; sleep 1; done"docker run -d centos:latest /bin/sh -c "while true; do echo hello; sleep 1; done"
操作容器
# 启动、停止、重启容器命令:docker start container_name/container_iddocker stop container_name/container_iddocker restart container_name/container_id# 删除容器docker rm container_name/container_iddocker rm -f container_name/container_id # 运行中的#清理所有处于终止状态的容器docker container prune# 进入容器$sudo docker exec -it d3a946c4b2bc bash$sudo docker attach d3a946c4b2bc # 如果从这个 stdin 中 exit,会导致容器的停止
bash或sh终端
bash is not present in mariadb Docker image. Use docker exec -it e44671200b7c /bin/sh or simply docker exec -it e44671200b7c sh instead.
部署web应用
- docker入门(利用docker部署web应用) 理论了解为主
- Dockerfile的使用以及docker部署java项目 dockerfile方式
- 使用Docker部署war包项目 非dockerfile方式
数据库连接
- docker容器应用链接宿主或其他容器的mysql数据库
- Docker容器内连接宿主机的Mysql服务器 ——— mysql8赋予权限要这么操作 ```bash sudo docker build -t deepdraw-war:net -f ./deepdawDockerFile .
sudo docker run -d -p 8090:8090 deepdraw-war:net
搭配zookeeper容器,软连接到本地data和conf
sudo docker run —network host -v /home/yanjing/deploy/zk/dockerZk/data:/data -v /home/yanjing/deploy/zk/dockerZk/conf:/conf —name zookeeper-2181 -d zookeeper:3.5.5
表示启动容器后执行的操作
ENTRYPOINT /tomcat/bin/startup.sh && tail -F /tomcat/logs/catalina.out
CMD [“/docker_home/local/tomcat7/bin/catalina.sh”,”run”]
[docker搭建zookeeper集群](https://blog.csdn.net/ypp91zr/article/details/89423878?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.control): docker内连接主机的data和conf(新建文件,与主机zookeeper区分开)<a name="P9hnL"></a>### 其它命令```bashENV CATALINA_OPTS -Xms128m -Xmx1024m -XX:PermSize=64M -XX:MaxPermSize=512MRUN cd /tomcat/logs && echo "1" >>count.txt
数据管理
数据卷
# 在主机里使用以下命令可以查看 web 容器的信息# 数据卷 信息在 "Mounts" Key 下面$ docker inspect web# 创建一个数据卷$ docker volume create my-vol# 查看所有的 数据卷$ docker volume ls# 查看指定 数据卷 的信息$ docker volume inspect my-vol# 启动一个挂载数据卷的容器$ docker run -d -P --name web \# -v my-vol:/usr/share/nginx/html \--mount source=my-vol,target=/usr/share/nginx/html \nginx:alpine# 删除数据卷$ docker volume rm my-vol$ docker volume prune
挂载主机目录
$ docker run -d -P \--name web \# -v /src/webapp:/usr/share/nginx/html \--mount type=bind,source=/src/webapp,target=/usr/share/nginx/html \nginx:alpine
K8S
概念
- 10分钟看懂Docker和K8S
[ ] k8s基本概念(用户视角)
安装配置
- ubuntu 安装 k8s
- Ubuntu下k8s安装教程
install_docker.sh
sudo apt-get updatesudo apt-get install -y apt-transport-https ca-certificatescurl gnupg-agent software-properties-commoncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -sudo apt-key fingerprint 0EBFCD88sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"sudo apt-get updatesudo apt-get -y install docker-ce docker-ce-cli containerd.io
install_k8s.sh
```shellgoogle源
sudo curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update
cat <
/etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get install -y kubelet kubeadm kubectl —allow-unauthenticated
国内源
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <
<a name="sj7eB"></a>### 安装 master 节点[kubernetes安装(国内环境)](https://zhuanlan.zhihu.com/p/46341911)看评论,用阿里镜像,旧版本。```bashsudo kubeadm init --apiserver-advertise-address=192.168.3.8--image-repository=registry.aliyuncs.com/google_containers--pod-network-cidr=10.244.0.0/16--kubernetes-version=1.17.3
安装成功
Your Kubernetes control-plane has initialized successfully!To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configYou should now deploy a pod network to the cluster.Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/Then you can join any number of worker nodes by running the following on each as root:kubeadm join 192.168.3.8:6443 --token qd7rym.cstgtuobf9nc2v62 \--discovery-token-ca-cert-hash sha256:c6dc1dbc2ec89188c6883862b4a89d442bd9a6ac4959e2948bb8260fe01861b2
kubernetes出于安全考虑默认情况下无法在master节点上部署pod,于是用下面方法解决:
kubectl taint nodes --all node-role.kubernetes.io/master-
部署java应用
Kubernetes之在k8s中部署Java应用
k8s-集群里的三种IP(NodeIP、PodIP、ClusterIP)
k8s通过service访问pod
# 排错kubectl describe pod tikv-0kubectl describe nodes host1kubectl get pods -o wide# 集群内部测试连通性,Pod 分配了各自的 IP,这些 IP 只能被 Kubernetes Cluster 中的容器和节点访问。curl 10.244.1.28# 测试nodeport是否正常工作kubectl get svc# PORT(S) 为 80:30713。8080 是 ClusterIP 监听的端口(每个节点都有该端口),# 30713 则是节点上监听的端口。Kubernetes 会从 30000-32767 中分配一个可用的端口,# 每个节点都会监听此端口并将请求转发给 Service。url 192.168.3.8:30713# 日志sudo kubectl logs deepdraw-66d9964485-tqd2z
">

