zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Kubernetes(k8s)的deployment资源

Kubernetesk8s资源 Deployment
2023-09-14 09:08:19 时间

1、为什么K8s要引入deployment资源。

答:deployment也是保证pod高可用的一种方式,明明已经有RC(Replication Controller),为什么还要引入deployment呢?是因为deployment解决了RC(Replication Controller)的一个痛点。是因为RC在进行版本升级的时候,会造成一个问题,就是它的svc(Service)短时间内访问不了了,deployment就是解决这个问题的。

2、创建一个deployment的配置文件。

 1 # 声明api的版本。
 2 apiVersion: extensions/v1beta1
 3 # kind代表资源的类型,资源是Deployment。
 4 kind: Deployment
 5 # 资源叫什么名字,是在其属性metadata里面的。
 6 metadata:
 7   # 第一个属性name的值是myweb,即Service的名字就叫做myweb。
 8   name: nginx-deployment
 9 # spec是详细,详细里面定义了一个容器。
10 spec:
11   # 副本的数量,比RC少了一个selector。
12   replicas: 3
13   # 模板,都是使用模板来启动Pod的。
14   template:
15     # 资源叫什么名字,是在其属性metadata里面的。
16     metadata:
17       # 给Pod贴上了一个标签,标签是app: nginx,标签是有一定的作用的。
18       labels:
19         app: nginx
20     # spec是详细,详细里面定义了一个容器。
21     spec:
22       # 定义一个容器,可以声明多个容器的。
23       containers:
24         # 容器的名称叫做nginx
25         - name: nginx
26         # 使用了什么镜像,可以使用官方公有的,也可以使用私有的。
27           image: 192.168.110.133/nginx:1.13
28         # ports定义容器的端口
29           ports:
30             #  容器的端口是80,如果容器有多个端口,可以在后面接着写一行即可。
31             - containerPort: 80

具体操作,如下所示:

 1 [root@k8s-master ~]# cd k8s/
 2 [root@k8s-master k8s]# ls
 3 pod  rc  svc
 4 [root@k8s-master k8s]# mkdir deploy
 5 [root@k8s-master k8s]# cd deploy/
 6 [root@k8s-master deploy]# ls
 7 [root@k8s-master deploy]# kubectl get rc 
 8 NAME      DESIRED   CURRENT   READY     AGE
 9 myweb     3         3         3         4d
10 [root@k8s-master deploy]# kubectl delete rc myweb 
11 replicationcontroller "myweb" deleted
12 [root@k8s-master deploy]# kubectl get rc 
13 No resources found.
14 [root@k8s-master deploy]# kubectl get svc 
15 NAME         CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
16 kubernetes   10.254.0.1       <none>        443/TCP        12d
17 myweb        10.254.210.104   <nodes>       80:30000/TCP   2d
18 [root@k8s-master deploy]# kubectl delete svc myweb 
19 service "myweb" deleted
20 [root@k8s-master deploy]# kubectl get svc 
21 NAME         CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
22 kubernetes   10.254.0.1   <none>        443/TCP   12d
23 [root@k8s-master deploy]# vim nginx-deploy.yaml
24 [root@k8s-master deploy]# 

然后开始创建deployment,如下所示:

1 [root@k8s-master deploy]# kubectl create -f nginx-deploy.yaml 
2 deployment "nginx-deployment" created

然后创建deployment资源完毕之后,可以查看创建的资源,如下所示:

 1 [root@k8s-master deploy]# kubectl get all -o wide
 2 NAME                      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
 3 deploy/nginx-deployment   3         3         3            0           2m
 4 
 5 NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE       SELECTOR
 6 svc/kubernetes   10.254.0.1   <none>        443/TCP   12d       <none>
 7 
 8 NAME                             DESIRED   CURRENT   READY     AGE       CONTAINER(S)   IMAGE(S)                     SELECTOR
 9 rs/nginx-deployment-3699032092   3         3         0         2m        nginx          192.168.110.133/nginx:1.13   app=nginx,pod-template-hash=3699032092
10 
11 NAME                                   READY     STATUS             RESTARTS   AGE       IP            NODE
12 po/nginx-deployment-3699032092-3jnk6   0/1       ImagePullBackOff   0          2m        172.16.85.2   k8s-master
13 po/nginx-deployment-3699032092-97bfm   0/1       ImagePullBackOff   0          2m        172.16.38.2   k8s-node3
14 po/nginx-deployment-3699032092-fmqkx   0/1       ImagePullBackOff   0          2m        172.16.5.2    k8s-node2
15 [root@k8s-master deploy]# 

我这里明显没有启动起来,说镜像拉取错误,仔细检查是nginx-deploy.yaml配置文件,在配置image的地方写错了,漏写了端口号导致的。

再使用命令创建一遍,就发现创建好了。deployment并不像RC直接去启动Pod,它们之间的区别是deployment会启动一个RS,RS拥有RC的百分之九十的功能,比RC的功能还多一些,由RC再去启动三个POD。

 1 [root@k8s-master deploy]# kubectl get deployment 
 2 NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
 3 nginx-deployment   3         3         3            0           5m
 4 [root@k8s-master deploy]# kubectl delete deployment nginx-deployment
 5 deployment "nginx-deployment" deleted
 6 [root@k8s-master deploy]# kubectl get deployment 
 7 No resources found.
 8 [root@k8s-master deploy]# kubectl get all -o wide
 9 NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE       SELECTOR
10 svc/kubernetes   10.254.0.1   <none>        443/TCP   12d       <none>
11 [root@k8s-master deploy]# kubectl create -f nginx-deploy.yaml 
12 deployment "nginx-deployment" created
13 [root@k8s-master deploy]# kubectl get all -o wide
14 NAME                      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
15 deploy/nginx-deployment   3         3         3            3           7s
16 
17 NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE       SELECTOR
18 svc/kubernetes   10.254.0.1   <none>        443/TCP   12d       <none>
19 
20 NAME                             DESIRED   CURRENT   READY     AGE       CONTAINER(S)   IMAGE(S)                          SELECTOR
21 rs/nginx-deployment-3018768667   3         3         3         7s        nginx          192.168.110.133:5000/nginx:1.13   app=nginx,pod-template-hash=3018768667
22 
23 NAME                                   READY     STATUS    RESTARTS   AGE       IP            NODE
24 po/nginx-deployment-3018768667-1c6lm   1/1       Running   0          7s        172.16.38.2   k8s-node3
25 po/nginx-deployment-3018768667-cvvjc   1/1       Running   0          7s        172.16.85.2   k8s-master
26 po/nginx-deployment-3018768667-grvlh   1/1       Running   0          7s        172.16.5.2    k8s-node2
27 [root@k8s-master deploy]# 

此时,已经有了一个deployment,那么如何让Pod里面的服务让外界访问呢,我们也是需要创建一个service的,除了使用配置文件进行创建,还可以通过命令进行关联。

 1 [root@k8s-master ~]# kubectl expose deployment nginx-deployment --port=80 --type=NodePort
 2 service "nginx-deployment" exposed
 3 [root@k8s-master ~]# kubectl get all -o wide
 4 NAME                      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
 5 deploy/nginx-deployment   3         3         3            3           1h
 6 
 7 NAME                   CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE       SELECTOR
 8 svc/kubernetes         10.254.0.1      <none>        443/TCP        12d       <none>
 9 svc/nginx-deployment   10.254.95.103   <nodes>       80:36848/TCP   23s       app=nginx
10 
11 NAME                             DESIRED   CURRENT   READY     AGE       CONTAINER(S)   IMAGE(S)                          SELECTOR
12 rs/nginx-deployment-3018768667   3         3         3         1h        nginx          192.168.110.133:5000/nginx:1.13   app=nginx,pod-template-hash=3018768667
13 
14 NAME                                   READY     STATUS    RESTARTS   AGE       IP            NODE
15 po/nginx-deployment-3018768667-1c6lm   1/1       Running   0          1h        172.16.38.2   k8s-node3
16 po/nginx-deployment-3018768667-cvvjc   1/1       Running   0          1h        172.16.85.2   k8s-master
17 po/nginx-deployment-3018768667-grvlh   1/1       Running   0          1h        172.16.5.2    k8s-node2
18 [root@k8s-master ~]# curl -I 192.168.110.133:36848
19 HTTP/1.1 200 OK
20 Server: nginx/1.13.12
21 Date: Wed, 17 Jun 2020 03:05:29 GMT
22 Content-Type: text/html
23 Content-Length: 612
24 Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT
25 Connection: keep-alive
26 ETag: "5acb8e45-264"
27 Accept-Ranges: bytes
28 
29 [root@k8s-master ~]# 

下面可以对nginx进行版本升级,不用创建配置文件,这里可以直接修改配置文件即可。

1 [root@k8s-master ~]# kubectl edit deployment nginx-deployment

具体修改内容,如下所示:

修改,保存之后再使用curl命令进行查看,发现版本已经进行了升级了的。

 1 [root@k8s-master ~]# curl -I 192.168.110.133:36848
 2 HTTP/1.1 200 OK
 3 Server: nginx/1.15.12
 4 Date: Wed, 17 Jun 2020 03:09:26 GMT
 5 Content-Type: text/html
 6 Content-Length: 612
 7 Last-Modified: Tue, 16 Apr 2019 13:08:19 GMT
 8 Connection: keep-alive
 9 ETag: "5cb5d3c3-264"
10 Accept-Ranges: bytes
11 
12 [root@k8s-master ~]# 

可以通过命令查看升级之后三个Pod节点的情况,这里可以看到多了一个rs/nginx-deployment-3181297949,之前的那个rs/nginx-deployment-3018768667都被设置为了0。

注意:这里我也出现了升级之后无法将Node2节点的Pod启动成功的情况,我重启了三台机器,三个节点的Pod都有了,这里可能是因为从私有仓库下载的地方没有配置好,重启之前Node2节点使用docker images命令是无法查看到私有仓库的nginx:1.15版本的,重启之后才可以看到。

 1 [root@k8s-master ~]# kubectl get all -o wide
 2 NAME                      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
 3 deploy/nginx-deployment   3         3         3            3           1h
 4 
 5 NAME                   CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE       SELECTOR
 6 svc/kubernetes         10.254.0.1      <none>        443/TCP        12d       <none>
 7 svc/nginx-deployment   10.254.95.103   <nodes>       80:36848/TCP   14m       app=nginx
 8 
 9 NAME                             DESIRED   CURRENT   READY     AGE       CONTAINER(S)   IMAGE(S)                          SELECTOR
