Docker安裝請參考:【Linux下安裝Docker CE】
正式開始前,我們需要簡單了解Docker容器的常用操作命令:
Docker啟動容器的方式兩種
- 以交互式啟動容器:
docker run -it --name 容器名稱 鏡像 /bin/bash以這種方式啟動Docker容器,會在容器啟動后進入容器內(nèi),可以對容器進行操作。 - 以守護進程方式啟動容器:
docker run -d --name 容器名稱 鏡像以這種方式啟動Docker容器,在容器啟動后不會進入容器內(nèi)。后續(xù)如果需要對容器進行操作,可以執(zhí)行命令:docker exec -it 容器名稱(容器ID) /bin/bash
Docker啟動容器的一些啟動參數(shù)
-
--name 容器名稱:設(shè)置容器的名稱(對已存在的容器,名稱需唯一) -
--restart=always:設(shè)置容器自啟動(默認為非自啟動,根據(jù)需要設(shè)置) -
--link <name or id>:alias:將源容器的網(wǎng)絡(luò)并入當(dāng)前容器的網(wǎng)絡(luò),Docker會將源容器的host更新到當(dāng)前容器的/etc/hosts中,以此來獲取源容器的信息,并與之建立通信和傳遞數(shù)據(jù)。<name or id>是源容器的名稱或ID,alias是源容器在link下的別名。 -
-p xx:yy:端口映射,將宿主機的xx端口,映射到容器內(nèi)的yy端口 -
-e XXX=yy:設(shè)置容器內(nèi)的環(huán)境變量,將XXX環(huán)境變量設(shè)置為yy。例如啟動MySQL容器時使用-e MYSQL_ROOT_PASSWORD=123將MySQL的root用戶密碼初始化為123。 -
-v xxx:yyy:zz:將容器內(nèi)的yyy目錄掛載到宿主機的xxx目錄(Docker不推薦掛載文件),:zz是掛載路徑的權(quán)限,可以不設(shè)置,默認為:rw(讀寫模式),可以設(shè)置為:ro(只讀模式)。例如啟動Nginx容器時使用-v ~/nginx/www:/usr/share/nginx/html:ro將容器內(nèi)的/usr/share/nginx/html目錄掛載到宿主機的~/nginx/www目錄,即/root/nginx/www目錄,并且設(shè)置掛載路徑權(quán)限為只讀模式。
Docker容器啟動、停止、重啟
- Docker容器啟動:
docker start 容器名稱(容器ID) - Docker容器停止:
docker stop 容器名稱(容器ID) - Docker容器重啟:
docker restart 容器名稱(容器ID)
查看Docker容器
- 查看全部容器:
docker ps -a - 查看正在運行的容器:
docker ps
宿主機與Docker容器的文件傳輸
docker cp 源路徑 目標路徑 將源路徑的文件或目錄復(fù)制到目標路徑中
刪除Docker容器
docker rm 容器名稱(容器ID) 在刪除容器之前,需要停止容器。
刪除Docker鏡像
docker rmi 容器名稱:標簽(容器ID)
一、Docker中安裝MySQL
1. 拉取MySQL鏡像
以MySQL5.7.25為例
docker pull mysql:5.7.25
以MySQL8.0.33為例
docker pull mysql:8.0.33
2. 此時可以查看已有的鏡像
docker images
3. 啟動MySQL容器
以MySQL5.7.25為例
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.25
以MySQL8.0.33為例
docker run -d --restart=always --privileged=true --name mysql8 -v /data/mysql/conf:/etc/mysql -v /data/mysql/data:/var/lib/mysql -v /data/mysql/log:/var/log -v /data/mysql/mysql-files:/var/lib/mysql-files -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.33
- -v /data/mysql/conf:/etc/mysql:將MySQL配置文件掛載到宿主機的/data/mysql/conf目錄
- -v /data/mysql/data:/var/lib/mysql:將MySQL數(shù)據(jù)文件掛載到宿主機的/data/mysql/data目錄
- -v /data/mysql/log:/var/log:將MySQL日志文件掛在到宿主機的/data/mysql/log目錄
- -v /data/mysql/mysql-files:/var/lib/mysql-files:MySQL8掛載文件時需要掛載此目錄
- --privileged=true:解決報錯cannot access '/docker-entrypoint-initdb.d/': Operation not permitted的權(quán)限問題
- -p 3306:3306:將宿主機的3306端口映射到容器內(nèi)的3306端口
- --name mysql:設(shè)置容器名稱為mysql
- -e MYSQL_ROOT_PASSWORD=123456:初始化root用戶的密碼為123456
4. 查看容器
docker ps或docker ps -a
二、Docker中安裝Tomcat并部署Web項目
1. 拉取Tomcat鏡像,此處以Tomcat8.5.40為例
docker pull tomcat:8.5.40
2. 啟動Tomcat容器
docker run -d -p 8080:8080 --name tomcat tomcat:8.5.40
3. 部署Web應(yīng)用
(1)將war包上傳到宿主機中;
(2)通過docker cp命令將宿主機的war包上傳到容器中tomcat的webapps目錄下;
(3)tomcat會自動熱部署,直接訪問Web應(yīng)用的路徑即可。
例如:docker cp xxx.war tomcat:/usr/local/tomcat/webapps 將xxx.war包上傳到名稱為tomcat的容器中的/usr/local/tomcat/webapps路徑下。
三、Docker中安裝Nginx + PHP
安裝PHP
1. 拉取PHP鏡像,此處以PHP7.1-fpm為例、
docker pull php:7.1-fpm
2. 啟動PHP容器
docker run -d --name php-fpm -v /root/docker/nginx/www:/var/www/html php:7.1-fpm
- -v /root/docker/nginx/www:/var/www/html:將容器內(nèi)的/var/www/html目錄掛載到宿主機的/root/docker/nginx/www目錄,掛載路徑的權(quán)限使用默認的:rx(讀寫模式)。
3. 創(chuàng)建/root/docker/nginx/conf/conf.d目錄
mkdir /root/docker/nginx/conf/conf.d
4. 在/root/docker/nginx/conf/conf.d目錄下添加default.conf文件,在該文件中添加以下內(nèi)容
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
include fastcgi_params;
}
}
說明:
- php:9000 表示 php-fpm 服務(wù)的訪問路徑
- /var/www/html 是 php-fpm 中 php 文件的存儲路徑,經(jīng) Docker 目錄掛載,變成了宿主機的路徑
/root/docker/nginx/www
安裝Nginx
1. 拉取Nginx鏡像,此處以Nginx1.14.2為例
docker pull nginx:1.14.2
2. 啟動Nginx容器
- 如果不需要關(guān)聯(lián)PHP,執(zhí)行以下命令即可
docker run -d -p 80:80 --name nginx \
-v /root/docker/nginx/www:/usr/share/nginx/html \
-v /root/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf nginx:1.14.2
- 如果需要關(guān)聯(lián)PHP,執(zhí)行以下命令即可
docker run -d -p 80:80 --name nginx \
-v /root/docker/nginx/www:/usr/share/nginx/html \
-v /root/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /root/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
--link php-fpm:php nginx:1.14.2
- --link php-fpm:php 把 php-fpm 的網(wǎng)絡(luò)并入 nginx,Docker會自動修改 nginx 的 /etc/hosts,把域名 php 映射成 127.0.0.1,讓 nginx 通過 php:9000 訪問 php-fpm。
3. 最后的配置
將nginx.conf配置文件放入/root/docker/nginx/conf目錄下,在/root/docker/nginx/www目錄下放入想要訪問的文件即可。例如放入兩個文件index.html和index.php,在index.html中輸入任意內(nèi)容,在index.php中輸入以下內(nèi)容:
<?php
echo phpinfo();
?>
最后就可以直接通過相應(yīng)的路徑進行訪問。