为什么要开始学习docker呢?主要是自己博客home页部署在同事的阿里云上,但是,目前他的服务器已经快到期,所以我要对我的主页迁移,但是想到重现搭建生产环境的不确定性,决定研究下docker,同时也方便以后博客主页的迁移,也没必要为生产环境的不确定性承担风险。
[toc]
一. docker安装
关于docker的大部分学习来源docker实践,安装方法参考此pdf文档, 也可参考在线文档。
二. docker web环境搭建
此生产环境的搭建是基于我的blog的,所需的软件java
,tomcat
,nginx
,mysql
等;另外软件的安装方法大概有两种,一是通过dockerfile去构建,二就是通过拉去dockerHub的官方镜像来构建,因为刚开始学习,所以主要通过拉去官方镜像来构建。
安装 MySQL
查找Docker Hub上的mysql镜像
$ docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 6349 [OK]
mariadb MariaDB is a community-developed fork of MyS… 1993 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 456 [OK]
percona Percona Server is a fork of the MySQL relati… 343 [OK]
zabbix/zabbix-server-mysql Zabbix Server with MySQL database support 101 [OK]
hypriot/rpi-mysql RPi-compatible Docker Image with Mysql 87
...
这里我们拉取官方的镜像,标签为5.7.22
docker pull mysql:5.7.22
等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为mysql,标签为5.7.22的镜像。
使用镜像
运行容器
MySQL(5.7.19)的默认配置文件是 /etc/mysql/my.cnf 文件。如果想要自定义配置,建议向 /etc/mysql/conf.d 目录中创建 .cnf 文件。新建的文件可以任意起名,只要保证后缀名是 cnf 即可。新建的文件中的配置项可以覆盖 /etc/mysql/my.cnf 中的配置项。
具体操作:
首先需要创建将要映射到容器中的目录以及.cnf文件,然后再创建容器
$ pwd
/opt
$ mkdir -p docker_v/mysql/conf
$ cd docker_v/mysql/conf
$ touch my.cnf
$ docker run -p 3306:3306 --name mysql -v /opt/docker_v/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d imageID
命令说明:
- -p 3306:3306:将容器的3306端口映射到主机的3306端口
- -v /opt/docker_v/mysql/conf:/etc/mysql/conf.d:将主机/opt/docker_v/mysql/conf目录挂载到容器的/etc/mysql/conf.d
- -e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
- -d: 后台运行容器,并返回容器ID
- imageID: mysql镜像ID
查看容器运行情况
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1d7dd4ffba73 mysql:5.7.22 "docker-entrypoint.s…" 46 hours ago Up 46 hours 0.0.0.0:3306->3306/tcp mysql_will
使用navicat连接mysql
类似,首先在云服务器控制面板上开放mysql端口号,然后进行连接测试,如果还是连接不上,查看mysql是否开启远程访问权限。
安装 nginx并配置
查找Docker Hub上的nginx镜像
$ docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 8785 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1346 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 547 [OK]
jrcs/letsencrypt-nginx-proxy-companion LetsEncrypt container to use with nginx as p… 377 [OK]
kong Open-source Microservice & API Management la… 192 [OK]
...
这里我们拉取官方的镜像, 标签为stable
, 即稳定版。
docker pull nginx:stable
等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为nginx的镜像。
使用镜像
运行容器
docker run -p 80:80 -p 443:443 --name nginx_will_v2 -v $PWD/conf/server.conf:/etc/nginx/conf.d/server.conf -v $PWD/www:/www -v $PWD/logs:/wwwlogs -d nginx:stable
注:
这里开放了两个端口号,是因为后面会配置https, 后面使用docker搭建生产环境一节也会介绍,自己掉坑了。命令说明:
- -p 80:80:将容器的80端口映射到主机的80端口
- -p 443:443: 将容器的443端口映射到主机的443端口
- –name mynginx:将容器命名为mynginx
- -v $PWD/www:/www:将主机中当前目录下的www挂载到容器的/www
- -v $PWD/conf/server.conf:/etc/nginx/conf.d/server.conf:将主机中当前目录下的server.conf挂载到容器的/etc/nginx/conf.d/server.conf (后面重点讲为啥)
- -v $PWD/logs:/wwwlogs:将主机中当前目录下的logs挂载到容器的/wwwlogs
查看容器运行情况
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5b22ae556d53 nginx:stable "nginx -g 'daemon of…" 14 hours ago Up 14 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp nginx_will_v2
通过浏览器访问测试: http://35.197.142.179/ ,出现nginx欢迎界面成功。
安装 tomcat并配置
查找Docker Hub上的tomcat镜像
$ docker search tomcat
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tomcat Apache Tomcat is an open source implementati… 1879 [OK]
tomee Apache TomEE is an all-Apache Java EE certif… 51 [OK]
dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base… 49 [OK]
davidcaste/alpine-tomcat Apache Tomcat 7/8 using Oracle Java 7/8 with… 24 [OK]
consol/tomcat-7.0 Tomcat 7.0.57, 8080, "admin/admin" 16 [OK]
bitnami/tomcat Bitnami Tomcat Docker Image 16 [OK]
cloudesire/tomcat Tomcat server, 6/7/8 15 [OK]
...
这里我们拉取官方的镜像, 标签为8.5.31
docker pull tomcat:8.5.31
等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为tomcat的镜像。
使用镜像
运行容器
docker run --name tomcat_will -p 8080:8080 -v $PWD/apps:/usr/local/tomcat/webapps/apps -d tomcat:8.5.31
命令说明:
- -p 8080:8080:将容器的8080端口映射到主机的8080端口
- -v $PWD/apps:/usr/local/tomcat/webapps/apps:将主机中当前目录下的apps挂载到容器的/apps
查看容器运行情况
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd2e4a1e03c3 tomcat:8.5.31 "catalina.sh run" 19 hours ago Up 14 hours 0.0.0.0:8080->8080/tcp tomcat_will
通过浏览器访问测试:http://35.197.142.179:8080/ ,出现tomcat页面成功启动。
至此,关于博客的生产环境准备工作完成,后面一章介绍生产环境的项目部署。