10 rs/nginx-deployment-3018768667   0         0         0         1h        nginx          192.168.110.133:5000/nginx:1.13   app=nginx,pod-template-hash=3018768667
11 rs/nginx-deployment-3181297949   3         3         3         10m       nginx          192.168.110.133:5000/nginx:1.15   app=nginx,pod-template-hash=3181297949
12 
13 NAME                                   READY     STATUS    RESTARTS   AGE       IP            NODE
14 po/nginx-deployment-3181297949-9d3t0   1/1       Running   1          10m       172.16.59.2   k8s-node2
15 po/nginx-deployment-3181297949-mjtk3   1/1       Running   1          10m       172.16.16.2   k8s-master
16 po/nginx-deployment-3181297949-vp84j   1/1       Running   1          10m       172.16.32.2   k8s-node3
17 [root@k8s-master ~]# 

deployment的回滚操作,如下所示:

[root@k8s-master ~]# kubectl rollout undo deployment nginx-deployment

 1 [root@k8s-master ~]# curl -I 192.168.110.133:36848
 2 HTTP/1.1 200 OK
 3 Server: nginx/1.15.12
 4 Date: Wed, 17 Jun 2020 03:23:53 GMT
 5 Content-Type: text/html
 6 Content-Length: 612
 7 Last-Modified: Tue, 16 Apr 2019 13:08:19 GMT
 8 Connection: keep-alive
 9 ETag: "5cb5d3c3-264"
10 Accept-Ranges: bytes
11 
12 [root@k8s-master ~]# kubectl roll
13 rolling-update  rollout         
14 [root@k8s-master ~]# kubectl rollout undo deployment nginx-deployment
15 deployment "nginx-deployment" rolled back
16 [root@k8s-master ~]# curl -I 192.168.110.133:36848
17 HTTP/1.1 200 OK
18 Server: nginx/1.13.12
19 Date: Wed, 17 Jun 2020 03:25:22 GMT
20 Content-Type: text/html
21 Content-Length: 612
22 Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT
23 Connection: keep-alive
24 ETag: "5acb8e45-264"
25 Accept-Ranges: bytes
26 
27 [root@k8s-master ~]# 

可以查看deployment存在那些历史版本,如下所示:

1 [root@k8s-master ~]# kubectl rollout history deployment nginx-deployment 
2 deployments "nginx-deployment"
3 REVISION    CHANGE-CAUSE
4 2        <none>
5 3        <none>
6 
7 [root@k8s-master ~]# 

如果想要查看到历史版本中的改变记录、镜像版本,需要使用新的方式进行发布。

1 版本发布
2 kubectl run nginx --image=192.168.110.133:5000/nginx:1.13 --replicas=3
3 
4 版本升级
5 kubectl set image deploy nginx nginx=192.168.110.133:5000/nginx:1.15
6 
7 历史版本查询
8 [root@k8s-master ~]# kubectl rollout history deployment nginx

具体操作,如下所示:

 1 [root@k8s-master ~]# kubectl run nginx --image=192.168.110.133:5000/nginx:1.13 --replicas=3 --record 
 2 deployment "nginx" created
 3 [root@k8s-master ~]# kubectl rollout history deployment nginx-deployment 
 4 deployments "nginx-deployment"
 5 REVISION    CHANGE-CAUSE
 6 2        <none>
 7 3        <none>
 8 
 9 [root@k8s-master ~]# kubectl rollout history deployment nginx
10 deployments "nginx"
11 REVISION    CHANGE-CAUSE
12 1        kubectl run nginx --image=192.168.110.133:5000/nginx:1.13 --replicas=3 --record
13 
14 [root@k8s-master ~]# kubectl set image deploy nginx nginx=192.168.110.133:5000/nginx:1.15
15 deployment "nginx" image updated
16 [root@k8s-master ~]# kubectl rollout history deployment nginx
17 deployments "nginx"
18 REVISION    CHANGE-CAUSE
19 1        kubectl run nginx --image=192.168.110.133:5000/nginx:1.13 --replicas=3 --record
20 2        kubectl set image deploy nginx nginx=192.168.110.133:5000/nginx:1.15
21 
22 [root@k8s-master ~]# kubectl get all -o wide
23 NAME                      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
24 deploy/nginx              3         3         3            3           1m
25 deploy/nginx-deployment   3         3         3            3           1h
26 
27 NAME                   CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE       SELECTOR
28 svc/kubernetes         10.254.0.1      <none>        443/TCP        12d       <none>
29 svc/nginx-deployment   10.254.95.103   <nodes>       80:36848/TCP   32m       app=nginx
30 
31 NAME                             DESIRED   CURRENT   READY     AGE       CONTAINER(S)   IMAGE(S)                          SELECTOR
32 rs/nginx-3525615529              0         0         0         1m        nginx          192.168.110.133:5000/nginx:1.13   pod-template-hash=3525615529,run=nginx
33 rs/nginx-3675430827              3         3         3         23s       nginx          192.168.110.133:5000/nginx:1.15   pod-template-hash=3675430827,run=nginx
34 rs/nginx-deployment-3018768667   3         3         3         1h        nginx          192.168.110.133:5000/nginx:1.13   app=nginx,pod-template-hash=3018768667
35 rs/nginx-deployment-3181297949   0         0         0         27m       nginx          192.168.110.133:5000/nginx:1.15   app=nginx,pod-template-hash=3181297949
36 
37 NAME                                   READY     STATUS    RESTARTS   AGE       IP            NODE
38 po/nginx-3675430827-3gdxl              1/1       Running   0          23s       172.16.59.4   k8s-node2
39 po/nginx-3675430827-8t88l              1/1       Running   0          22s       172.16.16.2   k8s-master
40 po/nginx-3675430827-tbvf9              1/1       Running   0          23s       172.16.32.4   k8s-node3
41 po/nginx-deployment-3018768667-56jw4   1/1       Running   0          11m       172.16.59.3   k8s-node2
42 po/nginx-deployment-3018768667-gl0s6   1/1       Running   0          11m       172.16.16.3   k8s-master
43 po/nginx-deployment-3018768667-vbhp1   1/1       Running   0          11m       172.16.32.3   k8s-node3
44 [root@k8s-master ~]# 

回滚到指定的版本,undo是回滚到上一个版本,操作,如下所示:

 1 [root@k8s-master ~]# kubectl rollout history deployment nginx
 2 deployments "nginx"
 3 REVISION    CHANGE-CAUSE
 4 1        kubectl run nginx --image=192.168.110.133:5000/nginx:1.13 --replicas=3 --record
 5 2        kubectl set image deploy nginx nginx=192.168.110.133:5000/nginx:1.15
 6 
 7 [root@k8s-master ~]# kubectl rollout undo deployment nginx --to-revision=1
 8 deployment "nginx" rolled back
 9 [root@k8s-master ~]# kubectl rollout history deployment nginx
10 deployments "nginx"
11 REVISION    CHANGE-CAUSE
12 2        kubectl set image deploy nginx nginx=192.168.110.133:5000/nginx:1.15
13 3        kubectl run nginx --image=192.168.110.133:5000/nginx:1.13 --replicas=3 --record
14 
15 [root@k8s-master ~]# 

总结:deployment比RC更好使哦,deployment不依赖于配置文件,会成为主流的哦,重点使用。

 

3、k8s中不同类型的pod之间如何相互访问?例如,web服务如何访问db服务呢?

答:在k8s里面,服务与服务之间需要相互访问的时候,需要借助于VIP,因为每个Pod的ip地址是不固定的。可以固定的是VIP(可以理解为是VIP的地址ClusterIp),在k8s中,Pod与Pod之间相互访问就是通过VIP来进行访问的。比如,web服务想要访问db服务,web服务就要知道db服务的VIP(可以理解为是VIP的地址ClusterIp),不然无法进行访问。

 1 [root@k8s-master ~]# cd k8s/
 2 [root@k8s-master k8s]# ls
 3 deploy  pod  rc  svc
 4 [root@k8s-master k8s]# clear
 5 [root@k8s-master k8s]# wget https://www.qstack.com.cn/tomcat_demo.zip
 6 --2020-06-17 11:49:34--  https://www.qstack.com.cn/tomcat_demo.zip
 7 Resolving www.qstack.com.cn (www.qstack.com.cn)... 123.125.46.149, 111.202.85.37
 8 Connecting to www.qstack.com.cn (www.qstack.com.cn)|123.125.46.149|:443... connected.
 9 HTTP request sent, awaiting response... 200 OK
10 Length: 1486 (1.5K) [application/zip]
11 Saving to: ‘tomcat_demo.zip’
12 
13 100%[======================================================================================>] 1,486       --.-K/s   in 0.01s   
14 
15 2020-06-17 11:49:34 (106 KB/s) - ‘tomcat_demo.zip’ saved [1486/1486]
16 
17 [root@k8s-master k8s]# ls
18 deploy  pod  rc  svc  tomcat_demo.zip
19 [root@k8s-master k8s]# unzip tomcat_demo.zip 
20 Archive:  tomcat_demo.zip
21    creating: tomcat_demo/
22   inflating: tomcat_demo/mysql-rc.yml  
23   inflating: tomcat_demo/mysql-svc.yml  
24   inflating: tomcat_demo/tomcat-rc.yml  
25   inflating: tomcat_demo/tomcat-svc.yml  
26 [root@k8s-master k8s]# cd tomcat_demo/
27 [root@k8s-master tomcat_demo]# ls
28 mysql-rc.yml  mysql-svc.yml  tomcat-rc.yml  tomcat-svc.yml
29 [root@k8s-master tomcat_demo]# 

mysql-rc.yml 这个RC保证mysql的Pod高可用。mysql-svc.yml 这个SVC保证tomcat被访问。tomcat-rc.yml 这个RC保证tomcat是高可用的。tomcat-svc.yml 这个svc保证tomcat被外界所访问。

如果是自己向服务器传包,那么可以直接使用docker的命令进行操作即可。如果想从docker的仓库里面下载,需要修改一下这个配置,不然下载不动。

