docker的大名相信大家已经耳熟能详, 这个已经风靡了2年+的神器,今天我们也来把玩下.
这里必须贴下docker的标志性logo,虽然有过几次变迁,但集装箱没变,这艘鲸鱼般的大船也没变,装(build)-载(ship)-运(run)的核心必须没变。
这里必须澄清下这艘只装载集装箱的大船,其实排水量并不大,这里的意思是要表明它比vm优越的多的地方:是它占用资源小或者说性能开销小,资源利用率高(这些已经有很多测评了),启动速度快(1s+)。
好了,不说废话了,直接来干货。这里的集装箱就是容器container,docker能装载各种容器,只要你能做成模板塞进集装箱里(我们称之为镜像image)。
这里我只且把玩几条命令来衬托docker的强大:
需求:部署运行mysql的spring-boot-app应用,并用nginx代理。
部署mysql 并创建数据库:
docker pull daocloud.io/library/mysql:5.7.15 (拉取并获得镜像)
docker run -d--
name mysql -v /home/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -daocloud.io/library/mysql:5.7.15(启动容器并使用外置数据文件)
docker exec -it mysql /bin/sh (进入到容器内并开启命令行)
/>mysql -uroot -p (连接mysql)
/>create databases spring-boot-test;
/>exit部署spring-boot-app (这里我已经把部署包打包并制作成镜像了):
docker pull jawfneo/spring-boot-docker
docker run -d--
name spring-boot-app -p 8080:8080--
link=mysql:db-container spring-boot-app (link链接mysql容器以以db-contianer的别名获得ip地址访问,在app里面有配置mysql的db引用)部署配置nginx (这里配置有些多,当然也可以放入到镜像文件制作成可重用镜像):
docker pull daocloud.io/library/nginx:mainline
docker run -d--
name nginx -p 80:80 -v /home/application/nginx/nginx.conf:/etc/nginx/nginx.conf--
link=spring-boot-app:app-container daocloud.io/library/nginx:mainline (启动容器并使用外置配置)
docker cp nginx:/etc/nginx/nginx.conf ./nginx.conf (从容器内拷贝配置文件到宿主机器外)
修改外置nginx.conf:
注释掉include /etc/nginx/conf.d/*.conf;
增加下面内容
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
proxy_pass http://app-container:8080;
}
}
重启容器
docker restart nginx
docker ps 查看下状态
CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES |
---|---|---|---|---|---|---|
58e68b16f8fa | spring-boot-app | “/app/entrypoint.sh” | 6 minutes ago | Up 25 seconds | 0.0.0.0:8080->8080/tcp | spring-boot-app |
7089203db7c9 | daocloud.io/library/mysql:5.7.15 | “docker-entrypoint.sh” | 4 hours ago | Up 4 hours 3306/tcp | mysql | |
7d101179012e | daocloud.io/library/nginx:mainline | “nginx -g ‘daemon off” | 24 hours ago | Up 4 hours | 0.0.0.0:80->80/tcp, 443/tcp | nginx |
剩下的就是以80端口去访问我们的app了:)
#