docker 安装jdk_Mac通过docker搭建本地的开发Java Web开发环境

  1. 安装jdk

  2. 安装docker

  3. pull相应的images

  4. docker 创建nginx容器

  5. docker 创建mysql容器

  6. docker 创建 phpmyadmin 容器

1安装JDK

因为现在VSCode搭建Java环境必须要求JDK版本最低位11。为了配合VSCode开发使用了open-jdk-14作为默认的jdk环境。

这里也要吐槽下Oracle的JDK下载必须创建账号登录,因为也不会有谁没事就去Oracle的网站登陆下,账号密码搞忘记是太容易的事情。所以我选择了openjdk,下载地址https://download.java.net

下载完毕之后将压缩包解压到:~/projects/jdk-14.0.2.jdk

1.2设置环境变量

修改home目录下的.bash_profile指定当前bash的JAVA_HOME环境变量

$ vim .bash_profileJAVA_HOME=~/projects/jdk-14.0.2.jdk/Contents/Homeexport JAVA_HOME

在终端中执行java -version命令查看版本:

MBP:$ java -versionopenjdk version "14.0.2" 2020-07-14OpenJDK Runtime Environment (build 14.0.2+12-46)OpenJDK 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing)
2.安装docker

MacOS最简单的方法是把系统升级到10.10.3以上使用Docker for Mac。然后通过阿里云服务镜像下载安装包:http://mirrors.aliyun.com/docker-toolbox/mac/docker-for-mac/

安装完成之后运行docker,点击docker的Preferences

ab6acd8a938c8be22651607cb9e6db45.png

然后在弹出的Preferences界面选择Docker Engine

428d3088d465116792a1d1bdb0aa1fd7.png

上图中有个“registry-mirror”,将阿里云提供的镜像地址填写到这个数组中就可以配置阿里的镜像源了。
具体方法参考阿里云文档(需要登录生成自己的镜像地址):https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

2.1拉取images

这里选取常用的nginx,mysql和phpMyAdmin举例:

MBP:$ docker search nginxNAME    DESCRIPTION               STARS    OFFICIAL    AUTOMATEDnginx   Official build of Nginx.  13543    [OK]MBP:$ docker pull nginxMBP:$ docker search mysqlNAME    DESCRIPTION                                     STARS OFFICIAL AUTOMATEDmysql   MySQL is a widely used, open-source relation…   9788  [OK]                mariadb MariaDB is a community-developed fork of MyS…   3571  [OK]MBP:$ docker pull mysql:5.6MBP:$ docker search phpmyadminNAME                  DESCRIPTION                            STARS OFFICIAL AUTOMATEDphpmyadmin/phpmyadmin A web interface for MySQL and MariaDB. 1053           [OK]    MBP:$ docker pull phpmyadmin/phpmyadminUsing default tag: latestlatest: Pulling from phpmyadmin/phpmyadmin6ec8c9369e08: Pull complete 081a822af595: Pull complete bb5bea655fca: Pull complete 1e5d9e6a44c7: Pull complete 51c80d726a75: Pull complete 41f3ef5189e5: Pull complete c1a9c1efdc83: Pull complete 348c6ac67813: Pull complete d16c4c4b2a5f: Pull complete 035ee560bfbc: Pull complete 4c16f7d16e86: Pull complete 560feb679e04: Pull complete 0bc8defe61af: Pull complete b80e31e8a7c4: Pull complete f94927b2554c: Pull complete 416dcf230b63: Pull complete a9d24c9f2a61: Pull complete 4cae08d2f851: Pull complete Digest: sha256:69eaf4a23598e9986b62bbfde9e8e3ae773f0da53406723e6f027582e0310274Status: Downloaded newer image for phpmyadmin/phpmyadmin:latestdocker.io/phpmyadmin/phpmyadmin:latest

查看拉取的images