[root@k8s-master ~]# vim /etc/docker/daemon.json

1 {
2   "insecure-registries": ["192.168.110.133:5000"],
3   "registry-mirrors" : ["https://registry.docker-cn.com"]
4 }

使用国内的docker的镜像加速,可以不用配置自己的私有仓库的哈。

 1 [root@k8s-master rc]# docker tag docker.io/mysql:5.7.30 192.168.110.133:5000/mysql:5.7.30
 2 [root@k8s-master rc]# docker push 192.168.110.133:5000/mysql:5.7.30
 3 [root@k8s-master ~]# docker images 
 4 REPOSITORY                                            TAG                 IMAGE ID            CREATED             SIZE
 5 192.168.110.133:5000/mysql                            5.7.30              9cfcce23593a        8 days ago          448 MB
 6 docker.io/mysql                                       5.7.30              9cfcce23593a        8 days ago          448 MB
 7 docker.io/busybox                                     latest              1c35c4412082        2 weeks ago         1.22 MB
 8 docker.io/registry                                    latest              708bc6af7e5e        4 months ago        25.8 MB
 9 docker.io/nginx                                       1.15                53f3fd8007f7        13 months ago       109 MB
10 192.168.110.133:5000/nginx                            1.15                53f3fd8007f7        13 months ago       109 MB
11 192.168.110.133:5000/nginx                            1.13                ae513a47849c        2 years ago         109 MB
12 docker.io/nginx                                       1.13                ae513a47849c        2 years ago         109 MB
13 registry.access.redhat.com/rhel7/pod-infrastructure   latest              99965fb98423        2 years ago         209 MB
14 192.168.110.133:5000/pod-infrastructure               latest              34d3450d733b        3 years ago         205 MB
15 [root@k8s-master ~]# 

创建mysql的RC(Replication Controller)副本控制器。

[root@k8s-master tomcat_demo]# vim mysql-rc.yml

 1 apiVersion: v1
 2 kind: ReplicationController
 3 metadata:
 4   name: mysql
 5 spec:
 6   replicas: 1
 7   selector:
 8     app: mysql
 9   template:
10     metadata:
11       labels:
12         app: mysql
13     spec:
14       containers:
15         - name: mysql
16           image: 192.168.110.133:5000/mysql:5.7.30
17           ports:
18           - containerPort: 3306
19           env:
20           - name: MYSQL_ROOT_PASSWORD   # 数据库的环境变量,设置数据库的密码为123456
21             value: '123456'

操作,如下所示:

执行创建命令,创建 mysql的RC(Replication Controller)副本控制器。

[root@k8s-master tomcat_demo]# kubectl create -f mysql-rc.yml

 

4、插播一个问题,具体就是我三台centos7机器,docker的版本是1.13.1,然后搭了私有仓库,但是呢,每次下载都不好使,除了第一次搭建好,后来都是讲机器挂起了,直接使用的,前几篇都遇到这个问题了,原因是私有仓库的docker进程都没有了。

 1 [root@k8s-master tomcat_demo]# kubectl describe pod mysql-xcth2 
 2 Name:        mysql-xcth2
 3 Namespace:    default
 4 Node:        k8s-node3/192.168.110.135
 5 Start Time:    Wed, 17 Jun 2020 21:25:04 +0800
 6 Labels:        app=mysql
 7 Status:        Pending
 8 IP:        172.16.32.2
 9 Controllers:    ReplicationController/mysql
10 Containers:
11   mysql:
12     Container ID:    
13     Image:        192.168.110.133:5000/mysql:5.7.30
14     Image ID:        
15     Port:        3306/TCP
16     State:        Waiting
17       Reason:        ErrImagePull
18     Ready:        False
19     Restart Count:    0
20     Volume Mounts:    <none>
21     Environment Variables:
22       MYSQL_ROOT_PASSWORD:    123456
23 Conditions:
24   Type        Status
25   Initialized     True 
26   Ready     False 
27   PodScheduled     True 
28 No volumes.
29 QoS Class:    BestEffort
30 Tolerations:    <none>
31 Events:
32   FirstSeen    LastSeen    Count    From            SubObjectPath        Type        Reason            Message
33   ---------    --------    -----    ----            -------------        --------    ------            -------
34   34s        34s        1    {kubelet k8s-node3}                Warning        MissingClusterDNS    kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy.
35   33s        33s        1    {default-scheduler }                Normal        Scheduled        Successfully assigned mysql-xcth2 to k8s-node3
36   33s        19s        2    {kubelet k8s-node3}    spec.containers{mysql}    Normal        Pulling            pulling image "192.168.110.133:5000/mysql:5.7.30"
37   33s        19s        2    {kubelet k8s-node3}    spec.containers{mysql}    Warning        Failed            Failed to pull image "192.168.110.133:5000/mysql:5.7.30": Error while pulling image: Get http://192.168.110.133:5000/v1/repositories/mysql/images: dial tcp 192.168.110.133:5000: connect: connection refused
38   33s        19s        2    {kubelet k8s-node3}                Warning        FailedSync        Error syncing pod, skipping: failed to "StartContainer" for "mysql" with ErrImagePull: "Error while pulling image: Get http://192.168.110.133:5000/v1/repositories/mysql/images: dial tcp 192.168.110.133:5000: connect: connection refused"
39 
40   32s    6s    2    {kubelet k8s-node3}    spec.containers{mysql}    Normal    BackOff        Back-off pulling image "192.168.110.133:5000/mysql:5.7.30"
41   32s    6s    2    {kubelet k8s-node3}                Warning    FailedSync    Error syncing pod, skipping: failed to "StartContainer" for "mysql" with ImagePullBackOff: "Back-off pulling image \"192.168.110.133:5000/mysql:5.7.30\""

可以使用docker ps查看是否还运行着私有仓库registry。

注意:报错的原因,如下所示:

1 /usr/bin/docker-current: Error response from daemon: Conflict. The container name "/registry" is already in use by container a27987d97039c8596ad2a2150cee9e3fbe7580c8131e9f258aea8a922c22a237. You have to remove (or rename) that container to be able to reuse that name..

大致的意思是:来自守护进程的错误响应:冲突。容器名称“/runoob-nginx-test”为已在容器“a27987d97039c8596ad2a2150cee9e3fbe7580c8131e9f258aea8a922c22a237”中使用。您必须删除(或重命名)该容器才能重用该名称。

 1 [root@k8s-master ~]# docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry
 2 /usr/bin/docker-current: Error response from daemon: Conflict. The container name "/registry" is already in use by container a27987d97039c8596ad2a2150cee9e3fbe7580c8131e9f258aea8a922c22a237. You have to remove (or rename) that container to be able to reuse that name..
 3 See '/usr/bin/docker-current run --help'.
 4 [root@k8s-master ~]#  docker ps -l 
 5 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS               NAMES
 6 a27987d97039        registry            "/entrypoint.sh /e..."   11 days ago         Exited (2) 9 days ago                       registry
 7 [root@k8s-master ~]# docker rm a27987d97039
 8 a27987d97039
 9 [root@k8s-master ~]#  docker ps -l 
10 CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
11 ee95778bd5d9        busybox             "sh"                12 days ago         Exited (127) 12 days ago                       friendly_payne
12 [root@k8s-master ~]# docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry
13 5e72b0961647003c757fd41ffe824027c857d1f3938b9a53535645f4f372a40a
14 [root@k8s-master ~]# docker ps 
15 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
16 5e72b0961647        registry            "/entrypoint.sh /e..."   4 seconds ago       Up 3 seconds        0.0.0.0:5000->5000/tcp   registry
17 [root@k8s-master ~]# 

解决的方法:使用docker ps 时查看发现没有运行,使用 docker ps -l , 可以看到有一个nginx容器 ( -l 是显示最新创建的容器包括所有状态) 。删除容器重名的容器再次运行就行。使用docker ps只能查看正在运行的容器,因为nginx这个容器已经给被停止了所以看不到。

然后将你的镜像上传到私有仓库里面,如下所示:

 1 [root@k8s-master tomcat_demo]# docker tag docker.io/mysql:5.7.30 192.168.110.133:5000/mysql:5.7.30 
 2 [root@k8s-master tomcat_demo]# docker push 192.168.110.133:5000/mysql:5.7.30 
 3 The push refers to a repository [192.168.110.133:5000/mysql]
 4 c90a34afcab0: Pushed 
 5 ac7657905788: Pushed 
 6 8f0182ef7c8c: Pushed 
 7 91ae264962fb: Pushed 
 8 3a2464d8e0c0: Pushed 
 9 44853bb67274: Pushed 
10 61cbb8ea6481: Pushed 
11 66c45123fd43: Pushed 
12 c3f46b20a0d3: Pushed 
13 365386a39e0e: Pushed 
14 13cb14c2acd3: Pushed 
15 5.7.30: digest: sha256:0563b36ec2d1a262f79e1d8562e61f642a0f64f93306d8a709047cdea0444d0a size: 2621
16 [root@k8s-master tomcat_demo]# 

然后可以创建mysql的RC,此时就可以顺利创建成功了。

 1 [root@k8s-master tomcat_demo]# kubectl create -f mysql-rc.yml 
 2 replicationcontroller "mysql" created
 3 [root@k8s-master tomcat_demo]# kubectl get rc 
 4 NAME      DESIRED   CURRENT   READY     AGE
 5 mysql     1         1         1         5s
 6 [root@k8s-master tomcat_demo]# kubectl get all -o wide
 7 NAME       DESIRED   CURRENT   READY     AGE       CONTAINER(S)   IMAGE(S)                            SELECTOR
 8 rc/mysql   1         1         1         11s       mysql          192.168.110.133:5000/mysql:5.7.30   app=mysql
 9 
10 NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE       SELECTOR
11 svc/kubernetes   10.254.0.1   <none>        443/TCP   13d       <none>
12 
13 NAME             READY     STATUS        RESTARTS   AGE       IP            NODE
14 po/mysql-537xf   1/1       Running       0          11s       172.16.16.3   k8s-master
15 po/mysql-gnws2   1/1       Terminating   0          3m        172.16.32.3   k8s-node3
16 [root@k8s-master tomcat_demo]# 

