Docker镜像构建并部署


编写dockerfile

1
2
3
4
5
FROM java:8
ADD mall-0.0.1-SNAPSHOT.jar /mall.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar","/mall.jar","--spring.profiles.active=prod"]
MAINTAINER chenlong
  • FROM 基于已有的镜像构建
  • ADD 文件到镜像内目录
  • EXPOSE 声明端口
  • ENTRYPOINT 运行后默认执行代码
  • MAINTAINER 作者

构建docker镜像

1
2
3
4
5
6
7
8
9
10
11
12

linux:
docker build -t niulianliunai/mall .
docker push niulianliunai/mall

mac:
docker buildx create --use --name m1_builder
docker buildx inspect --bootstrap

docker buildx build
--platform linux/amd64,linux/arm64
--push -t niulianliunai/mall .
  • -t xx相当于tag命令,把build的镜像命名为xx
  • arm架构需下载m1版docker使用buildx命令
  • –platform 构建对应平台的image
  • –push 推送到远程仓库

服务器拉取镜像

docker pull niulianliunai/mall

查看镜像详细信息

docker inspect xxx

运行容器

1
2
3
4
docker run -p 8080:8080 
--name mall
-v /root/mydata/app/mall/logs:/logs/mall
-d niulianliunai/mall
  • -p 映射端口 (宿主机:容器)
  • -v 映射目录
  • -d 后台运行容器

进入容器

docker exec -it mall bash
  • exec 在容器内执行命令
  • -it 在容器开启一个交互模式的终端
  • bash表示进入容器的bash脚本执行模式

docker-compose方式

下载

1
2
curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` 
> /usr/local/bin/docker-compose

给予可执行权限

chmod +x /usr/local/bin/docker-compose

编写docker-compose.yml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
version: '3'
services:
mall:
image: niulianliunai/mall
container_name: mall
ports:
- 8080:8080
volumes:
- /root/mydata/app/mall/logs:/logs
environment:
- 'TZ="Asia/Shanghai"'
external_links:
- mysql:mysql
- redis:redis
- rabbitmq:rabbitmq
networks:
default:
external:
name: mall
  • links代表的是在本文件下互通:意思就是在这个yml文件一块启动的容器下互通
  • external_links是只要是同一个docker启动的都可以互通(可能需要配置自定义网络)
  • networks设置容器网络
  • mysql:mysql 配置以后在容器内可以用mysql:3306访问mysql

创建自定义网络

docker network ls #查看网络
docker network create -d bridge mall 

执行

docker-compose -f docker-compose.yml up -d

编写sh脚本文件方便后续执行

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env bash
app_name='mall'
docker_id='niulianliunai'
version=1.0.0
docker stop ${app_name}
docker rm ${app_name}
docker image rm ${docker_id}/${app_name}
docker build -t ${docker_id}/${app_name} .
docker push ${docker_id}/${app_name}
docker-compose -f docker-compose.yml up -d

← Prev Jenkins自动化打包部署