MBP:$ docker imagesREPOSITORY              TAG    MAGE ID      CREATED      SIZEphpmyadmin/phpmyadmin   latest 9d4ec4bbd5e5 9 hours ago  469MBredis                   latest 44d36d2c2374 6 months ago 98.2MBnginx                   latest 231d40e811cd 8 months ago 126MBmysql                   5.6    b3983abaa3fe 9 months ago 302MB

2.2创建nginx容器

构建容器步骤如下:

MBP:$ cd ~/projectsMBP:$ mkdir dockerMBP:$ cd dockerMBP:$ mkdir nginxMBP:$ cd nginxMBP:$ mkdir htmlMBP:$ mkdir logsMBP:$ docker run -it --name=test nginxMBP:$ docker psCONTAINER ID  IMAGE COMMAND                CREATED        STATUS        PORTS  NAMES280b57c82615  nginx "nginx -g 'daemon of…" 52 seconds ago Up 51 seconds 80/tcp testMBP:$ docker cp test:/etc/nginx/nginx.conf ./MBP:$ lsnginx.confMBP:$ cat nginx.confMBP:$ docker stop testtestMBP:$ docker rm testtestMBP:$ vim nginx.shdocker run --name nginx -p 80:80 -v ~/projects/docker/nginx/html:/usr/share/nginx/html -v ~/projects/docker/nginx/nginx.conf:/etc/nginx/nginx.conf -v ~/projects/docker/nginx/logs:/var/log/nginx -d nginxMBP:$ chmod 777 nginx.shMBP:$ ./nginx.shb1e43d8294ff0979f8bd18fae9d554a4f8ee56d8f65fa54bc03ee01c7b308d88MBP:$ docker psCONTAINER ID IMAGE COMMAND                CREATED        STATUS        PORTS      NAMESb1e43d8294ff nginx "nginx -g 'daemon of…" 53 seconds ago Up 51 seconds 0.0.0.0:80->80/tcp nginxMBP:$ cd htmlMBP:$ vim index.htmlIt works!

It

works!
  1. 新建一个文件夹~/projects/docker/nginx用于存放nginx需要用到的映射文件

  2. 进去nginx文件夹,创建一个html,这个文件夹会映射到容器中的html文件夹,作为nginx服务器的root path

  3. 创建一个log文件夹,用于映射nginx容器中的log文件夹

  4. 使用docker run命令创建一个nginx的test的容器,目的是为了将nginx.conf文件拷贝到容器外。(这里也可以将nginx自带的html文件夹拷贝出来,我这里搞忘记了,所以后面是自己新建的html文件夹和index.html文件)

  5. 使用docker ps命令将nginx.conf文件夹拷贝到当前的主机文件夹

  6. 因为使映射多个文件夹和文件到主机,导致创建docker容器的命令比较长,我这里采取的做法是自己写一个bash脚本,方便编辑。

  7. 创建好脚本之后需要给自己写的脚本赋予可执行权限chmod a+x nginx.sh

  8. 然后执行nginx.sh脚本,可以看到正常情况下会出现一个id

  9. 这时执行下docker ps可以看到正常运行的nginx容器

  10. 在浏览器中输入http://localhost,可以看到index.html中的内容,我这里是自己写的也就是It works!

docker创建容器命令注释

# docker run docker run # 指定容器名称--name nginx # 指定端口映射,前面是主机端口,后面是容器中的端口-p 80:80 # 映射nginx的html文件夹-v ~/projects/docker/nginx/html:/usr/share/nginx/html # 映射nginx.conf文件-v ~/projects/docker/nginx/nginx.conf:/etc/nginx/nginx.conf # 映射log文件夹-v ~/projects/docker/nginx/logs:/var/log/nginx # 指定镜像-d nginx

