- 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 ubuntu
MAINTAINER yanjing
RUN mkdir -p /usr/lib/jvm/jdk1.8
RUN mkdir /usr/local/tomcat
RUN 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.8
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib/dt.jar:${JRE_HOME}/lib/tool.jar
ENV TOMCAT_HOME /usr/local/tomcat
ENV PATH ${JAVA_HOME}/bin:${JRE_HOME}/bin:${TOMCAT_HOME}/bin:${ZOOKEEPER_HOME}/bin:$PATH
# 向外部开放端口
EXPOSE 8090
ENTRYPOINT ["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 .
# 默认当前目录的Dockerfile
docker 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
# tag
sudo docker tag 5db5f8471261 ouruser/sinatra:devel
# push
sudo docker push ouruser/sinatra
# 删除镜像
docker rmi image_name/image_id
docker rm -fv $(sudo docker ps -aq) # 注意括号内也要sudo
docker rmi $(sudo docker images | grep "none" | awk '{print $3}') # 删除所有none的镜像
# 导入导出镜像
docker save -o centos.tar xianhu/centos:git # 保存镜像, -o也可以是--output
docker 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/sh
docker run -d -p 8080:8080 jpress
docker run --name javademo -d -p 7001:7001 jdk8demo
# 进行挂载目录,运行tomcat容器,设置开机自启:--restart=always
docker run -d -p 8088:8080 -v /warPackage/:/usr/local/tomcat/webapps --restart=always docker.io/tomcat
# 所有的stdout都输出到log
docker 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_id
docker stop container_name/container_id
docker restart container_name/container_id
# 删除容器
docker rm container_name/container_id
docker 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>
### 其它命令
```bash
ENV CATALINA_OPTS -Xms128m -Xmx1024m -XX:PermSize=64M -XX:MaxPermSize=512M
RUN 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 update
sudo apt-get install -y apt-transport-https ca-certificates
curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo 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)看评论,用阿里镜像,旧版本。
```bash
sudo 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/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You 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-0
kubectl describe nodes host1
kubectl 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