Docker 是這幾年非常火的一項技術,作為一名軟件開發人員,應該及時的接觸和掌握。
鏡像加速:
可以在阿里雲上免費的獲取,然后進行配置即可使用。阿里雲 Docker 加速器,沒有阿里雲賬號注冊一個即可。

docker的具體安裝可以參考官網上的安裝教程,驗證安裝是否成功
docker -v
1.安裝MySQL
1)拉取鏡像
// 拉取最新版的mysql docker pull mysql //拉取指定版本的mysql docker pull mysql:5.7
2)運行MySQL
#運行最新版 Mysql docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345678 -d mysql #運行制定版本 docker run --name mysql_57 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345678 -d mysql:5.7
參數說明:
- run:創建一個新的容器
- --name:指定容器的名稱
- -p:端口映射(宿主機端口:容器端口)
- -e: 傳入環境變量
- -d: 后台運行
進入容器內部:
docker exec -it mysql bash
參數說明:
- -i:標識允許對容器進行操作,交互式操作
- -t:在容器中新創建一個偽終端
- /etc/mysql: Mysql容器內的配置文件目錄, 目錄下包含my.cnf配置和一個conf.d文件夾,my.cnf文件內是一些基礎配置。自定義的配置應該卸載conf.d文件夾下的配置文件里,從而覆蓋默認的my.cnf
- /var/lib/mysql:鏡像內MySQL的持久化數據存儲目錄
MySQL 屬於有狀態應用,若將其容器化需將其狀態抽離到宿主機,其配置文件、日志文件和持久化數據都應該掛載到宿主機上。在 PC 上創建目錄存儲 Mysql 的數據、配置、日志,這樣數據存儲在宿主機上,我們刪除容器后再次安裝,可直接使用,不會導致數據丟失。
mkdir -p docker/mysql && cd docker/mysql
mkdir data log conf
移除之前創建的mysql容器:
docker stop mysql && docker rm mysql
在 conf 目錄中新建 my.cnf 文件,作為 Mysql 的配置文件
vim my.cnf [mysqld] datadir=/var/lib/mysql #(默認不是中國時區,使用的時候被坑過) default-time_zone = '+8:00' log-error=/var/log/mysql/error.log
然后重新創建 Mysql 容器,並將創建的目錄掛載到容器內對應的目錄上。
docker run --name mysql --restart=always ( Docker 重啟時容器也跟隨啟動) --privileged=true (Docker 為容易內的 root 用戶賦予真正的 root 權限,不然會提示 log 目錄權限不足) -p 3306:3306 -v docker/mysql/conf:/etc/mysql/conf.d (將配置目錄掛載到容器內的配置目錄) -v docker/mysql/data:/var/lib/mysql (將數據存儲目錄掛載到容器內的出局存儲目錄) -v /docker/mysql/log:/var/log/mysql (將日志目錄掛載到容器內的日志目錄) -e MYSQL_ROOT_PASSWORD=12345678 -d mysql
參數說明:
- -v:將容器內路徑掛載到宿主機路徑
如果發生目錄找不到或錯誤, 嘗試使用宿主機的絕對路徑
如果想要對默認數據進行修改,允許遠程訪問,需進入容器內執行操作
$ docker exec -it mysql bash $ mysql -u root -p $ mysql-> ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '12345678'; $ mysql-> FLUSH PRIVILEGES;
2.安裝NGINX
1)拉取鏡像
docker pull nginx
2)啟動容器
nginx run -d --name nginx -p 80:80 nginx
然后訪問 localhost 就可以看到 Nginx 的默認歡迎頁面
3)創建目錄存儲 Nginx 的配置和日志
mkdir -p docker/nginx && cd docker/nginx
mkdir conf log
4)從容器內復制配置文件到宿主機,經配置文件映射到容器內對應的目錄中
docker cp nginx:/etc/nginx/conf.d/default.conf docker/nginx/conf/default.conf
5)重建容器
docker stop nginx && docker rm nginx docker run --name nginx -p 80:80 -v docker/nginx/conf:/etc/nginx/conf.d -v docker/www:/usr/share/nginx/html -v docker/nginx/log:/var/log/nginx -d nginx
3、安裝PHP
1)拉取PHP鏡像
docker pull php:fpm
2)創建容器
docker run --name php-fpm -p 9000:9000 -d php:fpm
3)創建目錄存儲php配置文件和日志
mkdir -p docker/php && cd docker/php
mkdir conf log
4)從容器中復制配置文件
docker cp php-fpm:/usr/local/etc/php-fpm.d/www.conf docker/php/conf/www.conf
docker cp php-fpm:/usr/local/etc/php/php.ini-production docker/php/conf/php.ini
5)重新啟動容器
docker run --name php-fpm --link mysql:mysql -v ~/docker/www:/var/www/html -v docker/php/conf/www.conf:/usr/local/etc/php-fpm.d/www.conf -v docker/php/conf/php.ini:/usr/local/etc/php/php.ini -d php:fpm
- --link <name or id>:alias : 可以用來鏈接2個容器,使得源容器和接收容器之間可以互相通信
name和id是源容器的name和id,alias是源容器在link下的別名
連接 PHP 和 Mysql 容器后,PHP 腳本連接數據庫時,host 的值為 'mysql'。
6)Nginx 容器支持 PHP-FPM 容器
修改 Nginx 的配置文件 default.conf
server { listen 80; server_name localhost; root /var/www/html; charset utf-8; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log; location / { index index.html index.htm index.php; try_files $uri $uri/ /index.php?$query_string; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ~ \.php$ { fastcgi_index index.php; #php-fpm容器名:端口號 fastcgi_pass php-fpm:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } }
在docker/www下創建index.php
<?php
phpinfo();
打開localhost查看是否顯示正常
4.PHP擴展安裝
進入到容器中執行
docker-php-ext-install mysqli
如果無法安裝,則可以
pecl install redis && docker-php-ext-install redis
安裝gd擴展
apt-get update apt-get install libpng-dev libjpeg-dev libfreetype6-dev docker-php-ext-install gd
有些擴展並不是自帶的,需要使用perl來進行安裝,例如memcached
FROM php:7.1-fpm RUN apt-get update \ # 手動安裝依賴 && apt-get install -y libmemcached-dev zlib1g-dev \ # 安裝需要的擴展 && pecl install memcached-2.2.0 \ # 啟用擴展 && docker-php-ext-enable memcached
使用docker-php-ext-enable來進行啟用
安裝完擴展后,不需要修改配置文件,重啟 PHP 容器即可。
-
容器啟動順序:mysql > php > nginx
其他:
1.laradock https://github.com/laradock/laradock 基於docker搭建的laravel框架開發環境
常見問題:

