由於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了。