20181231 假期閒來無事,整理一下 docker mysql 及 phpmyadmin 學習經歷php
官網
https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce-1mysql
安裝 docker-ce sudo apt-get install docker-ce
1)、每個 Docker container (容器)就是一個特定應用程序,啓動後就是一個特定進程 2)、一個容器就是一項服務,每個 mysql 容器就能夠提供一個 mysql 服務和若干實例 3)、這裏特地安裝 2 個不一樣版本,宿主機本身也已經安裝過 LNMP ,用於對比學習
1)、查找 mysql 鏡像 docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 7585 [OK] mariadb MariaDB is a community-developed fork of MyS… 2460 [OK] mysql/mysql-server Optimized MySQL Server Docker images. Create… 569 [OK] zabbix/zabbix-server-mysql Zabbix Server with MySQL database support 155 [OK] hypriot/rpi-mysql RPi-compatible Docker Image with Mysql 102 zabbix/zabbix-web-nginx-mysql Zabbix frontend based on Nginx web-server wi… 82 [OK] centurylink/mysql Image containing mysql. Optimized to be link… 59 [OK] .... 2)、下載安裝 mysql 最新版 sudo docker pull mysql 3)、下載安裝 mysql 5.6 sudo docker pull mysql:5.6 4)、docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.6 27e29668a08a 47 hours ago 256MB mysql/mysql-server latest a02eab9e2434 2 months ago 276MB hello-world latest 4ab4c602aa5e 3 months ago 1.84kB 5)、運行 mysql/mysql-server 容器 sudo docker run --name mysql56 -e MYSQL_ROOT_PASSWORD=123456 -p 3309:3306 -d mysql:5.6 參數說明: --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3308:3306 6)、運行 mysql 5.6 容器 sudo docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3309:3306 -d mysql/mysql-server 參數說明: 同上 7)、查看容器是否啓動、 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 88c2aaa078d9 mysql:5.6 "docker-entrypoint.s…" 6 seconds ago Up 4 seconds 0.0.0.0:3309->3306/tcp mysql56 f53d369601e4 mysql/mysql-server "/entrypoint.sh mysq…" 3 minutes ago Up 3 minutes (healthy) 33060/tcp, 0.0.0.0:3308->3306/tcp mysql 8)、查看容器端口 docker port mysql 3306/tcp -> 0.0.0.0:3308 容器的 3306 端口映射到宿主機的 3308 端口 docker port mysql56 3306/tcp -> 0.0.0.0:3309 9)、查看容器 IP docker inspect mysql56 ... "IPAddress": "172.17.0.2", ... docker inspect mysql ... "IPAddress": "172.17.0.3", ... ** 如下鏈接測試 h 也可使用容器的 IP ** 容器 IP 是動態的,每一次不必定同樣
瀏覽器測試放到下一步:安裝 phpmyadmin 的時候在進行 這裏直接在命令行測試 ** 注意端口號是大寫 P ,小寫p指的是密碼 1)、鏈接宿主機本身的的 mysql(如下指令是等效的) mysql -uroot -p123456 mysql -P3306 -uroot -p123456 mysql -h127.0.0.1 -P3306 -uroot -p123456 mysql -hlocalhost -P3306 -uroot -p123456 查看版本號 mysql> select version(); +-------------------------+ | version() | +-------------------------+ | 5.7.24-0ubuntu0.18.04.1 | +-------------------------+ 1 row in set (0.00 sec) 退出 mysql> quit 2)、鏈接容器 mysql 的 mysql (容器名字沒有取好,應該也帶上一個版本號,例如:mysql57) mysql -P3308 -u root -p123456 (這個不對!仍是鏈接的宿主機的mysql) mysql -h127.0.0.1 -P3308 -uroot -p123456 mysql -hlocalhost -P3308 -uroot -p123456 (這個不對!仍是鏈接的宿主機的mysql) 查看版本號 mysql> select version(); +-------------------------+ | version() | +-------------------------+ | 5.7.24-0ubuntu0.18.04.1 | +-------------------------+ 1 row in set (0.00 sec) 3)、鏈接容器 mysql56 的 mysql mysql -P3309 -u root -p123456(這個不對!仍是鏈接的宿主機的mysql) mysql -h127.0.0.1 -P3309 -uroot -p123456 mysql -hlocalhost -P3309 -uroot -p123456 (這個不對!仍是鏈接的宿主機的mysql) mysql> select version(); +-----------+ | version() | +-----------+ | 5.6.42 | +-----------+ 1 row in set (0.00 sec)
** 這裏只列出容器 mysql56 docker exec -it mysql56 bash root@88c2aaa078d9:/# ls bin boot dev docker-entrypoint-initdb.d entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@88c2aaa078d9:/# mysql -V mysql Ver 14.14 Distrib 5.6.42, for Linux (x86_64) using EditLine wrapper root@88c2aaa078d9:/# apt update 進入 mysql root@88c2aaa078d9:/# mysql -uroot -p123456 Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.6.42 MySQL Community Server (GPL) 查詢版本號 mysql> select version(); +-----------+ | version() | +-----------+ | 5.6.42 | +-----------+ 1 row in set (0.00 sec)
1)查找 phpmyadmin 鏡像 sudo docker search phpmyadmin NAME DESCRIPTION STARS OFFICIAL AUTOMATED phpmyadmin/phpmyadmin A web interface for MySQL and MariaDB. 697 [OK] nazarpc/phpmyadmin phpMyAdmin as Docker container, based on off… 60 [OK] 1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 48 [OK] ... 2)、安裝 phpmyadmin 鏡像 sudo docker pull phpmyadmin 出錯了! Using default tag: latest Error response from daemon: pull access denied for phpmyadmin, repository does not exist or may require 'docker login' docker pull phpmyadmin/phpmyadmin 3)、確認 phpmyadmin 鏡像 docker images REPOSITORY TAG IMAGE ID CREATED SIZE php 5.6-fpm 3c6963d39c34 46 hours ago 344MB mysql 5.6 27e29668a08a 2 days ago 256MB phpmyadmin/phpmyadmin latest 15ca549393be 2 weeks ago 166MB ... 4)、先運行 mysql 容器 a).前面已經建立過 2 個 mysql 容器,這裏直接 start 便可 b).若是沒有建立過mysql 容器,先去 docker run 創建 c).爲了對比學習,這裏將 2 個 mysql 容器都運行起來,分別 Link ,分別創建 phpmyadmin ro容器 docker start mysql docker start mysql56 5)、創建 2 個 phpmyadmin 容器 sudo docker run --name phpmyadmin72 --link mysql:db -p 9998:80 -d phpmyadmin/phpmyadmin 參數說明: --link mysql:db 鏈接到 容器mysql ,給這個 link 一個別名爲db sudo docker run --name phpmyadmin56 --link mysql56:db -p 9997:80 -d phpmyadmin/phpmyadmin 參數說明:同上 6)、確認容器已經運行 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 52fcab4ddbdc phpmyadmin/phpmyadmin "/run.sh supervisord…" 4 seconds ago Up 3 seconds 9000/tcp, 0.0.0.0:9997->80/tcp phpmyadmin56 6d8013dd8267 phpmyadmin/phpmyadmin "/run.sh supervisord…" 18 seconds ago Up 17 seconds 9000/tcp, 0.0.0.0:9998->80/tcp phpmyadmin72 88c2aaa078d9 mysql:5.6 "docker-entrypoint.s…" 4 hours ago Up 7 minutes 0.0.0.0:3309->3306/tcp mysql56 f53d369601e4 mysql/mysql-server "/entrypoint.sh mysq…" 4 hours ago Up 21 minutes (healthy) 33060/tcp, 0.0.0.0:3308->3306/tcp mysql 7)、瀏覽器測試: ** 2個數據庫容器的 mysql 都是: 用戶名: root 密碼:123456 鏈接容器 mysql老是登陸不上? http://192.168.1.192:9998/index.php
鏈接容器 mysql56 是正確的 http://192.168.1.192:9997/index.php
8)、部署 phpmyadmin 有3種方法,我這裏只是最簡單的一種 詳細學習請參考
https://blog.csdn.net/Gekkoou/article/details/80897309linux
從以上部署 phpmyadmin 能夠看出 1)、phpmyadmin 其實就是一個 php 網站 2)、前一步部署的其實就是別人作好的網站鏡像 3)、若是擁有了鏡像,使用 Docker 部署起來真的很快捷! 4)、到如今爲止,php 開發環境所須要的元素都已經學習過了,怎麼給他們組合起來? 接下來該學習 Dockerfile,docker-compose