前言
几年前,每次安装开发环境,都得下载、安装mysql、nginx、redis,安装复杂,配置也得从新根据新的机器从新修改,数据迁移也很麻烦,好不容易搞好了,还可能有各种不兼容。卸载也很麻烦,各种配置文件找不到,生成的各种冗余文件。一直在想是否有可以有一个随时迁移的开发环境,直到遇见docker,我尽量把所有的开发环境和中间件都安装到docker中,迁移时,只要把挂载目录迁移即可。随时启动和关闭,不用考虑为什么又突然多了个nginx,哪里来的mysql这种问题,始终保持宿主机的干净。这种方式一直用的很爽,这次特地分享下,我的安装过程和遇到一些问题。
备注
以下所有教程基于mac os
docker 安装
首先安装docker,docker是我们开发环境的基础,网上也有很多教程,这里直接上安装步骤。
我这里是使用的Homebrew进行安装的,Homebrew 的Cask 很方便,很多软件都可以直接进行安装。
brew cask install docker
安装成功后,docker栏上会出现小鲸鱼,那就是docker for mac的图标。我这里没有做任何修改,墙的问题需要自行解决,我这里不存在墙的问题,所以也不考虑墙。
docker-compose安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
docker目录
后续所有内容都会放到docker目录下
mkdir -p ~/docker/mysql
mkdir -p ~/docker/mongo
mkdir -p ~/docker/redis
mkdir -p ~/docker/nginx/conf
mkdir -p ~/docker/nginx/log
mkdir -p ~/docker/nginx/www
docker 网络创建
后续所有docker都会根据common网络下
docker network create --subnet 172.21.0.0/16 common
中间件 docker-compose.yml 配置
version: "3"
services:
mysql:
container_name: mysql
image: mysql:5.7
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456 # 定义mysql root密码
volumes:
- ~/docker/mysql:/var/lib/mysql
ports:
- "3306:3306"
networks:
default:
ipv4_address: 172.21.0.10
redis:
container_name: redis
restart: always
image: redis
volumes:
- ~/docker/redis:/data
ports:
- "6379:6379"
command: redis-server --appendonly yes
networks:
default:
ipv4_address: 172.21.0.11
nginx:
container_name: nginx
image: nginx:1.11.6-alpine
ports:
- 80:80
- 443:443
volumes:
- ~/docker/nginx/conf.d:/etc/nginx/conf.d
- ~/docker/nginx/log:/var/log/nginx
- ~/docker/nginx/www:/var/www
networks:
default:
ipv4_address: 172.21.0.12
mongo:
container_name: mongo
image: mongo
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=123456
ports:
- "27017:27017"
volumes:
- "~/docker/mongo:/data/db"
command: mongod
networks:
default:
ipv4_address: 172.21.0.13
networks:
default:
external:
name: common
启动
在docker-compose.yml所在目录执行
docker-compose up -d
坑
- 我在docker for mac中设置镜像加速,每次都没什么用,建议直接去/etc/docker/daemon.json 修改配置文件
- docker for mac 偶尔会崩溃导致所有下载的镜像都没了,需要从新下载,关键你不知道你有哪些镜像,所以建议备份下载的镜像
# 保存镜像文件
docker save -o 镜像名称_版本.tar 镜像名称:版本
# 加载镜像文件
docker load -i 镜像名称_版本.tar
- 在mac for docker中访问宿主机ip使用host.docker.internal,下面是nginx的一个案例
server {
listen 80;
server_name git.liuyt.com;
location / {
proxy_pass http://host.docker.internal:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
}
}