由于前几篇的文章,没有发现注册中心已经挂了,所以这里再贴一下我的docker加速和私有仓库的配置。

 1 [root@k8s-master tomcat_demo]# cat /etc/docker/daemon.json
 2 {
 3   "insecure-registries": ["192.168.110.133:5000"],
 4   "registry-mirrors" : ["https://tnxkcso1.mirror.aliyuncs.com"]    
 5 }
 6 [root@k8s-master tomcat_demo]# cat /etc/sysconfig/docker
 7 # /etc/sysconfig/docker
 8 
 9 # Modify these options if you want to change the way the docker daemon runs
10 OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'
11 # 信任私有仓库,镜像加速
12 # OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false
13 # --registry-mirror=https://registry.docker-cn.com --insecure-registry=192.168.110.133:5000'
14 
15 
16 
17 if [ -z "${DOCKER_CERT_PATH}" ]; then
18     DOCKER_CERT_PATH=/etc/docker
19 fi
20 
21 # Do not add registries in this file anymore. Use /etc/containers/registries.conf
22 # instead. For more information reference the registries.conf(5) man page.
23 
24 # Location used for temporary files, such as those created by
25 # docker load and build operations. Default is /var/lib/docker/tmp
26 # Can be overriden by setting the following environment variable.
27 # DOCKER_TMPDIR=/var/tmp
28 
29 # Controls the /etc/cron.daily/docker-logrotate cron job status.
30 # To disable, uncomment the line below.
31 # LOGROTATE=false
32 
33 # docker-latest daemon can be used by starting the docker-latest unitfile.
34 # To use docker-latest client, uncomment below lines
35 #DOCKERBINARY=/usr/bin/docker-latest
36 #DOCKERDBINARY=/usr/bin/dockerd-latest
37 #DOCKER_CONTAINERD_BINARY=/usr/bin/docker-containerd-latest
38 #DOCKER_CONTAINERD_SHIM_BINARY=/usr/bin/docker-containerd-shim-latest
39 [root@k8s-master tomcat_demo]# 

mysql的RC创建成功之后,开始创建svc,如下所示:

 1 [root@k8s-master tomcat_demo]# cat mysql-svc.yml 
 2 apiVersion: v1
 3 kind: Service
 4 metadata:
 5   name: mysql
 6 spec:
 7   ports:
 8     - port: 3306
 9       targetPort: 3306
10   selector:
11     app: mysql
12 [root@k8s-master tomcat_demo]# 

创建命令和查看是否创建成功的,命令如下所示:

 1 [root@k8s-master tomcat_demo]# kubectl create -f mysql-svc.yml 
 2 service "mysql" created
 3 [root@k8s-master tomcat_demo]# kubectl get svc 
 4 NAME         CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
 5 kubernetes   10.254.0.1       <none>        443/TCP    13d
 6 mysql        10.254.245.194   <none>        3306/TCP   7s
 7 [root@k8s-master tomcat_demo]# kubectl get all -o wide
 8 NAME       DESIRED   CURRENT   READY     AGE       CONTAINER(S)   IMAGE(S)                            SELECTOR
 9 rc/mysql   1         1         1         31m       mysql          192.168.110.133:5000/mysql:5.7.30   app=mysql
10 
11 NAME             CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE       SELECTOR
12 svc/kubernetes   10.254.0.1       <none>        443/TCP    13d       <none>
13 svc/mysql        10.254.245.194   <none>        3306/TCP   28s       app=mysql
14 
15 NAME             READY     STATUS    RESTARTS   AGE       IP            NODE
16 po/mysql-537xf   1/1       Running   0          31m       172.16.16.3   k8s-master
17 [root@k8s-master tomcat_demo]# 

可以看到RC、SVC是通过selector进行关联起来的,而且pod也已经运行起来了。

mysql是已经创建完毕了,那么tomcat是如何和mysql连接起来的呢,这里还是通过环境变量来做的。服务与服务之间是通过VIP来进行连接的,tomcat要连接mysql就需要配置此环境变量MYSQL_SERVICE_HOST

注意:如果你的项目已经开发好了,并且已经搞到了tomcat里面了,将这个tomcat打成镜像,然后上传到私有仓库,可以创建Pod这些。我的由于没有项目,这里就不进行tomcat的创建了,和mysql的类似。

 1 apiVersion: v1
 2 kind: ReplicationController
 3 metadata:
 4   name: myweb
 5 spec:
 6   replicas: 1
 7   selector:
 8     app: myweb
 9   template:
10     metadata:
11       labels:
12         app: myweb
13     spec:
14       containers:
15         - name: myweb
16           image: 192.168.110.133:5000/tomcat-app:v2
17           ports:
18           - containerPort: 8080
19           env:
20           - name: MYSQL_SERVICE_HOST
21             value: '10.254.245.194'
22           - name: MYSQL_SERVICE_PORT
23             value: '3306'

创建tomcat的RC命令,如下所示:

首先,需要将镜像下载下来,然后上传到私有仓库才可以的哦。

 1 [root@k8s-master ~]# docker pull docker.io/tomcat
 2 Using default tag: latest
 3 Trying to pull repository docker.io/library/tomcat ... 
 4 latest: Pulling from docker.io/library/tomcat
 5 e9afc4f90ab0: Pull complete 
 6 989e6b19a265: Pull complete 
 7 af14b6c2f878: Pull complete 
 8 5573c4b30949: Pull complete 
 9 fb1a405f128d: Pull complete 
10 612a9f566fdc: Pull complete 
11 cf63ebed1142: Pull complete 
12 fbb20561cd50: Pull complete 
13 e99c920870d7: Pull complete 
14 b7f793f2be47: Pull complete 
15 Digest: sha256:81c2a95e5b1b5867229d75255abe54928d505deb81c8ff8949b61fde1a5d30a1
16 Status: Downloaded newer image for docker.io/tomcat:latest
17 [root@k8s-master ~]# docker images 
18 REPOSITORY                                            TAG                 IMAGE ID            CREATED             SIZE
19 docker.io/tomcat                                      latest              2eb5a120304e        7 days ago          647 MB
20 192.168.110.133:5000/mysql                            5.7.30              9cfcce23593a        8 days ago          448 MB
21 docker.io/mysql                                       5.7.30              9cfcce23593a        8 days ago          448 MB
22 docker.io/busybox                                     latest              1c35c4412082        2 weeks ago         1.22 MB
23 docker.io/registry                                    latest              708bc6af7e5e        4 months ago        25.8 MB
24 192.168.110.133:5000/nginx                            1.15                53f3fd8007f7        13 months ago       109 MB
25 docker.io/nginx                                       1.15                53f3fd8007f7        13 months ago       109 MB
26 192.168.110.133:5000/nginx                            1.13                ae513a47849c        2 years ago         109 MB
27 docker.io/nginx                                       1.13                ae513a47849c        2 years ago         109 MB
28 registry.access.redhat.com/rhel7/pod-infrastructure   latest              99965fb98423        2 years ago         209 MB
29 192.168.110.133:5000/pod-infrastructure               latest              34d3450d733b        3 years ago         205 MB
30 [root@k8s-master ~]# docker tag docker.io/tomcat:latest 192.168.110.133:5000/tomcat:latest
31 [root@k8s-master ~]# docker push 192.168.110.133:5000/tomcat:latest 
32 The push refers to a repository [192.168.110.133:5000/tomcat]
33 123a7175f991: Pushed 
34 68b9387df273: Pushed 
35 a1c4399f9b22: Pushed 
36 4f866e977815: Pushed 
37 f73b2345c404: Pushed 
38 f5181c7ef902: Pushed 
39 2e5b4ca91984: Pushed 
40 527ade4639e0: Pushed 
41 c2c789d2d3c5: Pushed 
42 8803ef42039d: Pushed 
43 latest: digest: sha256:5e96c003ec31d89fa4b241463ee05a66ddc2cc58976dd1ecb54af313394cd19e size: 2421
44 [root@k8s-master ~]# 

这里就不搞了,具体内容可以看下《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第4版)》 这本书,这本书还是比较不错的,很喜欢。

 


 

2020-06-2310:33:37

1、Docker制作自己的镜像,第一个Java Web应用。

答:Dockerfile就是用来告诉Docker我要怎么样的来制作镜像,制作镜像的每一步操作分别是什么。

dokcer build命令就是用来执行Dockerfile里面所描述的每一件事情,最终会把docker镜像给我们构建出来。

 

2、JPress,一个专业的建站神器,是WordPress的Java版本。去下载war包,https://gitee.com/fuhai/jpress/releases

首先,将war包上传上之后,编写一个Dockerfile文件,如下所示:

 1 [root@slaver1 package]# ls
 2 cerebro-0.7.2.tgz           erlang-solutions-1.0-1.noarch.rpm   jpress-v3.2.5.war                 logstash-6.7.0.tar.gz  rabbitmq-server-3.5.1-1.noarch.rpm
 3 elasticsearch-6.7.0.tar.gz  filebeat-6.7.0-linux-x86_64.tar.gz  kibana-6.7.0-linux-x86_64.tar.gz  materials
 4 [root@slaver1 package]# docker images 
 5 REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
 6 docker.io/nginx             latest              2622e6cca7eb        13 days ago         132 MB
 7 docker.io/jpressio/jpress   latest              e329d5688bad        3 weeks ago         241 MB
 8 docker.io/hello-world       latest              bf756fb1ae65        5 months ago        13.3 kB
 9 docker.io/nginx             1.15                53f3fd8007f7        13 months ago       109 MB
10 docker.io/nginx             1.13                ae513a47849c        2 years ago         109 MB
11 [root@slaver1 package]# vim Dockerfile

怎么创建java web端的镜像呢,首先镜像要运行在tomcat里面的,创建镜像的第一步,说明继承自那个基础镜像,因为程序是Java web程序,肯定是需要用到tomcat的,先将tomcat的镜像下载下来。

 1 [root@slaver1 ~]# docker images 
 2 REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
 3 docker.io/nginx             latest              2622e6cca7eb        13 days ago         132 MB
 4 docker.io/jpressio/jpress   latest              e329d5688bad        3 weeks ago         241 MB
 5 docker.io/hello-world       latest              bf756fb1ae65        5 months ago        13.3 kB
 6 docker.io/nginx             1.15                53f3fd8007f7        13 months ago       109 MB
 7 docker.io/nginx             1.13                ae513a47849c        2 years ago         109 MB
 8 [root@slaver1 ~]# docker search tomcat
 9 INDEX       NAME                                    DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
