docker 學習之一 裝MySQL 供遠端使用 Linux

2023-03-09 21:00:18

因為Linux發行版本的問題折騰了好久,儘量使用LTS的版本。其他版本有時候缺的東西太多了,對新手相當不友好。

大概花了幾天實在沒招了,下了個LTS的版本,再裝時正常了。按照官方檔案都可以搞定了。

使用這個版本的ubuntu-22.04.2-desktop-amd64.iso的,官網上下的,用虛擬機器器弄個上裝了下,檢查下有沒有聯網。

ping www.baidu.com
  • 首先切root上,不知道前幾個版本時不是也是這個原因,反正到處缺包報錯。最後上這個直接切root。
#使用者叫xman 在 xman-virtual-machine的機子上登入
xman@xman-virtual-machine:~$ su -
Password: 
root@xman-virtual-machine:~# 

輸入 su - 會讓你輸入密碼,輸入當前賬號的登入密碼。切成root使用者。安裝許可權最大,但是docker群組有些操作不了,資料夾也存取不全,

還要授權亂七八糟。

#清空歷史版本
sudo apt-get remove docker docker-engine docker.io containerd runc
#更新下包管理器
sudo apt-get update
#允許https型別的通過
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
#Docker’s official GPG key
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
#設定儲存庫
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#更新包管理器
sudo apt-get update
#如果更新出錯GPGkey有誤 
sudo chmod a+r /etc/apt/keyrings/docker.gpg
sudo apt-get update
#安裝docker
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#用預設的容器檢查下是否安裝成功
sudo docker run hello-world

以上都完了以後就代表安裝成功,真真的門檻安裝都吃力。

  • 查一下本機對外提供服務的IP,使用這個建立個網橋
ip address

如果聯網了,你大概能看到你的IP,作為對外通訊的IP

 

然後建立個網橋,作為容器和本機的通道,這樣容器通過這個橋使用本機東西對外提供服務

#檢視網橋的內容,一般有幾個
docker network ls
#清空沒用的網路
docker network prune
#如果一個網橋被使用中你刪不掉需要先關掉容器,刪除容器,然後刪除
docker stop mycontainer1
docker rm mycontainer1
docker network prune
# 清除不用的網橋後大體乾淨了,就做個自己用本機對外提供服務的IP做
docker network create \
    -o "com.docker.network.bridge.host_binding_ipv4"="192.168.139.129" \
    br0
#檢查下狀態有沒有問題
docker net ls

 

  • 下載MySQL並安裝
#查一下現有的映象
docker images
#如果下來了直接裝,沒有下來就下一下,不寫版本預設是last的
docker pull mysql
#然後安裝
docker run -di --privileged=true -p 3306:3306 --network=br0 -v /home/mysql/log:/var/log/mysql -v /home/mysql/data:/var/lib/mysql -v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /home/mysql/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456 --name my mysql

 

  1. -di d 後臺執行,有守護行程處理 i 可以互動 這個弄了以後就不用手動啟動了
  2. --privileged=true 提升許可權,防止MySQL的有些目錄沒許可權存取
  3. -p 3306:3306 埠對映 主埠:容器埠 容器的口接到主機上對外提供服務
  4. --network=br0 使用網橋 br0建立此容器,並對外提供服務
  5. -v /home/mysql/log:/var/log/mysql 
  6. -v /home/mysql/data:/var/lib/mysql 
  7. -v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf 
  8. -v /home/mysql/mysql-files:/var/lib/mysql-files 
  9. 主機目錄:容器目錄,把容器的資料和組態檔掛載到主機上防止丟失和設定同步,這個是以前的如果需要改遠端存取的改 my.cnf檔案
  10. -e MYSQL_ROOT_PASSWORD=123456 設定登入資料庫root使用者的密碼是123456,到時候進容器可以用這個進資料庫
  11. --name my mysql 容器名稱 容器建立依據的映象名稱
  •   先進去看看容器,並且切到MySQL中看看允許遠端存取不
#互動進去my容器中
docker exec -it my /bin/bash
#進入MySQL看看
mysql -uroot -p123456
#切到管理資料庫
use mysql;
#檢視下是否允許遠端存取
select user,host from user;
#如果不允許改下
update user set host ='%' where user ='root';
#重新整理許可權
flush privileges;
#如果不想用這個自己建個使用者
CREATE USER 'username'@‘%' IDENTIFIED BY '123';
#然後授權
grant all privileges on *.*  to 'username'@'%' ; 
#同樣重新整理一下
flush privileges; #退出MySQL exit; #退出容器 exit

 

  • 遠端連線一下看看

在遠端機器上輸入IP連線一下貌似可以

 

至此搞完。

另外記錄下vi的作業。linux的編輯器對windows轉過來的很不友好。

#可以開啟一個這個位置的cnf的檔案
vi /home/bin/conf.cnf 
#預設是命令模式,不支援輸入字元,輸入的都是命令
可以使用滾輪HJKL來移動到你想要的行列home|end也可以
移動了以後摁i以後進入編輯模式
shift+字元好像才可以輸入想要的字元,一不注意就跑回命令模式了。
並且上下左右箭頭是ABCD字元,
dd可以刪除一行
delete可以刪除一個字元
u是復原更改
連按兩次Esc可以切換到命令模式
想儲存摁:
然後q!直接退出忽略更改
wq儲存並退出
搞這玩意的時候最好確定你有許可權動這個檔案,要不費勁弄完,就笑了。