实用功能:Docker部署Java项目
Docker基本使用,我在学习完黑马的docker入门,进行核心使用的进一步提取,本文主要是对于重要步骤的提取,以下内容都是基于Centos 7。
Docker基本使用,我在学习完黑马的docker入门,进行核心使用的进一步提取,本文主要是对于重要步骤的提取,以下内容都是基于Centos 7
1、Douker的安装
1.1 首先先删除系统可能存在的
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
1.2配置Docker的yum仓库
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
1.3安装Docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
1.4启动Docker
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
1.5镜像加速
进入阿里云官网,找到容器镜像服务
执行下面命令
# 创建目录
mkdir -p /etc/docker
# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF
# 重新加载配置
systemctl daemon-reload
# 重启Docker
systemctl restart docker
2、基本命令(以黑马商城为例)
2.1 拉取镜像
# 第1步,去DockerHub查看nginx镜像仓库及相关信息
# 第2步,拉取Nginx镜像
docker pull nginx
# 第3步,查看镜像
docker images
# 结果如下:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 16 months ago 141MB
mysql latest 3218b38490ce 17 months ago 516MB
2.2加载镜像
有时候因为网速问题,大家可以先下载到本地,然后进行加载
比如我们下载的叫做nginx.tar,这里放在根目录
docker load -i nginx.tar
查看是否加载成功
2.3 挂载本地目录和文件
挂载的意思就是你要把本地路径与你容器里的路径双向绑定
html
是静态资源目录,nginx.conf
是nginx的配置文件
-v 命令,冒号前面是宿主机,冒号后面是容器内部(可以再doker官网进行查看)
-v /root/nginx/html:/usr/share/nginx/html \
2.4 网络连接
项目往往需要访问其它各种中间件,例如MySQL
# 1.首先通过命令创建一个网络
docker network create hmall
# 2.然后查看网络
docker network ls
# 结果:
NETWORK ID NAME DRIVER SCOPE
639bc44d0a87 bridge bridge local
403f16ec62a2 hmall bridge local
0dc0f72a0fbb host host local
cd8d3e8df47b none null local
# 其中,除了hmall以外,其它都是默认的网络
# 3.让dd和mysql都加入该网络,注意,在加入网络时可以通过--alias给容器起别名
# 这样该网络内的其它容器可以用别名互相访问!
# 3.1.mysql容器,指定别名为db,另外每一个容器都有一个别名是容器名
#注意前提是已经创建了容器可以加入,后面怎么一开始就加入
docker network connect hmall mysql --alias db
# 3.2.db容器,也就是我们的java项目
docker network connect hmall dd
# 4.进入dd容器,尝试利用别名访问db
# 4.1.进入容器
docker exec -it dd bash
#可以执行ping进行测试
2.5构建镜像
文本以黑马的为例子
将Dockerfile
和hm-service/target
目录下的hm-service.jar
一起上传到虚拟机的root
目录:
有时候先构建一个镜像
# 1.构建项目镜像,不指定tag,则默认为latest
docker build -t hmall .
# 2.查看镜像
docker images
# 结果
REPOSITORY TAG IMAGE ID CREATED SIZE
hmall latest 0bb07b2c34b9 43 seconds ago 362MB
docker-demo 1.0 49743484da68 24 hours ago 327MB
nginx latest 605c77e624dd 16 months ago 141MB
mysql latest 3218b38490ce 17 months ago 516MB
-
docker build
: 就是构建一个docker镜像 -
-t hmall:1.0
:-t
参数是指定镜像的名称(repository
和tag
) -
.
: 最后的点是指构建时Dockerfile所在路径,,所以指定的是.
代表当前目录,也可以直接指定Dockerfile目录:问题1
有时候大家服务器连接不到docker hub 就要我们手动下载镜像,进行加载到本地
再次重新执行编译
问题2
注意点:打包jar的时候容易出错
这里展示的11,就是你的java要是11版本的,否则会出现问题
2.6删除容器
发现无法删除,因为容器运行中,强制删除容器
docker rm -f nginx
3、部署其他
3.1、Java后端
黑马demo
# 1.创建并运行容器
docker run -d --name dd -p 8090:8090 docker-demo:1.0
# 2.查看容器
dps
# 结果
CONTAINER ID IMAGE PORTS STATUS NAMES
78a000447b49 docker-demo:1.0 0.0.0.0:8080->8080/tcp, :::8090->8090/tcp Up 2 seconds dd
f63cfead8502 mysql 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp Up 2 hours mysql
# 3.访问
curl localhost:8080/hello/count
# 结果:
<h5>欢迎访问黑马商城, 这是您第1次访问<h5>
黑马商城
# 3.创建并运行容器,并通过--network将其加入hmall网络,这样才能通过容器名访问mysql
docker run -d --name hmall --network hmall -p 8080:8080 hmall
3.2、前端
docker run -d \
--name nginx \
-p 18080:18080 \
-p 18081:18081 \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
--network hmall \
nginx
3.3 Mysql
-
挂载
/root/mysql/data
到容器内的/var/lib/mysql
目录 -
挂载
/root/mysql/init
到容器内的/docker-entrypoint-initdb.d
目录(初始化的SQL脚本目录) -
挂载
/root/mysql/conf
到容器内的/etc/mysql/conf.d
目录(这个是MySQL配置文件目录)
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v ./mysql/data:/var/lib/mysql \
-v ./mysql/conf:/etc/mysql/conf.d \
-v ./mysql/init:/docker-entrypoint-initdb.d \
--network hmall \
mysql
4、最终结果
当你上述操作都完成后,docker部署Java项目就没OK了
注意
一定要正确加入同一个网络
一定要对于Nginx配置的api接口与容器的名字一致
java后端对应的容器名字mysql也要一致
更多推荐
所有评论(0)