1. 程式人生 > 遊戲攻略 >《原神攻略》海島風格塵歌壺搭建思路

《原神攻略》海島風格塵歌壺搭建思路

1、應用部署

# 在容器內部署mysql
# -e表示環境變數

docker run -di --name=mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
# 官方提供的
docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
        
# 在容器內部署redis
docker run -di -p 6377:6379 redis:latest
        
# 在容器內部署nginx docker run -di --name=mynginx -p 8080:80 nginx

2、部署應用對映外部目錄

# 部署redis,把配置檔案和資料目錄映射出來
# 操作步驟
    -1 mkdir /reids /redis/conf /redis/data
    -2 vim /redis/conf/redis.conf
        # 配置檔案
        bind 0.0.0.0
        daemonize NO
        protected-mode no
        requirepass 123456
    -3 建立並執行容器
    docker run 
-p 6378:6379 --name redis_6379 -v /redis/conf/redis.conf:/etc/redis/redis.conf -v /redis/data:/data -di redis redis-server /etc/redis/redis.conf -4 本地window機器上遠端連線到了docker裡的redis -5 cmd視窗下 redis-cli -h 101.133.225.166 -p 6378 -6 認證 auth 123456 -7 寫入資料 set name lqz -8 儲存資料 save或者是bgsave
-9 在宿主機的/redis/data路徑下就能看到一個檔案 -10 不管多少次重啟redis容器,資料都還在 -11 原來的redis容器沒了,按照第三步再啟動一遍,資料都還在

3、遷移與備份

3.0 其他操作

# 刪除所有容器()
docker rm `docker ps -a -q`
# 刪除所有映象
docker rmi `docker images -q`

# 通過自己構建的image啟動容器
docker run -id --name=mydjango -p 8088:8088  mydjango python /project/django_test/manage.py runserver 0.0.0.0:8088
               
# 檢視容器執行日誌
docker logs 容器id


# 操作步驟
    1 啟動一個python容器
        docker run -di --name=lqz python:3.6
    2 進入裝軟體
        docker exec -it lqz /bin/bash
        mkdir /project
        pip install django==1.11.1 
        退出
    3 把專案拷貝到容器內部
        docker cp /opt/lqz/django_test lqz:/project
            
    4 把容器做成映象
        docker commit lqz mydjango
    5 基於自己做的映象執行容器
    docker run -id --name=mydjango -p 8088:8088  mydjango python /project/django_test/manage.py runserver 0.0.0.0:8088

3.1 容器儲存為映象

docker commit 容器名字 映象名字
docker commit 19b mydjango
pip install django==1.11.11 -i https://pypi.douban.com/simple/

3.2 把映象打包成壓縮包

docker save -o mydjango.tar mydjango

3.3 把壓縮包恢復為映象

docker load -i mydjango.tar

4、dockerfile

1 dockerfile是什麼
    一個檔案,裡面一堆指令,通過這個檔案可以生成映象
2 dockerfile指令
    命令                      作用
    FROM image_name:tag    定義了使用哪個基礎映象啟動構建流程
    MAINTAINER user_name    宣告映象的建立者
    ENV key value    設定環境變數 (可以寫多條)
    RUN command    是Dockerfile的核心部分(可以寫多條)
    ADD source_dir/file dest_dir/file    將宿主機的檔案複製到容器內,如果是一個壓縮檔案,將會在複製後自動解壓
    COPY source_dir/file dest_dir/file    和ADD相似,但是如果有壓縮檔案並不能解壓
    WORKDIR path_dir    設定工作目錄
    
    
3 寫一個dockerfile(檔名字必須交dockerfile)
vim dockerfile
    FROM python:3.6
    MAINTAINER lqz
    EXPOSE 8080
    ADD ./requirement.txt /home/
    RUN pip install -r /home/requirement.txt -i https://pypi.douban.com/simple/ 
    RUN pip install uwsgi -i https://pypi.douban.com/simple/
    VOLUME ["/home"]
    WORKDIR /home/django_test
    # CMD ["uwsgi", "--ini", "/home/django_test/uwsgi.ini"] 
    CMD ["python","home/django_test/manage.py","runserver","0.0.0.0:8080"]
4 通過dockerfile構建出映象
    docker build -t='django_1.11.11' .
5 檢視映象
    docker images 
    
6 啟動容器
docker run -di --name=mydjango2 -v /opt/lqz/:/home -p 8080:8080 django_1.11.11

7 在外部訪問即可

