Kubernetes(k8s)的deployment資源


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。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM