Docker-compose

由於apt官方庫裏的docker版本可能比較舊,所以先卸載可能存在的舊版本:
$ sudo apt-get remove docker docker-engine docker-ce docker.io

更新apt包索引:
$ sudo apt-get update

安裝以下包以使apt可以通過HTTPS使用存儲庫(repository):
$ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

添加Docker官方的GPG密鑰:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

使用下面的命令來設置stable存儲庫:
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

再更新一下apt包索引:
$ sudo apt-get update


在生產系統上,可能會需要應該安裝一個特定版本的Docker CE,而不是總是使用最新版本:
列出可用的版本:
$ apt-cache madison docker-ce
選擇要安裝的特定版本,第二列是版本字符串,第三列是存儲庫名稱,它指示包來自哪個存儲庫,以及擴展它的穩定性級別。要安裝一個特定的版本,將版本字符串附加到包名中,並通過等號(=)分隔它們

安裝最新版本的Docker CE:
$ sudo apt-get install -y docker-ce=<VERSION>
$ sudo apt-get install -y docker-ce=18.06.3~ce~3-0~ubuntu

驗證docker
查看docker服務是否啓動:
$ systemctl status docker
若未啓動,則啓動docker服務:
$ sudo systemctl start docker
經典的hello world:
$ sudo docker run hello-world
列出所有鏡像 
$ docker images

Docker推薦的理念是,一個容器運行一個服務進程,docker-compose是Docker提供的用於管理多個Docekr容器的工具
1.下載docker-compose命令文件
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2.爲docker-compose命令文件賦予可執行權限
$ sudo chmod +x /usr/local/bin/docker-compose
3.測試安裝是否正確
docker-compose  --version

準備Nginx配置文件
從鏡像當中複製一個默認的再根據自己的需要修改
docker run --name tmp-nginx-container -d nginx
docker cp tmp-nginx-container:/etc/nginx/nginx.conf /home
準備Mysql配置文件
docker run --name tmp-mysql-container -d mysql:5.7.24
sudo docker cp tmp-mysql-container:/etc/mysql/my.cnf ./mysql/conf/my.conf
sudo docker rm -f tmp-mysql-container

規劃目錄

.
├── docker-compose.yml
├── log
│   ├── gunicorn.log
│   └── nginx
│       ├── access.log
│       └── error.log
├── mysql_master
│   ├── data
│   └── my.cnf
├── mysql_slave
│   ├── data
│   └── my.cnf
├── nginx
│   ├── conf
│   │   └── nginx.conf
│   └── logs
├── Pinshop
│   ├── app.py
│   ├── Apps
│   │   ├── __init__.py
│   │   ├── Product
│   │   │   ├── __init__.py
│   │   │   ├── model.py
│   │   │   ├── __pycache__
│   │   │   │   ├── __init__.cpython-36.pyc
│   │   │   │   └── model.cpython-36.pyc
│   │   │   └── views
│   │   │       ├── __pycache__
│   │   │       │   └── test.cpython-36.pyc
│   │   │       └── test.py
│   │   └── __pycache__
│   │       └── __init__.cpython-36.pyc
│   ├── config.py
│   ├── Dockerfile
│   ├── guni_conf.py
│   ├── manage.py


yml文件修改

version: '3'
services:
  mysql-master:
    image: mysql:5.7.24
    ports:
     - "3306:3306"
    volumes:
      - "./mysql_master/data:/var/lib/mysql"
      - "./mysql_master/my.cnf:/etc/mysql/my.cnf"
      - "./log:/var/log"
    environment:
      - MYSQL_ROOT_PASSWORD=1
    networks:
      app_net:
        ipv4_address: 10.10.10.1
    container_name: "compose-mysql-master"
  mysql-slave:
    image: mysql:5.7.24
    ports:
     - "3307:3307"
    volumes:
      - "./mysql_slave/data:/var/lib/mysql"
      - "./mysql_slave/my.cnf:/etc/mysql/my.cnf"
      - "./log:/var/log"
    environment:
      - MYSQL_ROOT_PASSWORD=1
    networks:
      app_net:
        ipv4_address: 10.10.10.2
    container_name: "compose-mysql-slave"
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
#    depends_on:
#      - "flask"
    volumes:
      - "./nginx/conf/nginx.conf:/etc/nginx/nginx.conf"
      - "./log:/var/log"
    networks:
      - app_net
    container_name: "compose-nginx"
  flask:
    build: ./Pinshop
    image: pin-flask
    ports:
      - "8000:8000"
#    depends_on:
#      - mysql-master
#      - mysql-slave
    volumes:
      - "./Pinshop:/code"
      - "./log:/var/log"
    networks:
      - app_net
    container_name: "compose-flask"

networks:
  app_net:
    driver: bridge
    ipam:
      config:
      - subnet: 10.10.0.0/16


vim /etc/hosts修改增加虛擬主機
在目錄下輸入
docker-compose up -d  每個app build再run
docker-compose up -d nginx  單獨啓動一個service,可以是文件中新增的
docker-compose logs nginx  查看服務啓動失敗的日誌
docker-compose ps 列出當前運行的服務狀態和相關信息
docker-compose down 關閉所有容器並刪除,保留默認數據
docker exec -it  compose-flask /bin/bash  進入容器exit退出
docker-compose build flask;先stop,再重建
坑點:
只能用相對路徑,絕對路徑在COPY時候不生效


#可能有用的資料
但是每次有語法錯誤,容器會報錯退出。修改完,還得在控制檯按“↑”和“enter”重新執行一次docker-compose up。
這是flask的原因:flask自帶的reload只能在語法沒毛病的情況下,如果有錯就會報錯退出,因爲容器執行的是python3 main.py,這個退了,容器就會stop。
爲了解決這個問題,可以用flask-failsafe插件。然後就完美啦。語法錯誤也會reload了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章