廢話不多說~~
1、拉取一個現成的鏡像,當然也可以拉取centos鏡像,自己安裝
docker pull mysql:5.7
https://hub.docker.com/從這里巴拉,有說明看。
2、測試鏡像
docker拉取的鏡像都是別人上傳的,人家的環境能用,不一定你的環境也能用。所以測試一下,修改成自己想要的。
docker run --name tempMysql -p 33307:3306 -e MYSQL_ROOT_PASSWORD=password -e LANG=C.UTF-8 -d mysql:5.7
--name 后面是指定的容器名
-p 代表端口映射,格式為 宿主機映射端口:容器運行端口
-e 代表添加環境變量
MYSQL_ROOT_PASSWORD是root用戶的登陸密碼
mysql:5.7 是下載的鏡像+版本(若不指定版本,該命令會重新下載mysql最新的鏡像)
-d 后台啟動
客戶端執行:
mysql -h192.168.2.22 -P 33307 -uroot -p
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
如果客戶端是docker的宿主機的話,也需要指定-h,不然就練到127.0.0.1 然后報錯。
3、定制自己的鏡像
vim dockerfile
FROM mysql:5.7
WORKDIR /docker-entrypoint-initdb.d
ENV LANG=C.UTF-8
ENV MYSQL_ROOT_PASSWORD=password
docker build -t mysql:my
注意:這里設置了兩個ENV,相當於把mysql的密碼和字符集寫死了。
不想寫死的話docker run的時候就要加上-e 設置這兩個變量。同理在k8s上運行也是一樣的,不想寫死就的設置環境變量,如果不想費心找密碼的話。
我們的數據庫在生產環境中基本不用(沒那個精鋼鑽呀),所以我沒配置存儲,有需要的自行參考https://hub.docker.com/_/mysql
4、推送到私有鏡像庫
docker push hub.ict.ac.cn/dev/mysql:my
5、在docker上運行
docker run --name tempMysql -p 33307:3306 -d mysql:my
docker run --name tempMysql -p 33307:3306 -e LANG=C.UTF-8 -e MYSQL_ROOT_PASSWORD=password -d mysql:my
6、k8s運行mysql
kubectl apply -f mysql.yaml
使用原裝鏡像的:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: mysql
namespace: wde
spec:
selector:
matchLabels:
app: mysql-wde
template:
metadata:
labels:
app: mysql-wde
spec:
containers:
- name: mysql-wde
image: mysql:5.7
ports:
- containerPort: 3306
env:
- name: LANG
value: 'C.UTF-8'
- name: MYSQL_ROOT_PASSWORD
value: 'password'
---
apiVersion: v1
kind: Service
metadata:
name: mysql-svc
namespace: test
labels:
name: mysql-svc
spec:
type: NodePort
ports:
- port: 3306
protocol: TCP
targetPort: 3306
name: http
nodePort: 31106
selector:
app: mysql-wde
使用自定義鏡像的:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: mysql
namespace: wde
spec:
selector:
matchLabels:
app: mysql-wde
template:
metadata:
labels:
app: mysql-wde
spec:
containers:
- name: mysql-wde
image: hub.ict.ac.cn/dev/mysql:my
ports:
- containerPort: 3306
---
apiVersion: v1
kind: Service
metadata:
name: mysql-svc
namespace: test
labels:
name: mysql-svc
spec:
type: NodePort
ports:
- port: 3306
protocol: TCP
targetPort: 3306
name: http
nodePort: 31106
selector:
app: mysql-wde
如果出現報錯:
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.2.22' (111) 單純查這個錯是因為拒絕遠程連接,以為是mysql配置bind_address的問題。
其實也有可能dp沒有起來,仔細檢查一下。
7、測試連接
mysql -h 192.168.2.22 -uroot -P31106 -p
use mysql
創建用戶(生產環境千萬別. 根據自己需求改,密碼不能弱口令)
grant all privileges on . to 'root'@'%' identified by 'password' with grant option;