目錄
- 一、docker一些基礎命令
- 二、docker部署(使用docker-compose)
- 2.1 安裝docker(服務器:CentOS 7或更高版本)
- 2.2 安裝docker-compose
- 2.3 構建鏡像供docker-compose使用
- 2.4執行一次docker-compose up
- 2.5docker容器內通信
- 2.6 錯誤解決
- 2.6.1 網卡網段重復問題
- 2.6.2 docker啟動成功,但是無法遠程連接
- 2.6.3 Failed opening the RDB file dump.rdb (in server root dir /redis/data)
- 2.7大功告成
- 總結
此文章需要有一定的docker知識基礎上,進行docker線上部署。
一、docker一些基礎命令
docker build -t ubuntu:15.10 . -t表示 tag .表示當前文件dockerfile docker build -t ruoyi/ruoyi-server:4.1.0 . docker images 查看鏡像 docker ps 或者 docker container ls 顯示正在運行的容器 docker run ubuntu /bin/echo "Hello world" 注意: /bin/echo "Hello world" 表示執行的命令 docker run -i -t ubuntu:15.10 /bin/bash -t: 在新容器內指定一個偽終端或終端。 -i: 允許你對容器內的標準輸入 (STDIN) 進行交互。 docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" 啟動容器(后臺模式) docker logs 2b1b7a428627 在宿主主機內使用 docker logs 命令,查看容器內的標準輸出: docker stop 2b1b7a428627 docker start 2b1b7a428627 使用 docker start 啟動一個已停止的容器 docker ps -a 查看所有的容器命令 docker run -itd --name ubuntu-test ubuntu /bin/bash docker的服務是在后臺運行的,我們可以過 -d 指定容器的運行模式 docker attach 想要進入容器,可以通過以下指令進入,注意: 如果從這個容器退出,會導致容器的停止 docker exec -it 243c32535da7 /bin/bash 如果從這個容器退出,容器不會停止 docker rm -f 1e560fca3906 刪除容器 docker pull training/webapp # 載入鏡像 docker run -d -P training/webapp python app.py -d:讓容器在后臺運行。 -P:將容器內部使用的網絡端口隨機映射到我們使用的主機上。 docker inspect test1 可以查看掛載點 docker stop $(docker ps -a -q) 1.停止所有的container,這樣才能夠刪除其中的images: docker rm $(docker ps -a -q) 如果想要刪除所有container的話再加一個指令: docker rmi $(docker images -q) 刪除所有鏡像
二、docker部署(使用docker-compose)
docker-compose.yml 文件內容
version: '3' services: mysql: image: mysql:8.0.27 container_name: mysql environment: # 時區上海 TZ: Asia/Shanghai # root 密碼 MYSQL_ROOT_PASSWORD: root # 初始化數據庫(后續的初始化sql會在這個庫執行) MYSQL_DATABASE: ry-vue ports: - "3306:3306" volumes: # 數據掛載 - /docker/mysql/data/:/var/lib/mysql/ # 配置掛載 - /docker/mysql/conf/:/etc/mysql/conf.d/ command: # 將mysql8.0默認密碼策略 修改為 原先 策略 (mysql8.0對其默認策略做了更改 會導致密碼無法匹配) --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --explicit_defaults_for_timestamp=true --lower_case_table_names=1 privileged: true restart: always networks: ruoyi_net: ipv4_address: 172.30.0.36 nginx-web: image: nginx:1.21.3 container_name: nginx-web environment: # 時區上海 TZ: Asia/Shanghai ports: - "80:80" - "443:443" volumes: # 證書映射 - /docker/nginx/cert:/etc/nginx/cert # 配置文件映射 - /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf # 頁面目錄 - /docker/nginx/html:/usr/share/nginx/html # 日志目錄 - /docker/nginx/log:/var/log/nginx privileged: true restart: always networks: - ruoyi_net redis: image: redis:6.2.6 container_name: redis ports: - "6379:6379" environment: # 時區上海 TZ: Asia/Shanghai volumes: # 配置文件 - /docker/redis/conf:/redis/config:rw # 數據文件 - /docker/redis/data/:/redis/data/:rw command: "redis-server /redis/config/redis.conf" privileged: true restart: always networks: ruoyi_net: ipv4_address: 172.30.0.48 minio: image: minio/minio:RELEASE.2021-10-27T16-29-42Z container_name: minio ports: # api 端口 - "9000:9000" # 控制臺端口 - "9001:9001" environment: # 時區上海 TZ: Asia/Shanghai # 管理后臺用戶名 MINIO_ACCESS_KEY: ruoyi # 管理后臺密碼,最小8個字符 MINIO_SECRET_KEY: ruoyi123 # https需要指定域名 MINIO_SERVER_URL: "" # 開啟壓縮 on 開啟 off 關閉 MINIO_COMPRESS: "off" # 擴展名 .pdf,.doc 為空 所有類型均壓縮 MINIO_COMPRESS_EXTENSIONS: "" # mime 類型 application/pdf 為空 所有類型均壓縮 MINIO_COMPRESS_MIME_TYPES: "" volumes: # 映射當前目錄下的data目錄至容器內/data目錄 - /docker/minio/data:/data # 映射配置目錄 - /docker/minio/config:/root/.minio/ command: server --address ':9000' --console-address ':9001' /data # 指定容器中的目錄 /data privileged: true restart: always networks: ruoyi_net: ipv4_address: 172.30.0.54 ruoyi-server1: image: ruoyi/ruoyi-server:4.1.0 container_name: ruoyi-server1 environment: # 時區上海 TZ: Asia/Shanghai volumes: # 配置文件 - /docker/server1/logs/:/ruoyi/server/logs/ privileged: true restart: always networks: ruoyi_net: ipv4_address: 172.30.0.60 ruoyi-server2: image: "ruoyi/ruoyi-server:4.1.0" container_name: ruoyi-server2 environment: # 時區上海 TZ: Asia/Shanghai volumes: # 配置文件 - /docker/server2/logs/:/ruoyi/server/logs/ privileged: true restart: always networks: ruoyi_net: ipv4_address: 172.30.0.61 ruoyi-monitor-admin: image: ruoyi/ruoyi-monitor-admin:4.1.0 container_name: ruoyi-monitor-admin environment: # 時區上海 TZ: Asia/Shanghai volumes: # 配置文件 - /docker/monitor/logs/:/ruoyi/monitor/logs privileged: true restart: always networks: ruoyi_net: ipv4_address: 172.30.0.90 ruoyi-xxl-job-admin: image: ruoyi/ruoyi-xxl-job-admin:4.1.0 container_name: ruoyi-xxl-job-admin environment: # 時區上海 TZ: Asia/Shanghai volumes: # 配置文件 - /docker/xxljob/logs/:/ruoyi/xxljob/logs privileged: true restart: always networks: ruoyi_net: ipv4_address: 172.30.0.92 networks: ruoyi_net: driver: bridge ipam: config: - subnet: 172.30.0.0/16
2.1 安裝docker(服務器:CentOS 7或更高版本)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
安裝成功后,運行 docker ps 出現如下報錯
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running
表示未啟動docker,運行下列語句即可
service docker start
2.2 安裝docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
安裝完成后,運行
docker-compose -v
賦予權限即可
chmod +x /usr/local/bin/docker-compose
2.3 構建鏡像供docker-compose使用
在服務器上單獨新建文件夾名為ruoyi-admin
dockerfile文件如下
# 基礎鏡像 FROM java:8 # author MAINTAINER kaixin EXPOSE 8080 # 掛載目錄 VOLUME /home/ruoyi # 創建目錄 RUN mkdir -p /home/ruoyi # 指定路徑 WORKDIR /home/ruoyi # 復制jar文件到路徑 COPY ruoyi-admin.jar /home/ruoyi/ruoyi-admin.jar # 啟動認證服務 ENTRYPOINT ["java","-jar","ruoyi-admin.jar"]
執行如下命令
cd /root/dockerbuild/ruoyi-admin/ docker build -t ruoyi/ruoyi-server:4.1.0 .
這就構建出本地的鏡像了。
依次再構建出ruoyi/ruoyi-xxl-job-admin和ruoyi/ruoyi-monitor-admin
2.4執行一次docker-compose up
cd到docker-compose.yml工作目錄下,執行一次docker-compose up,此時必定會報錯。報錯如下
意思是不存在,nginx的配置文件。
為什么要執行一次呢,因為這個時候,docker-compose.yml下掛在的文件,會自動幫你生成,省的你手動去創建了。
根據提示,將提前準備好的nginx.conf還有redis.conf 放到宿主機對應的掛載文件夾底下即可。
這里提示下:如果開啟了redis的aof模式,需要在redis的掛在文件下,手動創建appendonly.aof和dump.rdb
并且需要賦予權限
chmod 777 /docker/redis/data/appendonly.aof chmod 777 /docker/redis/data/dump.rdb
否則會報錯:
2.5docker容器內通信
修改項目中application-dev.yml的配置,將訪問的mysql、redis修改成,docker-compose.yml中配置的ip地址,然后重新打包,重新使用docker build構建鏡像。
注意:由于上面執行過一次的docker-compose up 這個時候對應的鏡像狀態處于stop,并未消失,如果重新構建鏡像,再執行docker-compose up,仍然使用的是上次構建成功的鏡像,所以需要刪除此次鏡像的進程。
#關閉所有模塊 docker-compose stop #刪除所有模塊 docker-compose rm #刪除Tag為空的鏡像 docker images|grep none|awk '{print $3}'|xargs docker rmi -f
2.6 錯誤解決
2.6.1 網卡網段重復問題
ERROR: Pool overlaps with other one on this address space
networks參數下手動指定了subnet地址,此地址發生了沖突
docker network ls # 查看docker網卡 docker network inspect <網卡id> # 查看具體信息,找到與subnet沖突的是哪個 docker network rm <網卡id> # 刪除沖突的網卡
再執行docker-compose up
2.6.2 docker啟動成功,但是無法遠程連接
需要開啟ipv4轉發功能
vi /etc/sysctl.conf net.ipv4.ip_forward=1 #添加這段代碼 systemctl restart network && systemctl restart docker #重啟network服務 sysctl net.ipv4.ip_forward #查看是否修改成功 (備注:返回1,就是成功)
2.6.3 Failed opening the RDB file dump.rdb (in server root dir /redis/data)
給文件夾賦予權限即可。
chmod 777 /docker/redis/data/
2.7大功告成