Ubuntu18.04 使用Docker安裝MySQL並在宿主機登錄
安裝Docker
- 如果有舊版本的話,需要先卸載舊版本
按照官方文檔的教程:
- 準備工作
# 先卸載舊版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 更新軟件包索引,嫌棄國外軟件源慢的可以自行更換軟件源
sudo apt-get update
# 安裝依賴
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# 添加Docker的官方GPG密鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 驗證安裝:9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88通過搜索指紋的最後8個字符,驗證您現在擁有帶指紋的密鑰。
sudo apt-key fingerprint 0EBFCD88
# 輸出這個結果表示添加成功
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <[email protected]>
sub rsa4096 2017-02-22 [S]
- 開始安裝
# 更新apt包索引
sudo apt-get update
# 安裝最新版docker
sudo apt-get install docker-ce
- 至此Docker已經安裝完成
拉取MySQL
- 查找Docker Hub上的mysql鏡像
docker search mysql
返回結果,按星級排序:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 7960 [OK]
mariadb MariaDB is a community-developed fork of MyS… 2662 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 598 [OK]
zabbix/zabbix-server-mysql Zabbix Server with MySQL database support 176 [OK]
hypriot/rpi-mysql RPi-compatible Docker Image with Mysql 110
zabbix/zabbix-web-nginx-mysql Zabbix frontend based on Nginx web-server wi… 92 [OK]
centurylink/mysql Image containing mysql. Optimized to be link… 60 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 50
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 50 [OK]
mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr… 41
tutum/mysql Base docker image to run a MySQL database se… 31
schickling/mysql-backup-s3 Backup MySQL to S3 (supports periodic backup… 25 [OK]
bitnami/mysql Bitnami MySQL Docker Image 25 [OK]
zabbix/zabbix-web-apache-mysql Zabbix frontend based on Apache web-server w… 24 [OK]
zabbix/zabbix-proxy-mysql Zabbix proxy with MySQL database support 20 [OK]
linuxserver/mysql A Mysql container, brought to you by LinuxSe… 20
centos/mysql-56-centos7 MySQL 5.6 SQL database server 13
circleci/mysql MySQL is a widely used, open-source relation… 12
mysql/mysql-router MySQL Router provides transparent routing be… 8
dsteinkopf/backup-all-mysql backup all DBs in a mysql server 6 [OK]
openshift/mysql-55-centos7 DEPRECATED: A Centos7 based MySQL v5.5 image… 6
jelastic/mysql An image of the MySQL database server mainta… 1
cloudposse/mysql Improved `mysql` service with support for `m… 0 [OK]
widdpim/mysql-client Dockerized MySQL Client (5.7) including Curl… 0 [OK]
ansibleplaybookbundle/mysql-apb An APB which deploys RHSCL MySQL 0 [OK]
- 選擇安裝版本
# 5.6是版本號
docker pull mysql:5.6
- 查看剛安裝的MySQL
docker images | mysql
# 返回結果
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.6 bc788a6a2745 33 hours ago 256MB
啓動Docker中的MySQL
- 啓動MySQL
# 要執行的命令,將Docker中的3306端口映射到宿主機的3306
docker run -p 3306:3306 --name mysql56 -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
# 返回結果
0d9288bf06fba3d67d75c1a1f3c4ac74182c185e33c3c4a428401686ef5fb818
# 命令釋義:
-p 3306:3306:將容器的 3306 端口映射到主機的 3306 端口。
-v $PWD/conf:/etc/mysql/conf.d:將主機當前目錄下的 conf/my.cnf 掛載到容器的 /etc/mysql/my.cnf。
-v $PWD/logs:/logs:將主機當前目錄下的 logs 目錄掛載到容器的 /logs。
-v $PWD/data:/var/lib/mysql :將主機當前目錄下的data目錄掛載到容器的 /var/lib/mysql 。
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用戶的密碼。
- 查看啓動狀態
# 要執行的命令
docker ps
# 返回結果
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0d9288bf06fb mysql:5.6 "docker-entrypoint.s…" 19 seconds ago Up 18 seconds 0.0.0.0:3306->3306/tcp mysql56
連接MySQL
- 如果宿主機中沒有安裝MySQL客戶端,需要先安裝MySQL客戶端
# 二選一,裝一個就好
apt install mysql-client-core-5.7
apt install mariadb-client-core-10.1
# 連接
mysql -u root -p 123456
# 不出以外會報錯
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
在Docker中安裝的MySQL和宿主機是兩個概念,需要走tcp連接。
所以原來的socket連接的命令就會報錯。
- 需要使用tcp連接命令來連接Docker中安裝的MySQL
# 這樣就可以連接到MySQL了
mysql -h 127.0.0.1 -P 3306 -u root -p