将必要的数据文件,配置文件,log文件映射到主机的目的方便修改和保存数据。比如将nginx的配置文件映射到主机,当我们需要给nginx添加代理或者做其他修改时,在主机中修改映射之后的文件,然后重启nginx容器就很方便的完成了。否则需要先将容器中的配置文件通过docker cp命令拷贝到主机进行修改,再通过docker cp命令拷贝回容器,比较麻烦。对于log日志,或者mysql容器中的数据文件,如果不映射到主机,那么在删除容器时,这些数据文件也会被删除,尤其是对于mysql来说这是灾难性到事情。因此需要将必要的文件和文件夹映射主机。

2.3创建MySQL容器

MBP:$ cd ~/projects/dockerMBP:$ mkdir mysqlMBP:$ cd mysqlMBP:$ mkdir mysql.conf.dMBP:$ mkdir logsMBP:$ vim mysql.shdocker run -p 3306:3306 --name mysql56 -v ~/projects/docker/mysql:/var/lib/mysql -v ~/projects/docker/mysql/logs:/var/log/mysql -v ~/projects/docker/mysql/mysql.conf.d:/etc/mysql/mysql.conf.d -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6MBP:$ chmod +x mysql.shMBP:$ ./mysql.sh3b1cfcbe2c42790f47dd4323af91e5b3d2a784e5ee0b697413fbeffdd59474daMBP:$ docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES3b1cfcbe2c42        mysql:5.6           "docker-entrypoint.s…"   5 seconds ago       Up 4 seconds        0.0.0.0:3306->3306/tcp   mysql56b1e43d8294ff        nginx               "nginx -g 'daemon of…"   37 minutes ago      Up 37 minutes       0.0.0.0:80->80/tcp       nginxMBP:$ cd mysql.conf.dMBP:$ vim my.cnf# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.## This program is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License, version 2.0,# as published by the Free Software Foundation.## This program is also distributed with certain software (including# but not limited to OpenSSL) that is licensed under separate terms,# as designated in a particular file or component or in included license# documentation.  The authors of MySQL hereby grant you an additional# permission to link the program and your derivative works with the# separately licensed software that they have included with MySQL.## This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the# GNU General Public License, version 2.0, for more details.## You should have received a copy of the GNU General Public License# along with this program; if not, write to the Free Software# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA## The MySQL  Server configuration file.## For explanations see# http://dev.mysql.com/doc/mysql/en/server-system-variables.html[client]default-character-set=utf8[mysqld]pid-file        = /var/run/mysqld/mysqld.pidsocket          = /var/run/mysqld/mysqld.sockdatadir         = /var/lib/mysqllog-error      = /var/log/mysql/error.log# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0character-set-server=utf8init_connect='SET NAMES utf8'[mysql]default-character-set=utf8MBP:$ docker stop mysql56MBP:$ docker start mysql56

docker创建容器命令注释

# docker run docker run # 指定容器名称--name mysql56# 指定端口映射,前面是主机端口,后面是容器中的端口-p 3306:3306 # 映射数据库文件夹-v ~/projects/docker/mysql:/var/lib/mysql # 映射配置文件夹,MySQL5.6的中文支持需要修改my.cnf文件-v ~/projects/docker/mysql/mysql.conf.d:/etc/mysql/mysql.conf.d # 映射log文件夹-v ~/projects/docker/mysql/logs:/var/log/mysql # 指定镜像-d mysql:5.6

MySQL容器需要注意修改mysql.conf.d文件夹下的my.cnf文件,这里最好还是像处理nginx容器时一样,先创建一个test的容器,将my.cnf文件拷贝出来,然后再做映射。我这因为之前留有my.cnf文件的修改记录,所以直接创建了一个新的my.cnf文件。其实没有必要,映射出来之后,注意添加几处字符集”utf-8“的设置。

2.4创建PhpMyAdmin容器

docker run --name pma -p 58080:80 --link mysql56:db -d phpmyadmin/phpmyadmin


作为应用服务容器,phpMyAdmin的容器就比较简单了,只需要link到之前创建好的mysql数据即可

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值