10 docker.io   docker.io/tomcat                        Apache Tomcat is an open source implementa...   2758      [OK]       
11 docker.io   docker.io/tomee                         Apache TomEE is an all-Apache Java EE cert...   79        [OK]       
12 docker.io   docker.io/dordoka/tomcat                Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 ba...   54                   [OK]
13 docker.io   docker.io/bitnami/tomcat                Bitnami Tomcat Docker Image                     35                   [OK]
14 docker.io   docker.io/kubeguide/tomcat-app          Tomcat image for Chapter 1                      28                   
15 docker.io   docker.io/consol/tomcat-7.0             Tomcat 7.0.57, 8080, "admin/admin"              17                   [OK]
16 docker.io   docker.io/cloudesire/tomcat             Tomcat server, 6/7/8                            15                   [OK]
17 docker.io   docker.io/aallam/tomcat-mysql           Debian, Oracle JDK, Tomcat & MySQL              13                   [OK]
18 docker.io   docker.io/arm32v7/tomcat                Apache Tomcat is an open source implementa...   10                   
19 docker.io   docker.io/rightctrl/tomcat              CentOS , Oracle Java, tomcat application s...   6                    [OK]
20 docker.io   docker.io/maluuba/tomcat7-java8         Tomcat7 with java8.                             5                    
21 docker.io   docker.io/unidata/tomcat-docker         Security-hardened Tomcat Docker container.      4                    [OK]
22 docker.io   docker.io/amd64/tomcat                  Apache Tomcat is an open source implementa...   2                    
23 docker.io   docker.io/arm64v8/tomcat                Apache Tomcat is an open source implementa...   2                    
24 docker.io   docker.io/jelastic/tomcat               An image of the Tomcat Java application se...   2                    
25 docker.io   docker.io/99taxis/tomcat7               Tomcat7                                         1                    [OK]
26 docker.io   docker.io/camptocamp/tomcat-logback     Docker image for tomcat with logback integ...   1                    [OK]
27 docker.io   docker.io/i386/tomcat                   Apache Tomcat is an open source implementa...   1                    
28 docker.io   docker.io/oobsri/tomcat8                Testing CI Jobs with different names.           1                    
29 docker.io   docker.io/ppc64le/tomcat                Apache Tomcat is an open source implementa...   1                    
30 docker.io   docker.io/appsvc/tomcat                                                                 0                    
31 docker.io   docker.io/cfje/tomcat-resource          Tomcat Concourse Resource                       0                    
32 docker.io   docker.io/picoded/tomcat7               tomcat7 with jre8 and MANAGER_USER / MANAG...   0                    [OK]
33 docker.io   docker.io/s390x/tomcat                  Apache Tomcat is an open source implementa...   0                    
34 docker.io   docker.io/secoresearch/tomcat-varnish   Tomcat and Varnish 5.0                          0                    [OK]
35 [root@slaver1 ~]# docker pull docker.io/tomcat
36 \Using default tag: latest
37 Trying to pull repository docker.io/library/tomcat ... 
38 latest: Pulling from docker.io/library/tomcat
39 e9afc4f90ab0: Pull complete 
40 989e6b19a265: Pull complete 
41 af14b6c2f878: Pull complete 
42 5573c4b30949: Pull complete 
43 fb1a405f128d: Downloading [================>                                  ] 1.752 MB/5.285 MB
44 612a9f566fdc: Download complete 
45 cf63ebed1142: Downloading [=======================>                           ] 91.59 MB/196.2 MB
46 fbb20561cd50: Download complete 
47 e99c920870d7: Download complete 
48 b7f793f2be47: Download complete 

tomcat的运行需要用到java环境的,可以肯定的是tomcat的镜像是包括jdk的,所以不用担心是否有jdk。

1 # 第一步,说明继承那个基础镜像,tomcat作为基础镜像。此处告诉Docker我要做自己的镜像,以tomcat镜像为起点。
2 from docker.io/tomcat
3 
4 # 第二步,描述镜像的所有者,可以省略。
5 MAINTAINER biehl biehl@qq.com
6 
7 # 第三步,将自己的web应用放到镜像里面,将本地的war包拷贝到tomcat的webapps目录下面。可以看看程序是否可以随着tomcat启动起来。
8 COPY jpress-v3.2.5.war /usr/local/tomcat/webapps

dokcer build命令就是用来执行Dockerfile里面所描述的每一件事情,最终会把docker镜像给我们构建出来。

 1 [root@slaver1 package]# docker build .
 2 Sending build context to Docker daemon 657.4 MB
 3 Step 1/3 : FROM docker.io/tomcat
 4  ---> 2eb5a120304e
 5 Step 2/3 : MAINTAINER biehl biehl@qq.com
 6  ---> Using cache
 7  ---> 8b53c62d5360
 8 Step 3/3 : COPY jpress-v3.2.5.war /usr/local/tomcat/webapps
 9  ---> d8e02860520e
10 Removing intermediate container 0b42ee524e6f
11 Successfully built d8e02860520e
12 [root@slaver1 package]# 

可以使用docker images命令进行查看,但是名称和版本是none的。

 1 [root@slaver1 package]# docker images 
 2 REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
 3 <none>                      <none>              d8e02860520e        18 seconds ago      718 MB
 4 docker.io/tomcat            latest              2eb5a120304e        12 days ago         647 MB
 5 docker.io/nginx             latest              2622e6cca7eb        13 days ago         132 MB
 6 docker.io/jpressio/jpress   latest              e329d5688bad        3 weeks ago         241 MB
 7 docker.io/hello-world       latest              bf756fb1ae65        5 months ago        13.3 kB
 8 docker.io/nginx             1.15                53f3fd8007f7        13 months ago       109 MB
 9 docker.io/nginx             1.13                ae513a47849c        2 years ago         109 MB
10 [root@slaver1 package]# 

使用下面的命令可以创建有名称的镜像,如下所示:

 1 [root@slaver1 package]# ls
 2 cerebro-0.7.2.tgz  elasticsearch-6.7.0.tar.gz         filebeat-6.7.0-linux-x86_64.tar.gz  kibana-6.7.0-linux-x86_64.tar.gz  materials
 3 Dockerfile         erlang-solutions-1.0-1.noarch.rpm  jpress-v3.2.5.war                   logstash-6.7.0.tar.gz             rabbitmq-server-3.5.1-1.noarch.rpm
 4 [root@slaver1 package]# docker build -t jpress:v3.2.5 .
 5 Sending build context to Docker daemon 657.4 MB
 6 Step 1/3 : FROM docker.io/tomcat
 7  ---> 2eb5a120304e
 8 Step 2/3 : MAINTAINER biehl biehl@qq.com
 9  ---> Using cache
10  ---> 8b53c62d5360
11 Step 3/3 : COPY jpress-v3.2.5.war /usr/local/tomcat/webapps
12  ---> Using cache
13  ---> d8e02860520e
14 Successfully built d8e02860520e
15 [root@slaver1 package]# docker images 
16 REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
17 jpress                      v3.2.5              d8e02860520e        3 days ago          718 MB
18 docker.io/tomcat            latest              2eb5a120304e        2 weeks ago         647 MB
19 docker.io/nginx             latest              2622e6cca7eb        2 weeks ago         132 MB
20 docker.io/jpressio/jpress   latest              e329d5688bad        3 weeks ago         241 MB
21 docker.io/hello-world       latest              bf756fb1ae65        5 months ago        13.3 kB
22 docker.io/nginx             1.15                53f3fd8007f7        13 months ago       109 MB
23 docker.io/nginx             1.13                ae513a47849c        2 years ago         109 MB
24 [root@slaver1 package]# 

运行自己的容器,如下所示:

 1 [root@slaver1 package]# docker images 
 2 REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
 3 jpress                      v3.2.5              d8e02860520e        3 days ago          718 MB
 4 docker.io/tomcat            latest              2eb5a120304e        2 weeks ago         647 MB
 5 docker.io/nginx             latest              2622e6cca7eb        2 weeks ago         132 MB
 6 docker.io/jpressio/jpress   latest              e329d5688bad        3 weeks ago         241 MB
 7 docker.io/hello-world       latest              bf756fb1ae65        5 months ago        13.3 kB
 8 docker.io/nginx             1.15                53f3fd8007f7        13 months ago       109 MB
 9 docker.io/nginx             1.13                ae513a47849c        2 years ago         109 MB
10 [root@slaver1 package]# docker run -d -p 8888:8080 jpress
11 Unable to find image 'jpress:latest' locally
12 Trying to pull repository docker.io/library/jpress ... 
13 /usr/bin/docker-current: repository docker.io/jpress not found: does not exist or no pull access.
14 See '/usr/bin/docker-current run --help'.
15 [root@slaver1 package]# docker run -d -p 8888:8080 jpress:v3.2.5
16 91eb59a60d06944a45326c4a00a62c0454a3ae22b9ec894081f6238d857e1758
17 [root@slaver1 package]# 

查看容器是否正常运行了,如下所示:

1 [root@slaver1 package]# docker ps
2 CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                    NAMES
3 91eb59a60d06        jpress:v3.2.5       "catalina.sh run"   About a minute ago   Up About a minute   0.0.0.0:8888->8080/tcp   musing_carson
4 [root@slaver1 package]# 

检查端口是否存在了,如下所示:

1 [root@slaver1 package]# netstat -na | grep 8888
2 tcp6       0      0 :::8888                 :::*                    LISTEN     
3 [root@slaver1 package]# 

访问地址,http://192.168.110.133:8888/,我此时已经关闭了防火墙,因为是本地测试的,随便了一点,找不到主页,其实此时我的tomcat已经启动了,此时我的tomcat的版本是Apache Tomcat/9.0.36版本的,此时你也可以换成低版本,从上面的步骤再走一遍,我这里修改了一些配置。

