【Docker】一.制作适用Java项目运行的Docker镜像

一.前言

入行三年,作为Java工程师,没写过博客就算了,连docker都不会的话就out了。这里将以docker为主题写我的第一篇博客,顺便学习了解一下docker

二.Ubuntu中安装docker

2.1 安装前说明

系统环境

VMware16 pro
Ubuntu 20.04.1 LTS

命令执行用户

root

2.2 添加一个新的 HTTPS 软件源

1.更新软件包

apt update

2.添加新的https源:

apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

2.3 添加Docker官方GPG key

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

上面的地址可能会很慢,切换为以下地址

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

如果报“gpg: 找不到有效的 OpenPGP 数据”,则改执行下面的命令:

wget https://download.docker.com/linux/ubuntu/gpg
apt-key add gpg

2.4 添加Docker APT 软件源

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

上面的地址可能会很慢,切换为以下地址

add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

执行后再次更新apt源:

apt update

2.5 安装 Docker 最新版本

apt install docker-ce docker-ce-cli containerd.io

2.6 验证Docker是否启动

systemctl status docker

出现以下内容则表示启动成功
在这里插入图片描述

2.7 验证Docker是否安装正确

docker run hello-world

出现以下内容则表示安装成功
【Docker】一.制作适用Java项目运行的Docker镜像_第1张图片

三.了解docker的一些基础概念

3.1 镜像、容器

镜像:是一个只读模板,带有创建Docker容器的指令
容器:容器是用镜像创建的运行实例

镜像和容器的关系,就类似于Java中的类和类的实例的关系

3.2 常用命令介绍

docker images:列出本地所有的镜像信息
docker run [命令参数]:创建并启动一个容器
docker exec [命令参数]:进入容器
docker ps:列出正在运行的所有容器
docker ps -a:列出所有容器
docker stop [容器id]:停止正在运行的容器
docker start [容器id]:启动已经停止的容器

四.制作适合JavaWeb运行的镜像

注:JavaWeb项目的运行环境一般是jdk、mysql、tomcat、redis等,我打算把这几个全部同一制作成一个镜像,实现一键部署。刚开始是打算通过写DockerFile的方式,结果发现无法实现。因此采用第二种办法,也就是在容器里面装好以上软件后,再打包成镜像

4.1 建立Ubuntu容器

4.1.1 拉取Ubuntu镜像

#拉取18.04版本的Ubuntu镜像
docker pull ubuntu:18.04
#启动Ubuntu容器并命名容器名称ubuntu1804 
docker run -itd --name ubuntu1804 ubuntu:18.04
#进入容器
docker exec -it ubuntu1804  /bin/bash

4.1.2 切换源

编辑sources.list文件

vim /etc/apt/sources.list

在文件中把原来的源注释掉,再把下面的源加入到文件前面

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

更新源

apt-get update
apt-get upgrade

4.2 安装jdk1.8

4.2.1 官网下载jdk1.8

通过下面的官网连接下载相应版本
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
在这里插入图片描述

4.2.2 操作jdk文件

#在宿主机执行以下命令,将jdk压缩包复制到容器内,路径自定义
docker cp jdk-8u261-linux-x64.tar.gz ubuntu1804:/usr/local/java
#在容器内cd到以下目录
cd /usr/local/java
#解压文件
tar -zxvf jdk-8u261-linux-x64.tar.gz

4.2.3 配置环境变量

vim /etc/profile

在打开的文件末尾加入以下内容,注意jdk路径

