centos7上用docker搭建簡單的前後端分離項目
1. 安裝docker
Docker 要求 CentOS 系統的內核版本高於 3.10 ,首先驗證你的CentOS 版本是否支援 Docker 。
通過 uname -r 命令查看你當前的內核版本
-
使用 yum 安裝docker
yum -y install docker
- 啟動 Docker 服務
systemctl start docker
- 設置開啟啟動
systemctl enable docker
4. 驗證是否安裝成功
docker version
2. docker常用命令
- 啟動已停止運行的容器:docker start ID
- 停止容器:docker stop <容器 ID>
- 重啟容器:docker restart ID
- 刪除容器:docker rm -f <容器 ID>
- 進入容器:docker exec -it 應用名 bash
- 查看運行的容器狀態:docker ps
- 查看所有容器狀態(包括未運行的):docker ps -a
- docker cp e0d9c2a11847:/var/lib/mysql /usr/local/ 將docker裡面的文件複製出來
- 在docker中安裝vim
apt-get update
apt-get install vim
(說明:命令中的ID都可以用容器名稱NAMES代替)
3. 安裝mysql5.7並進行文件掛載
1. 拉取mysql鏡像
docker pull mysql:5.7
2. 啟動測試mysql,複製配置文件到宿主機(先啟動測試mysql,目的是為了將配置文件複製出來)
docker run –name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
配置文件必須要宿主已經存在,才能正常啟動,所以創建文件夾,然後複製配置文件出來
mkdir -p /opt/docker/mysql/conf
docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf /opt/docker/mysql/conf
(注意:mysql5.7的默認配置文件不是/etc/my.cnf也不是/etc/mysql/my.cnf,而是/etc/mysql/mysql.conf.d/mysqld.cnf)
3. 刪除測試mysql,重新啟動mysql,並掛載配置文件和data
刪除測試mysql
docker rm -f mysql
重新啟動mysql
docker run -d -p 3306:3306 –privileged=true –restart always -v /opt/docker/mysql/conf/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /opt/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 –name mysql mysql:5.7 –character-set-server=utf8mb4 –collation-server=utf8mb4_general_ci
參數說明:
run:運行一個容器
-d:表示後台運行
-p:表示容器內部埠和伺服器埠映射關聯
–privileged=true:設值MySQL 的root用戶許可權, 否則外部不能使用root用戶登陸
–restart always:設置開機啟動
-v /opt/docker/mysql/conf/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf:將宿主機中的mysqld.cnf配置映射到docker中的/etc/mysql/mysql.conf.d/mysqld.cnf
-v /opt/docker/mysql/data:/var/lib/mysql:同上,映射資料庫的數據目錄, 避免以後docker刪除重新運行MySQL容器時數據丟失
-e MYSQL_ROOT_PASSWORD=123456:設置MySQL資料庫root用戶的密碼
–name mysql:設值容器名稱為mysql
mysql:5.7:表示從docker鏡像mysql:5.7中啟動一個容器
–character-set-server=utf8mb4 –collation-server=utf8mb4_general_ci:設值資料庫默認編碼和默認排序規則
4. 安裝redis並進行文件掛載
1. 拉取redis鏡像
docker pull redis
2. 在宿主機中創建redis.conf配置文件
創建配置文件路徑
mkdir -p /opt/docker/redis/conf
將配置文件放到該目錄下,配置文件根據自己的版本,自行到官網下載。如何查看自己的redis版本:進入redis容器,執行redis-server -v即可。
附上官網配置文件地址://redis.io/topics/config
3. 啟動redis
docker run -d –privileged=true -p 6379:6379 –restart always -v /opt/docker/redis/conf/redis.conf:/etc/redis/redis.conf -v /opt/docker/redis/data:/data –name redis redis redis-server /etc/redis/redis.conf –appendonly yes –requirepass “123456”
-d:以守護進程的方式啟動容器
-p:綁定宿主機埠
–name myredis: 指定容器名稱
–restart always:開機啟動
–privileged=true:提升容器內許可權
-v /opt/docker/redis/conf/redis.conf:/etc/redis/redis.conf:映射配置文件
-v /opt/docker/redis/data:/data:映射數據目錄
redis-server /etc/redis/redis.conf:在容器里執行redis-server命令,以掛載的配置文件啟動
–appendonly yes:打開redis持久化
–requirepass:密碼
4. 開啟遠程連接
此時我們的redis雖然啟動成功了,但是遠程還無法連接。此時將/opt/docker/redis/conf/redis.conf文件中的bind 127.0.0.1注釋掉。
正好驗證下掛載的配置文件是否生效。然後重啟redis,重啟之後,如果能夠進行遠程連接,則說明大功告成。
5.安裝nginx並進行文件掛載
1. 拉取nginx鏡像
docker pull nginx:latest
2. 啟動測試nginx容器
docker run –name nginx -p 80:80 -d nginx
直接在瀏覽器輸入宿主機的ip,出現如下介面,則說明啟動成功
3. 複製配置文件到宿主機
先創建文件夾
mkdir -p /opt/docker/nginx/{conf,conf.d,html,log}
然後複製對應的配置文件到宿主機
docker cp nginx:/etc/nginx/nginx.conf /opt/docker/nginx/conf
docker cp nginx:/etc/nginx/conf.d/default.conf /opt/docker/nginx/conf.d
docker cp nginx:/usr/share/nginx/html /opt/docker/nginx
4. 啟動nginx
先刪除測試的nginx容器
docker rm -f mysql
重新啟動nginx
docker run –name nginx -p 80:80 -v /opt/docker/nginx/html:/usr/share/nginx/html -v /opt/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /opt/docker/nginx/log:/var/log/nginx -v /opt/docker/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -d nginx
5. 部署項目
將打包好的前端項目放到/opt/docker/nginx/html,重啟nginx即可。nginx配置文件具體細節這裡就不講了。
最後啟動springboot項目(注意別忘記安裝jdk),我是直接在宿主機啟動的,如果想放到docker中,參考這篇文章//www.jianshu.com/p/397929dbc27d
docker run -d -p 8080:8080 -e TZ=”Asia/Shanghai” -v /etc/localtime:/etc/localtime:ro -v /opt/app/logs:/home/app/logs springboot
(啟動的時候要指定容器時間和宿主時間一致,並掛載日誌的路徑)