docker搭建web运行环境
本文目的
做过开发的人对开发环境的安装、配置应该都不会太陌生,不管你做什么开发,对开发环境都会具有一定的依赖性的。比如你是Java开发人员,开发了一个网站,你可能需要一个Linux系统、配置jdk运行环境、Web 服务器(如 Apache、Nginx)、一个数据库服务器(如 MySQL)。虽然说这些东西作为一名合格的程序猿是必须要会的,但是如果叫你经常帮忙安装配置这些环境,你也会不爽吧,毕竟配置这些也是毕竟费时间的,而且容易出错。
但是自从有了 Docker 之后,妈妈再也不用担心我的开发环境的问题了。使用 Docker ,开发环境只需要安装配置一次,之后搭建相同的开发环境很简单,只需要一条命令即可完成!
前提条件
首先,您要准备一个 CentOS或者Ubuntu 的操作系统,虚拟机也行。这些都不重要,因为只要你的linux系统能安装docker,大部分的运行环境需要用到的软件都可以通过docker安装,包括操作系统。
需要说明的是,我本机是win10,然后在win10上安装了个VMware,VMware里安装了ubuntu18,最后在ubuntu18中安装docker的。
安装docker
如果还没安装docker,可以参考https://blog.csdn.net/wuzhangweiss/article/details/88895570
获取centos镜像
通过docker search cento查询docker官方仓库中有哪些镜像。
wuzhangwei@ubuntu:~$ docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 5404 [OK]
ansible/centos7-ansible Ansible on Centos7 121 [OK]
jdeathe/centos-ssh CentOS-6 6.10 x86_64 / CentOS-7 7.5.1804 x86… 110 [OK]
consol/centos-xfce-vnc Centos container with "headless" VNC session… 91 [OK]
imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 56 [OK]
tutum/centos Simple CentOS docker image with SSH access 44
centos/postgresql-96-centos7 PostgreSQL is an advanced Object-Relational … 37
kinogmt/centos-ssh CentOS with SSH 26 [OK]
centos/php-56-centos7 Platform for building and running PHP 5.6 ap… 20
pivotaldata/centos-gpdb-dev CentOS image for GPDB development. Tag names… 10
nathonfowlie/centos-jre Latest CentOS image with the JRE pre-install… 8 [OK]
drecom/centos-ruby centos ruby 6 [OK]
pivotaldata/centos Base centos, freshened up a little with a Do… 3
darksheer/centos Base Centos Image -- Updated hourly 3 [OK]
miko2u/centos6 CentOS6 日本語環境 2 [OK]
pivotaldata/centos-mingw Using the mingw toolchain to cross-compile t… 2
ovirtguestagent/centos7-atomic The oVirt Guest Agent for Centos 7 Atomic Ho… 2
pivotaldata/centos-gcc-toolchain CentOS with a toolchain, but unaffiliated wi… 1
blacklabelops/centos CentOS Base Image! Built and Updates Daily! 1 [OK]
indigo/centos-maven Vanilla CentOS 7 with Oracle Java Developmen… 1 [OK]
mcnaughton/centos-base centos base image 1 [OK]
pivotaldata/centos7-dev CentosOS 7 image for GPDB development 0
smartentry/centos centos with smartentry 0 [OK]
fortinj66/centos7-s2i-nodejs based off of ryanj/centos7-s2i-nodejs. Bigg… 0
pivotaldata/centos6.8-dev CentosOS 6.8 image for GPDB development 0
上面是我查到的所有centos镜像,其中第一个是docker官方上传的centos镜像,剩下的都是个人用户上传上去的。
下载第一个镜像:docker pull centos,然后等待下载完成。
下载完成后可以通过docker images查看自己本地仓库的镜像。
wuzhangwei@ubuntu:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
wuzhangwei/javaweb 1.0 5419a4a8f597 40 hours ago 540MB
mysql latest 990386cbd5c0 5 weeks ago 443MB
redis latest a55fbf438dfd 2 months ago 95MB
centos latest 9f38484d220f 3 months ago 202MB
nginx latest 881bd08c0b08 3 months ago 109MB
hello-world latest fce289e99eb9 5 months ago 1.84kB
如上面所示,centos已经下载到本地镜像库了。
REPOSITORY :仓库名称
TAG : 镜像标签
IMAGE ID : 镜像ID
CREATED : 创建时间
SIZE : 大小
下载的centos镜像ID为:======9f38484d220f ======
启动容器
容器是基于镜像创建的,执行镜像生成容器,方可进入容器
启动容器命令: docker run <相关参数> <镜像 ID> <初始命令>
wuzhangwei@ubuntu:~$ docker run -it -v /mnt/software/:/mnt/software/ 9f38 /bin/bash
[root@4c415c247478 /]#
参数解析
-i:表示以“交互模式”运行容器
-t:表示容器启动后会进入其命令行
-v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
/bin/bash:一旦容器启动,需要执行的命令,当前使用 “/bin/bash”, 表示启动后直接进bash shell
9f38是centos镜像的ID:9f38484d220f的前四位(可以写全也可以只写前几位)
tips:这里挂载的意思就是 9f38484d220f创建的容器访问 /mnt/software/ 目录下的文件就相当于访问 宿主机的 /mnt/software/下的文件,且两者文件夹里内容相同
查看运行中的容器
wuzhangwei@ubuntu:/$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4c415c247478 9f38 "/bin/bash" About a minute ago Up About a minute quirky_cori
拷贝JDK和tomcat安装包到宿主机器
因为前面启动的centos容器挂载到了/mnt/software/路径下,所以现在需要把jdk和tomcat拷贝到到宿主机器的/mnt/software/路径下。
这里推荐使用MobaXterm这款ssh客户端神器来操作,这款工具免费又好用。
拷贝好后如下所示,jdk和tomcat都放到了/mnt/software/路径下了
wuzhangwei@ubuntu:~$ cd /mnt/software
wuzhangwei@ubuntu:/mnt/software$ ls
apache-tomcat-8.5.35.tar.gz jdk8-linux-x64.tar.gz
进入centos容器配置运行环境
安装jdk
[root@4c415c247478 software]# tar -zxf jdk8-linux-x64.tar.gz -C .
移动jdk1.8.0_11到/opt/路径下并重命名jdk目录
[root@4c415c247478 software]# mv jdk1.8.0_11/ /opt/jdk
安装tomcat
[root@4c415c247478 software]# tar -zxf apache-tomcat-8.5.35.tar.gz -C .
移动apache-tomcat-8.5.35到/opt/路径下并重命名tomcat目录
[root@4c415c247478 software]# mv apache-tomcat-8.5.35/ /opt/tomcat
设置环境变量
首先,编辑.bashrc文件
[root@4c415c247478 software]# vi ~/.bashrc
在末尾处添加下面三行配置
export JAVA_HOME=/opt/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
使配置立即生效
source ~/.bashrc
检查jdk是否安装成功
[root@4c415c247478 conf]# java -version
java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)
编写运行脚本
我们需要编写一个运行脚本,当启动容器时,运行该脚本,启动 Tomcat,具体过程如下:
首先,创建运行脚本:
[root@4c415c247478 conf]# vi /root/run.sh
然后编辑脚本内容如下
#!/bin/bash
source ~/.bashrc
sh /opt/tomcat/bin/catalina.sh run
注意:这里必须先加载环境变量,然后使用 Tomcat 的运行脚本来启动 Tomcat 服务。
最后,为运行脚本添加执行权限:
[root@4c415c247478 conf]# chmod u+x /root/run.sh
退出容器
当以上步骤全部完成后,可使用exit命令,退出容器。
创建tomcat镜像
-
使用docker构建镜像有两种方式
- 1、使用docker commit 命令,更直观一些
- 2、使用docker build命令和dockerfile文件,可以模板化构建过程;
这里使用docker commit命令
回顾一下,我们是用了centos镜像,运行,生成了一个容器,然后再容器里面安装了 jdk 和tomcat ,这个时候我们可以根据之前安装好环境的容器ID 创建一个镜像
执行 docker commit 4c415c247478 wuzhangwei/mytomcat:1.0 后
然后查看本地镜像库,可以看见刚刚新增的镜像;
wuzhangwei@ubuntu:~$ docker commit 4c415c247478 wuzhangwei/mytomcat:1.0
sha256:cc2bd2cf28090e8077f7d21d8119b11baa4a6ede18161f0259c9210df458c2eb
wuzhangwei@ubuntu:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
wuzhangwei/mytomcat 1.0 cc2bd2cf2809 6 seconds ago 540MB
wuzhangwei/javaweb 1.0 5419a4a8f597 42 hours ago 540MB
mysql latest 990386cbd5c0 5 weeks ago 443MB
redis latest a55fbf438dfd 2 months ago 95MB
centos latest 9f38484d220f 3 months ago 202MB
nginx latest 881bd08c0b08 3 months ago 109MB
hello-world latest fce289e99eb9 5 months ago 1.84kB
wuzhangwei@ubuntu:~$
启动镜像
wuzhangwei@ubuntu:~$ docker run -d -p 18080:8080 --name mytomcat wuzhangwei/mytomcat:1.0 /root/run.sh
fa8fa28d8d56f50c33db6295e1870dc185c6fda2a6f1fde20fccd439a0bb6dd3
wuzhangwei@ubuntu:~$
命令介绍:
-d:表示以“守护模式”执行/root/run.sh脚本,此时 Tomcat 控制台不会出现在输出终端上。
-p:表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 18080 端口,这样就向外界暴露了 18080 端口,可通过 Docker 网桥来访问容器内部的 8080 端口了。
–name:表示容器名称,用一个有意义的名称命名即可。
输入下面的地址,就可以访问tomcat首页了
http://192.168.175.136:18080/
注意:这里使用的是宿主机的 IP 地址,与对外暴露的端口号 18080,它映射容器内部的端口号 8080。
访问tomcat首页
最后
先写到这里吧,由于时间关系,本文先介绍docker搭建Javaweb运行环境的简单过程,后面再写一篇可以真正运行Javaweb项目的文章,本次搭建还没有加入mysql、redis、es、mq等服务,下次一并加上。