8 配置nginx轉發
# 建立檔案件
mkdir -p /opt/nginx/conf /opt/nginx/html /opt/nginx/logs
# 新建配置檔案
vim nginx/conf/nginx.conf
# 寫入
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream node    {
        server    101.133.225.166:8080;
        server    101.133.225.166:8081;
        server    101.133.225.166:8082;
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
          #proxy_pass http://101.133.225.166:8080;
          #負載均衡配置
          proxy_pass http://node;
        }  
    }
}

# docker 中執行nginx
docker run --name nginx -id -p 8888:80 -v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /opt/nginx/html:/etc/nginx/html -v /opt/nginx/logs:/var/log/nginx nginx
                
9 配置負載均衡
# 修改nginx配置檔案
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream node    {
        server    101.133.225.166:8080;
        server    101.133.225.166:8081;
        server    101.133.225.166:8082;
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
          #proxy_pass http://101.133.225.166:8080;
          #負載均衡配置
          proxy_pass http://node;
        }  
    }
}
# 多啟動幾個docker容器
docker run -di --name=mydjango3 -v /opt/lqz/django_test2/:/home/django_test/ -p 8081:8080 django_1.11.11
docker run -di --name=mydjango3 -v /opt/lqz/django_test2/:/home/django_test/ -p 8082:8080 django_1.11.11
        
# 重啟nginx
# 假設8081的容器掛了,8080的容器掛了,正常提供服務,
# 再把docker容器啟動起來即可

5、私有倉庫

1 把自己的映象傳到docker hub上
    -docker login  輸入使用者名稱密碼
                                        映象ID       使用者名稱        映象name    版本
    -給你要上傳的image打個標籤docker tag 5452fa6715c0 liuqingzheng/django1.11.9:v1
    -docker images
    -docker push liuqingzheng/django1.11.9:v1

步驟

1 拉取私有倉庫映象
    docker pull registry
2 啟動容器
    docker run -di --name=registry -p 5000:5000 registry
3 開啟瀏覽器 輸入地址http://101.133.225.166:5000/v2/_catalog看到{"repositories":[]} 表示私有倉庫搭建成功並且內容為空
4 配置
    修改daemon.json
    vi /etc/docker/daemon.json
    新增以下內容,儲存退出。
    {"insecure-registries":["101.133.225.166:5000"]} 
    此步用於讓 docker信任私有倉庫地址
5 重啟docker 服務
    systemctl restart docker
6 重啟容器
    docker start registry
7 打標籤
    docker tag 5452fa6715c0 101.133.225.166:5000/django1.11.11
8 上傳到私有倉庫
docker push 101.133.225.166:5000/django1.11.11
    
9 從私有倉庫拉取映象
docker pull 101.133.225.166:5000/django1.11.11

6、docker-compose

1 docker-compose是一個單機情況下容器編排的工具
2 通過yml檔案定義多個容器
3 預設名字docker-compose.yml
4 三個概念,Service  Networks ,Volumes
    一個service代表一個container,這個container可以從docker hub的image來建立,或者從本地dockerfile build的image來建立
5 version:有1,2,3版本,目前都用"3"


6 安裝
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

7 驗證安裝成功
    docker-compose -v

6.1部署多應用

# 部署flask redis
1 建立Dockerfile
vim Dockerfile
FROM python:3.6
COPY . /app
WORKDIR /app
RUN pip install flask redis
EXPOSE 5000
CMD [ "python", "app.py" ]

2 建立docker-compose檔案
vim docker-compose.yml
version: "3"
services:
  redis:
    image: redis
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 8080:5000
    environment:
      REDIS_HOST: redis
3 建立app.py
vim app.py
from flask import Flask
from redis import Redis
import os
import socket
app = Flask(__name__)
redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)
@app.route('/')
def hello():
    redis.incr('hits')
    return '你好! 檢視 %s 次, hostname 是 %s.\n' % (redis.get('hits'),socket.gethostname())
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=True)
4 啟動--執行
docker-compose up
docker-compose.yml 如何寫
version: '3'
services:
  wordpress:
    image: wordpress
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_PASSWORD: root
    volumes:
      - mysql-data:/var/lib/mysql
  

7、多個容器直接通訊方式

1 埠對映到宿主機,直接訪問宿主機
2 通過ip地址訪問
3 run的時候指定 --link 容器 
docker run -di --name=centos1 centos:centos7
docker run -di --name=centos2 --link centos1 centos:centos7
    
進入到centos2中 ping centos1 可以ping同


# 跨主機的容器通訊
    -埠對映