#加入环境变量信息
export JAVA_HOME=/usr/local/java/jdk1.8.0_261
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:%{JAVA_HOME}/lib:%{JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

执行以下命令让配置文件立即生效

#让配置文件立即生效
source /etc/profile

输入以下命令确认java安装成功

java -version

出现以下提示,则表示java安装成功
在这里插入图片描述

4.2.4 重启生效

一旦重启容器,那么输入java -version就会报错,所以这里需要把source /etc/profile命令加入~/.bashrc

vim ~/.bashrc
#在末尾加入以下内容
source /etc/profile

如果报权限问题,则执行以下命令

chmod 766 ~/.bashrc

4.3 安装tomcat

4.3.1 官网下载tomcat 8.5

https://tomcat.apache.org/download-80.cgi
【Docker】一.制作适用Java项目运行的Docker镜像_第2张图片

4.3.2 解压文件

tar -zxvf apache-tomcat-8.5.58.tar.gz

4.3.3 进入bin目录执行下面的命令

vim startup.sh

在文件末尾加上以下代码(注意替换JAVA_HOME和TOMCAT_HOME的路径)

#set java environment
export JAVA_HOME=/usr/local/java/jdk1.8.0_261
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:%{JAVA_HOME}/lib:%{JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
#tomcat
export TOMCAT_HOME=/usr/local/tomcat/apache-tomcat-8.5.58

4.4 安装mysql

4.4.1 查看有没有安装mysql

dpkg -l | grep mysql

4.4.2 查看软件源的MySQL版本

apt-cache madison mysql-server

4.4.3 安装MySQL5.7

apt install mysql-server

4.4.4 启动MySQL

#先执行下面的命令判断MySQL是否启动
netstat -tap | grep mysql
#如果没有启动,进入/etc/init.d目录看看MySQL服务名称,执行下面的命令
service mysql start

4.4.5 登录MySQL

#密码默认为空
mysql -uroot -p

出现下面的情况表示MySQL安装成功
【Docker】一.制作适用Java项目运行的Docker镜像_第3张图片

4.4.6 设置MySQL自启

#编辑~/.bashrc
vim ~/.bashrc
#将以下命令加入~/.bashrc文件末尾
service mysql start

4.5 安装redis

#安装
apt install redis-server
#查看是否启动
netstat -tap | grep redis
#如果没有启动,进入/etc/init.d目录看看redis服务名称,执行下面的命令
service redis-server start

如果启动失败,输入以下命令查看日志

cat /var/log/redis/redis-server.log

如果出现下面的情况,则修改redis的配置文件
在这里插入图片描述

vim /etc/redis/redis.conf
#将下面这一行注释掉
#bind 127.0.0.1 ::1
#以下命令可以登录redis客户端进行操作
redis-cli -h localhost -p 6379

设置容器启动后redis自启

#编辑~/.bashrc
vim ~/.bashrc
#将以下命令加入~/.bashrc文件末尾
service mysql start

4.6 制作镜像

4.6.1 commit

docker commit 68e0d3c06b46 ubuntu1804_back:1.0

其中68e0d3c06b46表示正在运行的容器id
ubuntu1804_back:自定义镜像名
1.0:自定义版本

4.6.2启动镜像

docker run -itd -p 8080:8080 -p 3306:3306 -p 6379:6379 ubuntu1804_back:1.0

注意这里的端口映射

4.6.3 进入容器

docker exec -it [容器id]  /bin/bash

4.7 提交镜像到远程仓库

注册dockerhub账号

#登录dockerhub
docker login
#如果push不规范,必须要改
docker tag 镜像id 用户名/镜像名
#推送
docker push 用户名/镜像名

4.8 总结

我查看了一下我最终制作好的镜像大小,竟然达到1.19GB,这可能不是一个合格的镜像,不过尽管如此,我仍然明显地感觉到docker在分布式架构中的优势:

  1. 如果我们部署每一台服务器都要手动地在宿主系统上安装jdk、tomcat、mysql等等,将会非常耗时耗力,有了docker,我们只需要在每一台服务器上使用几行命令安装好docker后,直接拉取docker镜像运行即可
  2. 多个服务器上手动安装各类软件极容易导致软件管理混乱,比如可能A服务器上安装的MySQL版本是5.7的,B服务器上安装的MySQL版本是8.0的,这种情况会导致项目运行过程中出现未知bug。docker提供了统一的管理服务,可以极大程度避免这种情况

你可能感兴趣的:(docker)