centos7上用docker搭建簡單的前後端分離項目

1. 安裝docker

Docker 要求 CentOS 系統的內核版本高於 3.10 ,首先驗證你的CentOS 版本是否支援 Docker 。
通過 uname -r 命令查看你當前的內核版本
  1. 使用 yum 安裝docker

    yum -y install docker

  1. 啟動 Docker 服務

    systemctl start docker

  1. 設置開啟啟動

    systemctl enable docker

    4. 驗證是否安裝成功

    docker version

2. docker常用命令

  1. 啟動已停止運行的容器:docker start ID
  2. 停止容器:docker stop <容器 ID>
  3. 重啟容器:docker restart ID
  4. 刪除容器:docker rm -f <容器 ID>
  5. 進入容器:docker exec -it 應用名 bash
  6. 查看運行的容器狀態:docker ps
  7. 查看所有容器狀態(包括未運行的):docker ps -a
  8. docker cp e0d9c2a11847:/var/lib/mysql /usr/local/ 將docker裡面的文件複製出來
  9. 在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
    (啟動的時候要指定容器時間和宿主時間一致,並掛載日誌的路徑)

Tags: