如何用docker部署一個開源的項目

目標:使用Docker部署商城(Mysql + Redis + Java後端 + Vue前端)html

如下部署以開源商城 mall4j 爲例子,連接見:前端

實驗環境:Linux Centos7linux

0: 系統準備

準備一個乾淨的系統(避免被其餘因素影響),系統使用如下ISO(自行安裝,安裝過程略):
http://mirrors.163.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.isonginx

1:安裝Docker

參考資料:https://docs.docker.com/engine/install/centos/

卸載舊版本殘留git

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

安裝dockergithub

sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io

啓動docker服務redis

sudo systemctl start docker

設置docker開機自啓動spring

sudo systemctl enable docker

2: 鏡像加速

(這一步選作)由於默認鏡像倉庫在國外,速度較慢,咱們能夠使用阿里雲的鏡像加速服務:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

咱們能夠輸入docker info查看是否成功修改默認鏡像地址:

sudo docker info

3:上傳文件到服務器

mysql:

本地編輯好mysql配置文件

data文件夾是數據持久化(一開始沒數據,容器運行後纔會產生數據,因此是空文件夾),my.cnf是配置文件,initdb文件夾是初始化數據
my.cnf內容以下:

[client]
default-character-set = utf8mb4
[mysql]
# 設置mysql客戶端默認字符集
default-character-set = utf8mb4
[mysqld]
# 設置3306端口
port = 3306
# 服務端使用的字符集默認爲latin1
character-set-server = utf8mb4
# 建立新表時將使用的默認存儲引擎
default-storage-engine = INNODB
# 讓MySQL不區分大小寫
lower_case_table_names=1

java後端

java的admin的dockerfile文件內容以下:

FROM anapsix/alpine-java:8_server-jre_unlimited

RUN mkdir -p /opt/projects/yami-shops

WORKDIR /opt/projects/yami-shops

COPY ./yami-shop-admin-0.0.1-SNAPSHOT.jar ./

EXPOSE 8111

CMD java -jar -Xms1024m -Xmx1024m -Xss256k -XX:SurvivorRatio=8 -Dspring.profiles.active=docker,quartz yami-shop-admin-0.0.1-SNAPSHOT.jar

java的api的dockerfile文件內容以下:

FROM anapsix/alpine-java:8_server-jre_unlimited

RUN mkdir -p /opt/projects/yami-shops

WORKDIR /opt/projects/yami-shops

COPY ./yami-shop-api-0.0.1-SNAPSHOT.jar ./

EXPOSE 8086

CMD java -jar -Xms1024m -Xmx1024m -Xss256k -XX:SurvivorRatio=8 -Dspring.profiles.active=docker yami-shop-api-0.0.1-SNAPSHOT.jar

nginx

配置文件內容以下:

server {
    listen 80;
    server_name 192.168.1.26;

    location / {
        root /usr/share/nginx/html/mall4j-admin;
    }

    location /apis {
        rewrite ^/apis/(.*)$ /$1 break;
        proxy_pass http://mall4j-admin:8111;
    }

    error_page 404 /404.html;
        location = /404-light.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

使用winscp上傳到服務器

4:建立並啓動容器

先建立一個自定義的docker網絡(用於容器之間互通):

docker network create mall4j-network

建立並運行mysql容器

docker run --name mall4j-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --restart=always -v /root/mall4j/mysql/my.cnf:/etc/mysql/my.cnf -v /root/mall4j/mysql/initdb:/docker-entrypoint-initdb.d -v /root/mall4j/mysql/data:/var/lib/mysql --network mall4j-network -d mysql:5.7.33

解釋一下如下參數:
--name mall4j-mysql 指定容器名稱
-p 映射容器端口到宿主機端口
-e 環境變量
MYSQL_ROOT_PASSWORD=root 設置默認密碼爲root
--restart=always 重啓docker時自動啓動容器
-v 掛載宿主機目錄或文件
--network mall4j-network 鏈接到指定的自定義網絡
-d 容器保持後臺運行

建立並運行redis容器

docker run --name mall4j-redis -p 6379:6379 --restart=always --network mall4j-network -d redis:5.0.10

進入admin文件夾

cd /root/mall4j/yami-shop-admin

構建鏡像(不要漏了最後的小數點)

docker build -t yami-shop-admin:0.0.1 .

建立並運行java容器(使用-e環境變量來指定數據庫url等參數)

docker run --name mall4j-admin -e TZ=Asia/Shanghai -e MYSQL_HOST=mall4j-mysql -e MYSQL_PORT=3306 -e MYSQL_DATABASE=yami_shops -e MYSQL_USERNAME=root -e MYSQL_PASSWORD=root -e REDIS_HOST=mall4j-redis -e REDIS_PORT=6379 -e REDIS_DATABASE=0 -e REDIS_PASSWORD= -p 8111:8111 -v /root/mall4j/yami-shop-admin/log:/opt/projects/mall4j/log --restart=always --network mall4j-network -d yami-shop-admin:0.0.1

進入api文件夾

cd /root/mall4j/yami-shop-api

構建鏡像(不要漏了最後的小數點)

docker build -t yami-shop-api:0.0.1 .

建立並運行java容器(使用-e環境變量來指定數據庫url等參數)

docker run --name mall4j-api -e TZ=Asia/Shanghai -e MYSQL_HOST=mall4j-mysql -e MYSQL_PORT=3306 -e MYSQL_DATABASE=yami_shops -e MYSQL_USERNAME=root -e MYSQL_PASSWORD=root -e REDIS_HOST=mall4j-redis -e REDIS_PORT=6379 -e REDIS_DATABASE=0 -e REDIS_PASSWORD= -p 8086:8086 -v /root/mall4j/yami-shop-api/log:/opt/projects/mall4j/log --restart=always --network mall4j-network -d yami-shop-api:0.0.1

建立並運行nginx容器

docker run --name mall4j-nginx -p 80:80 -v /root/mall4j/nginx/conf.d:/etc/nginx/conf.d -v /root/mall4j/nginx//html:/usr/share/nginx/html --restart=always --network mall4j-network -d nginx:1.18.0

5:訪問網站

由於驗證碼是從java後端獲取的,若是打開頁面能獲取驗證碼,說明實驗成功,默認帳號密碼admin 123456

相關文章
相關標籤/搜索