将webapps.dist里面的内容全部拷贝到webapps目录下面,即可访问,不用重启容器。

 1 [root@slaver1 ~]# docker ps 
 2 CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
 3 91eb59a60d06        jpress:v3.2.5       "catalina.sh run"   20 minutes ago      Up 20 minutes       0.0.0.0:8888->8080/tcp   musing_carson
 4 [root@slaver1 ~]# docker exec -it 91eb59a60d06 /bin/bash
 5 root@91eb59a60d06:/usr/local/tomcat# ls
 6 BUILDING.txt  CONTRIBUTING.md  LICENSE    NOTICE    README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
 7 root@91eb59a60d06:/usr/local/tomcat# cd webapps.dist/
 8 root@91eb59a60d06:/usr/local/tomcat/webapps.dist# ls
 9 ROOT  docs  examples  host-manager  manager
10 root@91eb59a60d06:/usr/local/tomcat/webapps.dist# cp -r * ../webapps
11 root@91eb59a60d06:/usr/local/tomcat/webapps.dist# ls
12 ROOT  docs  examples  host-manager  manager
13 root@91eb59a60d06:/usr/local/tomcat/webapps.dist# cd ../webapps
14 root@91eb59a60d06:/usr/local/tomcat/webapps# ls
15 ROOT  docs  examples  host-manager  jpress-v3.2.5  jpress-v3.2.5.war  manager
16 root@91eb59a60d06:/usr/local/tomcat/webapps# 

jpress界面404可能是打包出了问题,官网现在不提供war包下载,可以从这里获得https://gitee.com/GalaIO/jpress/blob/master/wars/jpress-web-newest.war

访问地址http://192.168.110.133:8888/jpress-v3.2.5/,抱404,我这里选择使用上面的链接下载包,重新上传,安装,部署操作。

首先停止这个容器,如下所示:

1 [root@slaver1 package]# docker stop 91eb59a60d06
2 91eb59a60d06
3 [root@slaver1 package]# docker ps
4 CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
5 [root@slaver1 package]# netstat -na | grep 8888
6 [root@slaver1 package]# 

修改Dockerfile配置文件,然后执行它,如下所示:

 1 [root@slaver1 package]# docker images 
 2 REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
 3 <none>                  <none>              dabfdefb7d8c        57 minutes ago      680 MB
 4 jpress                  v3.2.5              d8e02860520e        4 days ago          718 MB
 5 docker.io/tomcat        latest              2eb5a120304e        2 weeks ago         647 MB
 6 docker.io/nginx         latest              2622e6cca7eb        2 weeks ago         132 MB
 7 docker.io/hello-world   latest              bf756fb1ae65        5 months ago        13.3 kB
 8 docker.io/nginx         1.15                53f3fd8007f7        13 months ago       109 MB
 9 docker.io/nginx         1.13                ae513a47849c        2 years ago         109 MB
10 [root@slaver1 package]# docker build -t jpress .
11 Sending build context to Docker daemon 705.3 MB
12 Step 1/3 : FROM docker.io/tomcat
13  ---> 2eb5a120304e
14 Step 2/3 : MAINTAINER biehl biehl@qq.com
15  ---> Using cache
16  ---> 8b53c62d5360
17 Step 3/3 : COPY jpress-web-newest.war /usr/local/tomcat/webapps
18  ---> 023489e699f5
19 Removing intermediate container 4dfb0add6ea6
20 Successfully built 023489e699f5
21 [root@slaver1 package]# docker images 
22 REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
23 jpress                  latest              023489e699f5        15 seconds ago      668 MB
24 <none>                  <none>              dabfdefb7d8c        58 minutes ago      680 MB
25 jpress                  v3.2.5              d8e02860520e        4 days ago          718 MB
26 docker.io/tomcat        latest              2eb5a120304e        2 weeks ago         647 MB
27 docker.io/nginx         latest              2622e6cca7eb        2 weeks ago         132 MB
28 docker.io/hello-world   latest              bf756fb1ae65        5 months ago        13.3 kB
29 docker.io/nginx         1.15                53f3fd8007f7        13 months ago       109 MB
30 docker.io/nginx         1.13                ae513a47849c        2 years ago         109 MB
31 [root@slaver1 package]# docker run -d -p 8888:8080 jpress
32 ec6ceeaf4d2129658ff67b330eef20691bfee1a9df669b15bb12116a6935fe2d
33 [root@slaver1 package]# docker ps
34 CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
35 ec6ceeaf4d21        jpress              "catalina.sh run"   8 seconds ago       Up 3 seconds        0.0.0.0:8888->8080/tcp   wizardly_aryabhata
36 [root@slaver1 package]# netstat -na | grep 8888
37 tcp6       0      0 :::8888                 :::*                    LISTEN     
38 [root@slaver1 package]# docker exec -it ec6ceeaf4d21 /bin/bash
39 root@ec6ceeaf4d21:/usr/local/tomcat# ls
40 BUILDING.txt  CONTRIBUTING.md  LICENSE    NOTICE    README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
41 root@ec6ceeaf4d21:/usr/local/tomcat# cd webapps.dist/
42 root@ec6ceeaf4d21:/usr/local/tomcat/webapps.dist# ls
43 ROOT  docs  examples  host-manager  manager
44 root@ec6ceeaf4d21:/usr/local/tomcat/webapps.dist# cp -r * ../webapps
45 root@ec6ceeaf4d21:/usr/local/tomcat/webapps.dist# cd ..
46 root@ec6ceeaf4d21:/usr/local/tomcat# ls
47 BUILDING.txt  CONTRIBUTING.md  LICENSE    NOTICE    README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
48 root@ec6ceeaf4d21:/usr/local/tomcat# cd webapps
49 root@ec6ceeaf4d21:/usr/local/tomcat/webapps# ls
50 ROOT  docs  examples  host-manager  jpress-web-newest  jpress-web-newest.war  manager
51 root@ec6ceeaf4d21:/usr/local/tomcat/webapps# 

运行效果http://192.168.110.133:8888/jpress-web-newest/install,如下所示:

现在,使用docker安装一下mysql,这样就可以连一下jpress了。

 1 [root@slaver1 package]# docker pull mysql:5.7.26
 2 Trying to pull repository docker.io/library/mysql ... 
 3 5.7.26: Pulling from docker.io/library/mysql
 4 0a4690c5d889: Pull complete 
 5 98aa2fc6cbeb: Pull complete 
 6 0777e6eb0e6f: Pull complete 
 7 2464189c041c: Pull complete 
 8 b45df9dc827d: Pull complete 
 9 b42b00086160: Pull complete 
10 bb93567627c7: Pull complete 
11 48acc32b4863: Pull complete 
12 6257d2da4815: Pull complete 
13 1cd5ed3b2653: Pull complete 
14 f4ba7ff24ae9: Pull complete 
15 Digest: sha256:bdee7a98276ccf377d2c00b8ceaa9f65455a9376481467bbcc3d1e6b662dac5d
16 Status: Downloaded newer image for docker.io/mysql:5.7.26
17 [root@slaver1 package]# docker images 
18 REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
19 jpress                              latest              023489e699f5        About an hour ago   668 MB
20 <none>                              <none>              dabfdefb7d8c        2 hours ago         680 MB
21 jpress                              v3.2.5              d8e02860520e        4 days ago          718 MB
22 docker.io/tomcat                    latest              2eb5a120304e        2 weeks ago         647 MB
23 docker.io/nginx                     latest              2622e6cca7eb        2 weeks ago         132 MB
24 docker.io/hello-world               latest              bf756fb1ae65        5 months ago        13.3 kB
25 docker.io/centos/mysql-57-centos7   latest              f83a2938370c        8 months ago        452 MB
26 docker.io/mysql                     5.7.26              e9c354083de7        11 months ago       373 MB
27 docker.io/nginx                     1.15                53f3fd8007f7        13 months ago       109 MB
28 docker.io/nginx                     1.13                ae513a47849c        2 years ago         109 MB
29 [root@slaver1 package]# docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=jpress docker.io/mysql:5.7.26 
30 df4e1235ec72e06d515d1dfc79ee373baafdd81284c8bf2af577d0beea53fc12
31 [root@slaver1 package]# docker ps
32 CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                               NAMES
33 df4e1235ec72        docker.io/mysql:5.7.26   "docker-entrypoint..."   17 seconds ago      Up 16 seconds       0.0.0.0:3306->3306/tcp, 33060/tcp   agitated_hopper
34 ec6ceeaf4d21        jpress                   "catalina.sh run"        About an hour ago   Up About an hour    0.0.0.0:8888->8080/tcp              wizardly_aryabhata
35 [root@slaver1 package]# netstat -na | grep 3306
36 tcp6       0      0 :::3306                 :::*                    LISTEN     
37 [root@slaver1 package]# 

开始安装jpress,如下所示:

现在重启一下web容器,如下所示:

 1 [root@slaver1 package]# docker ps
 2 CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                               NAMES
 3 df4e1235ec72        docker.io/mysql:5.7.26   "docker-entrypoint..."   4 minutes ago       Up 4 minutes        0.0.0.0:3306->3306/tcp, 33060/tcp   agitated_hopper
 4 ec6ceeaf4d21        jpress                   "catalina.sh run"        2 hours ago         Up 2 hours          0.0.0.0:8888->8080/tcp              wizardly_aryabhata
 5 [root@slaver1 package]# docker restart ec6ceeaf4d21
 6 ec6ceeaf4d21
 7 [root@slaver1 package]# docker ps
 8 CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                               NAMES
 9 df4e1235ec72        docker.io/mysql:5.7.26   "docker-entrypoint..."   4 minutes ago       Up 4 minutes        0.0.0.0:3306->3306/tcp, 33060/tcp   agitated_hopper
10 ec6ceeaf4d21        jpress                   "catalina.sh run"        2 hours ago         Up 6 seconds        0.0.0.0:8888->8080/tcp              wizardly_aryabhata

http://192.168.110.133:8888/jpress-web-newest/效果,如下所示:

 


2020-06-27  14:56:55

1、搞一下自己做的小项目,它不香嘛?它没有成就感嘛,说干就干!!!将自己的项目打个war包,然后上传到服务器上哦,记得自己的项目链接数据库的信息是自己服务器mysql的ip地址、账号密码,如下所示:

