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&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。