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