1 drivername=com.mysql.jdbc.Driver
2 url=jdbc:mysql://192.168.110.133:3306/book?useUnicode=true&amp;characterEncoding=UTF-8
3 user=root
4 password=123456

编写一个Dockfile文件,如下所示:

1 [root@slaver1 book]# ls
2 book-master.war  Dockerfile
3 [root@slaver1 book]# vim Dockerfile

配置内容,如下所示:

1 # 第一步,说明继承那个基础镜像,tomcat作为基础镜像。此处告诉Docker我要做自己的镜像,以tomcat镜像为起点。
2 from docker.io/tomcat
3 
4 # 第二步,描述镜像的所有者,可以省略。
5 MAINTAINER biehl biehl@qq.com
6 
7 # 第三步,将自己的web应用放到镜像里面,将本地的war包拷贝到tomcat的webapps目录下面。可以看看程序是否可以随着tomcat启动起来。
8 COPY book-master.war /usr/local/tomcat/webapps

编写完毕Dockerfile配置文件,然后执行它,如下所示:

 1 [root@slaver1 book]# docker build -t book .
 2 Sending build context to Docker daemon 21.39 MB
 3 Step 1/3 : FROM docker.io/tomcat
 4  ---> 2eb5a120304e
 5 Step 2/3 : MAINTAINER biehl biehl@qq.com
 6  ---> Using cache
 7  ---> 8b53c62d5360
 8 Step 3/3 : COPY book-master.war /usr/local/tomcat/webapps
 9  ---> 8c2657940ce3
10 Removing intermediate container f9fffe3ee453
11 Successfully built 8c2657940ce3
12 [root@slaver1 book]# docker images 
13 REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
14 book                                latest              8c2657940ce3        8 seconds ago       669 MB
15 jpress                              latest              023489e699f5        2 hours ago         668 MB
16 <none>                              <none>              dabfdefb7d8c        3 hours ago         680 MB
17 jpress                              v3.2.5              d8e02860520e        4 days ago          718 MB
18 docker.io/tomcat                    latest              2eb5a120304e        2 weeks ago         647 MB
19 docker.io/nginx                     latest              2622e6cca7eb        2 weeks ago         132 MB
20 docker.io/hello-world               latest              bf756fb1ae65        5 months ago        13.3 kB
21 docker.io/centos/mysql-57-centos7   latest              f83a2938370c        8 months ago        452 MB
22 docker.io/mysql                     5.7.26              e9c354083de7        11 months ago       373 MB
23 docker.io/nginx                     1.15                53f3fd8007f7        13 months ago       109 MB
24 docker.io/nginx                     1.13                ae513a47849c        2 years ago         109 MB
25 [root@slaver1 book]# docker run -d -p 8888:8080 book
26 4d52cd016170c07dfec13236624c165adca7f103579c130192b33a74a3d87025
27 [root@slaver1 book]# docker ps
28 CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                               NAMES
29 4d52cd016170        book                     "catalina.sh run"        6 seconds ago       Up 4 seconds        0.0.0.0:8888->8080/tcp              gallant_bohr
30 df4e1235ec72        docker.io/mysql:5.7.26   "docker-entrypoint..."   22 minutes ago      Up 22 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   agitated_hopper
31 [root@slaver1 book]# netstat -na | grep 8888
32 tcp6       0      0 :::8888                 :::*                    LISTEN     
33 [root@slaver1 book]# docker exec -it 4d52cd016170 /bin/bash
34 root@4d52cd016170:/usr/local/tomcat# ls
35 BUILDING.txt  CONTRIBUTING.md  LICENSE    NOTICE    README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
36 root@4d52cd016170:/usr/local/tomcat# cat webapps
37 cat: webapps: Is a directory
38 root@4d52cd016170:/usr/local/tomcat# ls webapps
39 book-master  book-master.war
40 root@4d52cd016170:/usr/local/tomcat# cd webapps.dist/
41 root@4d52cd016170:/usr/local/tomcat/webapps.dist# ls
42 ROOT  docs  examples  host-manager  manager
43 root@4d52cd016170:/usr/local/tomcat/webapps.dist# cp -r * ../webapps
44 root@4d52cd016170:/usr/local/tomcat/webapps.dist# cd ..
45 root@4d52cd016170:/usr/local/tomcat# cd webapps
46 root@4d52cd016170:/usr/local/tomcat/webapps# ls
47 ROOT  book-master  book-master.war  docs  examples  host-manager  manager
48 root@4d52cd016170:/usr/local/tomcat/webapps# 

 如果访问tomcat报404还是将文件信息从webapps.dist拷贝到webapps里面,就行了。然后访问http://192.168.110.133:8888/可以正常访问。

然后开始访问你的项目吧,http://192.168.110.133:8888/book-master/,需要注意的是,使用navicat连上你的服务器数据库,执行sql文件,这样不香嘛?

Linux服务器docker 部署java web项目乱码问题。我是可以正常登陆的,但是插入和修改是乱码的,这里解决一下这个问题,首先我的项目,数据库都是utf8格式的。发现使用docker创建的Mysql的默认参数有的不是utf8格式的,这里可以进行修改一下,如下所示:

根据自己的需求,设计参数为utf8即可。

这种方式并没有用,也没有解决乱码问题。进入容器,修改mysql的字符集编码,如下所示:

 1 [root@slaver1 book]# docker ps
 2 CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                               NAMES
 3 4d52cd016170        book                     "catalina.sh run"        25 minutes ago      Up 25 minutes       0.0.0.0:8888->8080/tcp              gallant_bohr
 4 df4e1235ec72        docker.io/mysql:5.7.26   "docker-entrypoint..."   47 minutes ago      Up 7 minutes        0.0.0.0:3306->3306/tcp, 33060/tcp   agitated_hopper
 5 [root@slaver1 book]# docker exec -it df4e1235ec72 /bin/bash     
 6 root@df4e1235ec72:/# mysql -u root -p
 7 Enter password: 
 8 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
 9 root@df4e1235ec72:/# mysql -u root -p
10 Enter password: 
11 Welcome to the MySQL monitor.  Commands end with ; or \g.
12 Your MySQL connection id is 44
13 Server version: 5.7.26 MySQL Community Server (GPL)
14 
15 Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
16 
17 Oracle is a registered trademark of Oracle Corporation and/or its
18 affiliates. Other names may be trademarks of their respective
19 owners.
20 
21 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
22 
23 mysql> 

现在使用root账号登陆,密码是自己指定的。然后查看mysql的字符集,如下所示:

 1 root@df4e1235ec72:/# mysql -u root -p
 2 Enter password: 
 3 Welcome to the MySQL monitor.  Commands end with ; or \g.
 4 Your MySQL connection id is 44
 5 Server version: 5.7.26 MySQL Community Server (GPL)
 6 
 7 Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
 8 
 9 Oracle is a registered trademark of Oracle Corporation and/or its
10 affiliates. Other names may be trademarks of their respective
11 owners.
12 
13 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
14 
15 mysql> SHOW VARIABLES LIKE 'character_set_%';
16 +--------------------------+----------------------------+
17 | Variable_name            | Value                      |
18 +--------------------------+----------------------------+
19 | character_set_client     | latin1                     |
20 | character_set_connection | latin1                     |
21 | character_set_database   | latin1                     |
22 | character_set_filesystem | binary                     |
23 | character_set_results    | latin1                     |
24 | character_set_server     | latin1                     |
25 | character_set_system     | utf8                       |
26 | character_sets_dir       | /usr/share/mysql/charsets/ |
27 +--------------------------+----------------------------+
28 8 rows in set (0.00 sec)
29 
30 mysql> SHOW VARIABLES LIKE 'collation_%';
31 +----------------------+-------------------+
32 | Variable_name        | Value             |
33 +----------------------+-------------------+
34 | collation_connection | latin1_swedish_ci |
35 | collation_database   | latin1_swedish_ci |
36 | collation_server     | latin1_swedish_ci |
37 +----------------------+-------------------+
38 3 rows in set (0.01 sec)

设置外部访问Mysql的编码,如下所示;

 1 mysql> SET NAMES 'utf8';
 2 Query OK, 0 rows affected (0.01 sec)
 3 
 4 mysql> SHOW VARIABLES LIKE 'character_set_%';
 5 +--------------------------+----------------------------+
 6 | Variable_name            | Value                      |
 7 +--------------------------+----------------------------+
 8 | character_set_client     | utf8                       |
 9 | character_set_connection | utf8                       |
10 | character_set_database   | latin1                     |
11 | character_set_filesystem | binary                     |
12 | character_set_results    | utf8                       |
13 | character_set_server     | latin1                     |
14 | character_set_system     | utf8                       |
15 | character_sets_dir       | /usr/share/mysql/charsets/ |
16 +--------------------------+----------------------------+
17 8 rows in set (0.00 sec)
18 
19 mysql> SHOW VARIABLES LIKE 'collation_%';
20 +----------------------+-------------------+
21 | Variable_name        | Value             |
22 +----------------------+-------------------+
23 | collation_connection | utf8_general_ci   |
24 | collation_database   | latin1_swedish_ci |
25 | collation_server     | latin1_swedish_ci |
26 +----------------------+-------------------+
27 3 rows in set (0.00 sec)
28 
29 mysql> 

复制mysqld.cnf文件到/docker文件夹上面(在进行复制前需要先退出mysql的命令行哈)。

1 root@df4e1235ec72:/# mkdir docker                     
2 root@df4e1235ec72:/# cp /etc/mysql/mysql.conf.d/mysqld.cnf /docker/mysqld.cnf
3 root@df4e1235ec72:/# ls /docker
4 mysqld.cnf
5 root@df4e1235ec72:/# 

安装vim,如果不安装vim在使用vim的时候会报找不到,在修改docker中mysql的配置文件,无法使用vi命令。

 1 root@df4e1235ec72:/docker# apt-get update 
 2 Ign:1 http://deb.debian.org/debian stretch InRelease                                                
 3 Get:2 http://repo.mysql.com/apt/debian stretch InRelease [21.6 kB]                                  
 4 Get:3 http://deb.debian.org/debian stretch-updates InRelease [93.6 kB]                       
 5 Get:4 http://security.debian.org/debian-security stretch/updates InRelease [94.3 kB]                              
 6 Get:5 http://repo.mysql.com/apt/debian stretch/mysql-5.7 amd64 Packages [5689 B]                                  
 7 Get:6 http://security.debian.org/debian-security stretch/updates/main amd64 Packages [529 kB]
 8 Get:7 http://deb.debian.org/debian stretch Release [118 kB]                                                                                                                                                                    
 9 Get:8 http://deb.debian.org/debian stretch-updates/main amd64 Packages [28.2 kB]                                                                                                                                               
10 Get:9 http://deb.debian.org/debian stretch Release.gpg [2410 B]                                                                                                                                                                
11 Get:10 http://deb.debian.org/debian stretch/main amd64 Packages [7083 kB]                                                                                                                                                      
12 Fetched 7976 kB in 7min 40s (17.3 kB/s)                                                                                                                                                                                        
13 Reading package lists... Done
14 root@df4e1235ec72:/docker# apt-get install vim
15 Reading package lists... Done
16 Building dependency tree       
17 Reading state information... Done
18 The following additional packages will be installed:
19   vim-common vim-runtime xxd
20 Suggested packages:
21   ctags vim-doc vim-scripts
22 The following NEW packages will be installed:
23   vim vim-common vim-runtime xxd
24 0 upgraded, 4 newly installed, 0 to remove and 26 not upgraded.
25 Need to get 6734 kB of archives.
26 After this operation, 31.1 MB of additional disk space will be used.
27 Do you want to continue? [Y/n] y
28 Get:1 http://deb.debian.org/debian stretch/main amd64 xxd amd64 2:8.0.0197-4+deb9u3 [132 kB]
29 Get:2 http://deb.debian.org/debian stretch/main amd64 vim-common all 2:8.0.0197-4+deb9u3 [159 kB]                                                                                                                              
30 Get:3 http://deb.debian.org/debian stretch/main amd64 vim-runtime all 2:8.0.0197-4+deb9u3 [5409 kB]                                                                                                                            
31 Get:4 http://deb.debian.org/debian stretch/main amd64 vim amd64 2:8.0.0197-4+deb9u3 [1034 kB]                                                                                                                                  
32 Fetched 6734 kB in 7min 23s (15.2 kB/s)                                                                                                                                                                                        
33 debconf: delaying package configuration, since apt-utils is not installed
34 Selecting previously unselected package xxd.
35 (Reading database ... 8907 files and directories currently installed.)
36 Preparing to unpack .../xxd_2%3a8.0.0197-4+deb9u3_amd64.deb ...
37 Unpacking xxd (2:8.0.0197-4+deb9u3) ...
38 Selecting previously unselected package vim-common.
39 Preparing to unpack .../vim-common_2%3a8.0.0197-4+deb9u3_all.deb ...
40 Unpacking vim-common (2:8.0.0197-4+deb9u3) ...
41 Selecting previously unselected package vim-runtime.
42 Preparing to unpack .../vim-runtime_2%3a8.0.0197-4+deb9u3_all.deb ...
43 Adding 'diversion of /usr/share/vim/vim80/doc/help.txt to /usr/share/vim/vim80/doc/help.txt.vim-tiny by vim-runtime'
44 Adding 'diversion of /usr/share/vim/vim80/doc/tags to /usr/share/vim/vim80/doc/tags.vim-tiny by vim-runtime'
45 Unpacking vim-runtime (2:8.0.0197-4+deb9u3) ...
46 Selecting previously unselected package vim.
47 Preparing to unpack .../vim_2%3a8.0.0197-4+deb9u3_amd64.deb ...
48 Unpacking vim (2:8.0.0197-4+deb9u3) ...
49 Setting up xxd (2:8.0.0197-4+deb9u3) ...
50 Setting up vim-common (2:8.0.0197-4+deb9u3) ...
51 Setting up vim-runtime (2:8.0.0197-4+deb9u3) ...
52 Setting up vim (2:8.0.0197-4+deb9u3) ...
53 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vim (vim) in auto mode
54 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vimdiff (vimdiff) in auto mode
55 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rvim (rvim) in auto mode
56 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rview (rview) in auto mode
57 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vi (vi) in auto mode
58 update-alternatives: warning: skip creation of /usr/share/man/fr/man1/vi.1.gz because associated file /usr/share/man/fr/man1/vim.1.gz (of link group vi) doesn't exist
59 update-alternatives: warning: skip creation of /usr/share/man/it/man1/vi.1.gz because associated file /usr/share/man/it/man1/vim.1.gz (of link group vi) doesn't exist
60 update-alternatives: warning: skip creation of /usr/share/man/pl/man1/vi.1.gz because associated file /usr/share/man/pl/man1/vim.1.gz (of link group vi) doesn't exist
61 update-alternatives: warning: skip creation of /usr/share/man/ru/man1/vi.1.gz because associated file /usr/share/man/ru/man1/vim.1.gz (of link group vi) doesn't exist
62 update-alternatives: warning: skip creation of /usr/share/man/ja/man1/vi.1.gz because associated file /usr/share/man/ja/man1/vim.1.gz (of link group vi) doesn't exist
63 update-alternatives: warning: skip creation of /usr/share/man/man1/vi.1.gz because associated file /usr/share/man/man1/vim.1.gz (of link group vi) doesn't exist
64 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/view (view) in auto mode
65 update-alternatives: warning: skip creation of /usr/share/man/fr/man1/view.1.gz because associated file /usr/share/man/fr/man1/vim.1.gz (of link group view) doesn't exist
66 update-alternatives: warning: skip creation of /usr/share/man/it/man1/view.1.gz because associated file /usr/share/man/it/man1/vim.1.gz (of link group view) doesn't exist
67 update-alternatives: warning: skip creation of /usr/share/man/pl/man1/view.1.gz because associated file /usr/share/man/pl/man1/vim.1.gz (of link group view) doesn't exist
68 update-alternatives: warning: skip creation of /usr/share/man/ru/man1/view.1.gz because associated file /usr/share/man/ru/man1/vim.1.gz (of link group view) doesn't exist
69 update-alternatives: warning: skip creation of /usr/share/man/ja/man1/view.1.gz because associated file /usr/share/man/ja/man1/vim.1.gz (of link group view) doesn't exist
70 update-alternatives: warning: skip creation of /usr/share/man/man1/view.1.gz because associated file /usr/share/man/man1/vim.1.gz (of link group view) doesn't exist
71 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/ex (ex) in auto mode
72 update-alternatives: warning: skip creation of /usr/share/man/fr/man1/ex.1.gz because associated file /usr/share/man/fr/man1/vim.1.gz (of link group ex) doesn't exist
73 update-alternatives: warning: skip creation of /usr/share/man/it/man1/ex.1.gz because associated file /usr/share/man/it/man1/vim.1.gz (of link group ex) doesn't exist
74 update-alternatives: warning: skip creation of /usr/share/man/pl/man1/ex.1.gz because associated file /usr/share/man/pl/man1/vim.1.gz (of link group ex) doesn't exist
75 update-alternatives: warning: skip creation of /usr/share/man/ru/man1/ex.1.gz because associated file /usr/share/man/ru/man1/vim.1.gz (of link group ex) doesn't exist
76 update-alternatives: warning: skip creation of /usr/share/man/ja/man1/ex.1.gz because associated file /usr/share/man/ja/man1/vim.1.gz (of link group ex) doesn't exist
77 update-alternatives: warning: skip creation of /usr/share/man/man1/ex.1.gz because associated file /usr/share/man/man1/vim.1.gz (of link group ex) doesn't exist
78 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in auto mode
79 update-alternatives: warning: skip creation of /usr/share/man/fr/man1/editor.1.gz because associated file /usr/share/man/fr/man1/vim.1.gz (of link group editor) doesn't exist
80 update-alternatives: warning: skip creation of /usr/share/man/it/man1/editor.1.gz because associated file /usr/share/man/it/man1/vim.1.gz (of link group editor) doesn't exist
81 update-alternatives: warning: skip creation of /usr/share/man/pl/man1/editor.1.gz because associated file /usr/share/man/pl/man1/vim.1.gz (of link group editor) doesn't exist
82 update-alternatives: warning: skip creation of /usr/share/man/ru/man1/editor.1.gz because associated file /usr/share/man/ru/man1/vim.1.gz (of link group editor) doesn't exist
83 update-alternatives: warning: skip creation of /usr/share/man/ja/man1/editor.1.gz because associated file /usr/share/man/ja/man1/vim.1.gz (of link group editor) doesn't exist
84 update-alternatives: warning: skip creation of /usr/share/man/man1/editor.1.gz because associated file /usr/share/man/man1/vim.1.gz (of link group editor) doesn't exist
85 root@df4e1235ec72:/docker# 

修改my.cnf配置文件,如果你喜欢的话,可以直接修改的,我这里备份出来进行修改,再进行覆盖原有的文件。

在容器中将刚才修改后的文件覆盖回去,如下所示:

1 root@df4e1235ec72:/docker# vim mysqld.cnf 
2 root@df4e1235ec72:/docker# cp /docker/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf 
3 root@df4e1235ec72:/docker# 

退出并重启容器,如下所示:

 1 [root@slaver1 book]# docker ps
 2 CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                               NAMES
 3 531862daae8d        docker.io/mysql:5.7.26   "docker-entrypoint..."   21 minutes ago      Up 21 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   focused_blackwell
 4 4d52cd016170        book                     "catalina.sh run"        About an hour ago   Up About an hour    0.0.0.0:8888->8080/tcp              gallant_bohr
 5 [root@slaver1 book]# docker restart 531862daae8d
 6 531862daae8d
 7 [root@slaver1 book]# docker ps
 8 CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                               NAMES
 9 531862daae8d        docker.io/mysql:5.7.26   "docker-entrypoint..."   21 minutes ago      Up 2 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp   focused_blackwell
10 4d52cd016170        book                     "catalina.sh run"        About an hour ago   Up About an hour    0.0.0.0:8888->8080/tcp              gallant_bohr
11 [root@slaver1 book]# 

注意,千万别基于刚才的容器创建一个新的镜像,不然,之前的工作又要重新做一遍了的。

如果虚拟机重新启动,启动docker,然后启动你的mysql容器,docker start CONTAINER ID,停止dcker stop CONTAINER ID ,重启dcker stop CONTAINER ID。