Docker
注:文中命令{ } 属于必填项,[ ] 属于可选填项
Cita 2020-06-19 14:40
Docker官网
容器(Container)
:是基于镜像创建的运行实例,一个容器中可以运行一个或多个应用程序(jdk+开发的java应用),可以理 解成容器包含:一个精简版的Linux环境+要运行的应用程序。
仓库(Repository)
:集中存放镜像文件
的场所,分为公有仓库(Public)
和私有仓库(private)
。
- 公有仓库:Docker公司运营的公共仓库叫做Docker Hub,存放了数量庞大的镜像供用户下载,用户可以在Docker Hub注册账号,分享并保存自己的镜像。(注:在Docker Hub下载镜像巨慢)。
- 国内的公有仓库包括阿里云、网易云等,可以提供大陆用户更稳定快速的访问。
CentOS7安装Docker要内核是3.10_x64以上
// 查看linux内核版本
# uname -r
3.10.0-1062.12.1.el7.x86_64
Docker卸载
// 卸载Docker Engine,CLI和Containerd软件包
# yum remove docker-ce docker-ce-cli containerd.io
// 主机上的映像,容器,卷或自定义配置文件不会自动删除。要删除所有镜像,容器和卷
# rm -rf /var/lib/docker
Docker安装
官网安装地址: https://docs.docker.com/engine/install/centos/#install-using-the-repository
案例使用镜像仓库安装所以需要连接外网
1. 安装前条件
// 切换到root用户
# su root
// 卸载旧版本docker 但镜像,容器,卷和网络会被保留
# yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2. 安装此安装根据官网步骤安装(镜像安装)
// 1.安装yum-utils软件包(提供yum-config-manager 实用程序)
# yum install -y yum-utils
# yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
// 2.可选操作(开启night或test repository)作用更新版本
# yum-config-manager --enable docker-ce-nightly
# yum-config-manager --enable docker-ce-test
// 开启 关闭 night和test repository
# yum-config-manager --disable docker-ce-nightly || yum-config-manager --enable docker-ce-nightly
# yum-config-manager --disable docker-ce-test || yum-config-manager --enable docker-ce-test
// 3.安装最新版本Docker和容器(版本可根据官网安装方法指定)
# yum install docker-ce docker-ce-cli containerd.io
// 查看docker版本
# docker version
3. 配置镜像下载地址
// 配置的阿里云的镜像地址(阿里云管理后台有每个人的私人镜像加速地址:控制台->产品与服务->容器镜像服务->镜像加速器)
# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://jxxhar25.mirror.aliyuncs.com"]
}
// 修改后重新加载配置文件,重启docker
# systemctl daemon-reload
# systemctl restart docker
4. 镜像容器存放路径containers、image
# cd /var/lib/docker/
containers image network overlay2 plugins swarm tmp trust volumes
5. docker 守护进程管理
# systemctl start docker/docker.service # 运行Docker
# systemctl stop docker/docker.service # 停止Docker
# systemctl restart docker/docker.service # 重启Docker
# systemctl disable docker/docker.service # 开机停止Docker守护进程
# systemctl enable docker/docker.service # 开机启动Docker守护进程
6. docker 信息命令
// docker命令帮助
# docker --help
// 输出: [docker 可选参数 命令] ,可输入查看
Usage: docker [OPTIONS] COMMAND
// 检查docker概要信息
# docker info
Server:
Containers: 0 // 容器数
Running: 0 // 运行容器数
Paused: 0
Stopped: 0
Images: 0 // 镜像数
Server Version: 19.03.11
Docker Root Dir: /var/lib/docker
7.docker 镜像
7.1. 镜像描述
Docker镜像是由文件系统叠加
而成(是一种文件存储形式)。最底端是一个文件引导系统,即bootfs。docker容器启动是需要一些文件,而这些文件可以称为Docker镜像。
7.2. 镜像仓库查找镜像
https://hub.docker.com/
7.3. 镜像操作
7.3.1 镜像搜索
// 镜像搜索:docker search {镜像名}
# docker search centOS
//镜像名 描述 关注度 官方的 是否是自动化构建的
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 6055 [OK]
centos7-ansible Ansible on Centos7 130 [OK]
// -s:列出关注数大于指定值的镜像:docker search -s [100] [centOS]
# docker search -s 100 centOS
// --no-trunc 显示完整的镜像秒速Description:docker search --no-trunc [centOS]
# docker search --no-trunc centOS
// 查看镜像的元信息
# docker inspect 镜像ID或者镜像名:TAG
7.3.2 镜像拉取
// 镜像拉取:docker pull {镜像名:版本号(标签名)},不加版本号(标签名)默认拉取latest
# docker pull tomcat:9.0
7.3.3 镜像删除
// 镜像删除:docker rmi -f {镜像名ID/镜像名},-f表示强制删除
# docker rmi -f tomcat:9.0
// 列举所有镜像id
# docker images -q
// 批量删除镜像:docker rmi {镜像ID1} [镜像ID2] [...]
# docker rmi 8de95e6026c3 81a4731e5497
// 删除全部镜像
# docker rmi `docker images -q`
// 一键删除带none:none的镜像
# docker rmi $(docker images | grep "none" | awk '{print $3}')
8. 容器 Container
8.1 查看容器
// 查看运行的容器(命令中的container可省略)
# docker container ps
// 查看所有的容器(命令中的container可省略)
# docker container ps -a
// 查看最后一次运行的容器(命令中的container可省略)
# docker container ps -l
// 查看停止的容器(命令中的container可省略)
# docker container ps -f status=exited
8.2 容器的创建、进入
/** 守护式容器的创建:docker run [OPTIONS] 镜像名:标签名
* 例如解析:docker run -i -t -d -p 8081:8080 --name=tom tomcat
* OPTIONS:
* -i:表示交互式运行容器(就是创建容器后,马上会启动容器,并进入容器),通常与 -t 同时使用.
* -t:启动后会进入其容器命令行,通常与 -i 同时使用;加入 -it 二个参数后,容器创建就能登录进去,即分配一个伪终端.
* -d:后台运行
* -p:表示端口映射,格式为: -p 宿主机端口:容器端口
* 8081:8080 前面的8081是主机端口,8080是容器的端口
* -v:表示目录映射,格式为: -v 宿主机目录:容器目录
* --name: 为创建的容器指定一个名称
*/
# docker run --name=tom -d -p 8081:8080 tomcat
/** 进入容器(必须是启动的容器) docker container exec -it tom /bin/bash
* -i:以交互模式运行容器
* -t:分配一个伪终端,即命令行,通常-it组合来使用
* -v:指定挂载主机目录到容器目录,默认为rw读写模式,ro表示只读
* 退出容器:exit
*/
# docker container exec -it {容器名/容器id} /bin/bash
8.3 容器的运行、停止、删除
// 停止正在运行的一个容器
# docker stop {容器名/容器id}
// 停止正在运行的全部容器
# docker stop `docker ps -a -q`
// 启动已运行过的一个容器
# docker start {容器名/容器id}
// 启动已运行过的全部容器
# docker start `docker ps -a -q`
// 删除一个容器(命令中的container可省略)
# docker container rm -f {容器名/容器id}
// 删除所有的容器(命令中的container可省略)
# docker container rm -f `docker ps -a -q`
// 直接关掉一个容器(像电脑直接按主机上的关机键一样的操作)
# docker kill {容器名/容器id}
8.4容器的日志查看、详细信息
// 查看容器日志,到当前打印位置退出
# docker logs {容器名/容器id}
// 进入日志,不退出,等待继续打印
# docker logs -f {容器名/容器id}
// 查看容器详细信息 可查看容器ID、IP、网关、挂载目录等等...
# docker container inspect {容器名/容器id}
[
{
"Id": "7817dea82916fc2571140909393ac44b7b74943e51451f3fcdfb886c06c5387e", // 容器id
"Created": "2020-06-23T08:08:50.632762561Z", // 查看创建时间
"State": { // 查看详细状态
"Status": "running",
"Running": true,
"Dead": false,
"Pid": 22371
},
"HostConfig": {
"Binds": [ // 查看挂载的目录
"/home/xhx/dockerApp/docker_tomcat/xhx/hello.txt:/usr/local/tomcat/xhx/hello.txt:ro"
]
},
"Networks": { // 查看ip和网关ip
"bridge": {
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
}
}
}
]
9. 配置文件 / 数据 / 日志挂载
说明: 镜像在容器中,如果要改动相应的配置文件就要到容器中,利用挂载功能先把配置文件拷贝到主机中,改动主机中的配置文件,修改容器中的文件。 每次修改了配置文件就要重启容器重新挂载 。
9.1 宿主机和容器文件的拷贝
-
主机建立相应的文件夹(配置文件的文件夹 / 数据的文件夹 / 日志的文件夹)
-
拷贝容器的文件到主机中
// docker cp 主机文件路径 容器ID或容器名:容器路径 (!主机中文件拷贝到容器中)
# docker cp /home/xhx/dockerApp/docker_tomcat tomcat9:/usr/local/tomcat/conf/server.xml
// docker cp 容器ID或容器名:容器路径 主机文件路径 (!容器中文件拷贝到主机中)
# docker cp tomcat9:/usr/local/tomcat/conf/server.xml /home/xhx/dockerApp/docker_tomcat
9.2 容器启动挂载文件
容器启动时:加上-v:表示目录映射,格式为: -v 宿主机目录:容器目录(启动时可一次挂载多个文件)
//docker run -itd [-p 8081:8080][-v 主机目录:容器目录][-v 主机目录1:容器目录1] [--name=tomcat] {镜像:TAG}
# docker run -itd -p 8088:8089 -v /home/xhx/dockerApp/docker_tomcat/server.xml/:/usr/local/tomcat/conf/server.xml/ --name=tomcat tomcat
启动容器后查看日志:
# docker logs {容器名/容器ID}
! 挂载文件出现权限不足:
// 挂载文件权限不足 使用:--privileged=true
# docker run --privileged=true -itd -p 8088:8089 -v /home/xhx/dockerApp/docker_tomcat/server.xml/:/usr/local/tomcat/conf/server.xml/ --name=tomcat tomcat
操作:1. 修改宿主机文件后
2. 重新启动容器使用 -v 挂载(主机修改的文件,docker自动挂载到docker容器中了)
9.3 挂载目录(文件夹)
// 可以做一个目录的映射,如果目录中文件夹在宿主机有改动,docker容器就会自动更新
// docker run -itd -v {主机文件夹路径:容器文件夹路径}
# docker run -itd -v /home/xhx/tomcat/xhx/:/usr/local/tomcat/xhx/ --name=tomcat tomcat
9.4 挂载文件权限只读(Read-Only)
docker容器中的文件是只读权限,不给写入,但是主机的文件还是可以正常操作
// docker run -itd -v {主机文件夹路径:容器文件夹路径:ro}
# docker run -itd -v /home/xhx/tomcat/xhx/hello.txt:/usr/local/tomcat/xhx/hello.txt:ro tomcat
10. Docker实战
!使用虚拟机安装切要在Windows访问Mysql需要使用NAT模式做端口映射,或者关掉防火墙。
10.1 MySQL部署
// 拉取MySQL镜像
# docker pull mysql:5.7
// 创建mysql容器:-e MYSQL_ROOT_PASSWORD=123456 mysql需要设置密码
# docker run -itd -p 3307:3306 --name=mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
// 进入容器
# docker exec -it {容器ID/容器名称} /bin/bash
// 容器内操作mysql数据库
# mysql -u root -p
10.2 Redis部署
// 拉取Redis最新镜像
# docker pull redis
// 创建redis容器
# docker run -itd -p 6380:6379 --name=redis redis
// 进入容器
# docker exec -it [容器ID/容器名称] /bin/bash
10.3 Tomcat部署WEB项目
// 拉取tomcat最新镜像
# docker pull tomcat
// 创建tomcat容器并把tomcat文件拷贝到主机路径下(将conf目录文件和webapps目录文件复制到主机一份,用于挂载)
# docker cp tomcat:/usr/local/tomcat/conf /home/xhx/dockerApp/docker_tomcat
# docker cp tomcat:/usr/local/tomcat/webapps /home/xhx/dockerApp/docker_tomcat
// 启动tomcat容器挂载 /conf和 /webapps目录挂载
# docker run --privileged=true -itd --name=tomcat -p 8080:8080 -v /home/xhx/dockerApp/docker_tomcat/webapps/:/usr/local/tomcat/webapps/ tomcat:9.0
// 将项目放在主机目录下的 /home/xhx/dockerApp/docker_tomcat/webapps中,如果修改配置文件直接在主机下的conf
# cd /home/xhx/dockerApp/docker_tomcat/
# ls
// 测试将一个新页面放入访问(主机目录/home/xhx/dockerApp/docker_tomcat/webapps/html/hello.html)
[webapps]# touch /html/hello.html
[html]# vim hello.html
// 直接访问:虚拟机ip:8080 查看是否部署成功(虚拟机记得开放端口或关闭防火墙)
192.168.136.128:8080/html/hello.html
10.3 RabbitMQ部署
// 拉取rabbitMQ镜像,但rabiitMQ是有管理页面的所以要拉取management版本
# docker pull rabbitmq:management
// 创建rabbitMQ容器,要做二个端口映射
# docker run -itd --name=rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management
// 测试是否启动成功:虚拟机ip:15672(虚拟机记得开放端口或关闭防火墙)
192.168.136.128:15672 guest guest
11. 上传、备份和迁移
11.1 容器保存为镜像传到镜像仓库上
11.1.1 上传到Docker Hub
构建镜像,上传到Docker Hub(需要有docker Hub账号)
// 1.将一个容器提交为一个新的镜像
// docker commit [-m="描述"] [-a="作者"] {容器名称/容器ID} {新镜像名称:版本号}
# docker commit -m="我的镜像redis" -a="xhx" redis myredis:1.0 或 docker commit redis myredis:1.0
// 2.登录到docker hub
# docker login
输出: Login Succeeded 字样登录成功
// 3. 给镜像打上tag标签(把这个镜像指定到一个docker hub账号上)
// docker tag {镜像名:版本号} {账户id +/+ 镜像名:版本号}
# docker tag myredis:1.0 xinghongxiang/myredis:1.0
# docker images // 查看准备推送的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
myredis 1.0 6daa4440e718 3 minutes ago 104 MB
xinghongxiang/myredis 1.0 6daa4440e718 3 minutes ago 104 MB
// 4.将打上tag的镜像推送的docker hub上
// docker push {打上tag的镜像包:tag版本}
# docker push xinghongxiang/myredis:1.0
11.1.2 上传到阿里云
11.1.2.1 推送镜像
登录阿里云:https://account.aliyun.com/login/login.htm?
配置镜像仓库
新增阿里镜像仓库
查看上传到阿里云镜像步骤
/* 推送镜像到ali云镜像仓库(每个人推送的地址都不一样,根据自己ali提示步骤进行)
* 登录到ali云镜像仓库,需要输入密码
*/
# docker login --username=lifeisalvxing registry.cn-hangzhou.aliyuncs.com
// 镜像ID:docker images 查看到的镜像id,镜像版本号可与当前镜像版本号不一致,已填写的推送到ali镜像仓库为主
# docker tag {镜像ID} registry.cn-hangzhou.aliyuncs.com/xhx-image/jdk:{镜像版本号}
// 推送到ali镜像仓库
# docker push registry.cn-hangzhou.aliyuncs.com/xhx-image/jdk:{镜像版本号}
例如:推送上面的jdk镜像到阿里云镜像仓库
查看推送到阿里云的镜像
11.1.2.2 拉取镜像
// 从阿里云拉取自己账号镜像
# docker pull registry.cn-hangzhou.aliyuncs.com/xhx-image/jdk:[镜像版本号]
11.2 备份镜像
11.2.1 镜像打成tar包
// 镜像打成tar包:docker save -o {xxx.tar} {镜像名称:tag版本}。打包生成在当前路径
# docker save -o myredis.tar myredis:1.0
# ls
11.2.1 tar包镜像解压
// tar包解压成镜像
# docker load -i myredis:1.0
# docker images
12. Dockerfile语法
Dockerfile用于构建一个新的Docker镜像的脚本文件,是由一系列命令和参数构成的脚本。
例如:运行java项目步骤:
1. java项目
2. maven build -> jar(maven将java项目构建成jar或war)
3. java -jar xxx.jar(运行项目)
则Dockerfile为:
-
构建新的镜像步骤:
- 编写Dockerfile文件 .
- 通过docker build命令生成新的镜像 .
- 通过docker run 命令运行 .
12.1. Dockerfile文件
# 基础依赖镜像
FROM scratch
# 镜像的一些描述或作者信息
MAINTAINER The CentOS Project
# 在基础镜像上又增加一个镜像
ADD centos-7-x86_64-docker.tar.xz /
# 标签说明
LABEL org label-schema.schema-version="1.0" \
org.label-schema.name="CentOS Base Image" \
org.label-schema.build-date="20190305"
# 默认执行的命令,创建运行容器时最后会加上/bin/bash
# 所以创建容器时可不加 /bin/bash,既如:docker run -itd --name="centOS" centOS:7
CMD ["/bin/bash"]
12.2. Dockerfile常用指令
指令(大写的是保留字) | 作用 | 参考 |
---|---|---|
FROM image_name:tag | 基础镜像,基于哪个基础镜像启动构建流程. | dockerhub官网镜像版本 |
MAINTAINER user_name | 镜像的创建者姓名和邮箱地址等等… | centos6.8 |
COPY source_dir/file dest_dir/file | 和ADD相似,但是如果有压缩文件并不能解压. | centos6.8 |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压. | centos6.8 |
ENV key value | 设置环境变量(可以写多条). | tomcat7 |
RUN command | 是Dockerfile的核心部分(可以写多条),运行到当前行要执行的其它命令. | tomcat7 |
WORKDIR path_dir | 设置工作目录,当创建容器后,命令终端默认登录进来后所在的目录,未指定则为根目录 / | tomcat7 |
EXPOSE port | 当前对外暴露的端口号,使容器内的应用可以通过端口和外界交互 | tomcat7 |
CMD argumemnt | Dockerfile中可以有多个CMD ,但是只有最后一个会生效。在构建容器时,会被docker run 后面指定的参数覆盖. | tomcat7 |
ENTRYPOINT argument | 和CMD 相似,但是并不会被docker run指定的参数覆盖,而是追加参数 | |
VOLUME | 将宿主机文件夹挂载到容器中 | mysql |
12.3 Dockerfile构建镜像
构建镜像步骤:
-
书写
Dockerfile
文件 -
构建镜像
/* 构建一个镜像语法 * 注意后边的空格( )和点(.) 不要省略,点(.)表示当前目录 * -f 指定Dockerfile文件所在路径与文件名。如果未指定 -f 值,则找当前目录下名为Dockerfile的构建文件 */ # docker build [-f 路径/文件名] -t 生成的镜像名:标签名 .
-
启动镜像构建的容器
12.3.1 镜像文件Dockerfile的编写
12. 案例:构建一个jdk镜像
// 依赖jdk包所以要下载jdk tar包:https://www.oracle.com/java/technologies/javase-jdk14-downloads.html
# ls
jdk14_linux-x64.tar.gz
// 新建一个Dockerfile文件
# vim Dockerfile
# 来自基础镜像
FROM centos:7
# 指定镜像创建者信息
MAINTAINER xhx
# 切换工作目录
WORKDIR /usr/local
# 创建一个存放jdk的路径
RUN mkdir /usr/local/java
# 将jdk压缩包复制并解压到容器中
ADD jdk14_linux-x64.tar.gz /usr/local/java/
# 配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk-14.0.1
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
CMD ["/bin/bash"]
12.3.2 构建镜像
// 构建jdk14镜像
# docker build -t jdk:14 .
Successfully built
// 查看构建的镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jdk 14 81ae38856bc1 9 minutes ago 531 MB
// 启动jdk14镜像构建的容器
# docker run -itd --name=jdk14 -p 7777:7777 jdk:14
// 进入容器内查看是否构建成功
# docker exec -it jdk14 /bin/bash
[容器内] # java -version
java version "14.0.1" 2020-04-14
查看构建后镜像并验证是否构建成功且启动
13. 微服务自动部署到Doker
-
传统手动部署:
首先基于源码打包生成jar包(或war包)上传至虚拟机并拷贝至JDK容器。
-
通过Maven插件自动部署;对于数量众多的微服务,手动部署无疑是非常麻烦的做法,并且容易出错。所以我们这里学习如何自动部署,这也是企业实际开发中经常使用的方法。
13.1 采用Maven插件自动部署微服务
镜像推送到阿里云镜像仓库 和 宿主机上
-
后面要在cmd命令行窗口使用
mvn
指令,所以要在本地配置Maven环境变量 >>> 自行百度配置查看是否配置成功:cmd命令窗口
-
修改Dokcer配置
2.1 修改宿主机的docker配置,让其docker服务可以远程访问,暴露docker服务端口号2375
# vim /lib/systemd/system/docker.service
在
ExecStart=
后添加配置 0.0.0.0代表所有ip,也可指定ip。-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
// 刷新配置,重启服务
# systemctl daemon-reload
# systemctl restart docker
验证是否生效(虚拟机关闭防火墙或者把端口开放暴露出来)
访问:http://ip:2375/version
例如:http://192.168.136.128:2375/version
-
在Maven的安装目录下的setting.xml文件中添加阿里云用户名和密码
(!!!可选步骤是否推送到阿里云镜像仓库,不推送下面的pom.xml中推送到阿里云镜像仓库就不用配置了)
修改文件路径:apache-maven-3.6.0\conf\setting.xml
<servers> <server> <!--maven的pom中可以根据这个id找到这个server节点配置 --> <id>docker-aliyun</id> <!--阿里注册的账号 --> <username>账号</username> <!--阿里注册的密码--> <password>密码</password> </server> </servers>
-
在微服务项目pom.xml增加插件配置
原文件路径: 微服务部署插件\docker-maven自动部署pom.xml
<build> <!-- 当前工程微服务的名称 最后生成的就是app.jar--> <finalName>app</finalName> <plugins> <!--maven基础依赖插件--> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.0.0</version> <!--生成镜像相关配置--> <configuration> <!-- 将forceTags设为true,这样就会覆盖构建相同标签的镜像 --> <forceTags>true</forceTags> <!-- 远程 docker 宿主机地址, 生成镜像到docker中 --> <dockerHost>http://192.168.136.128:2375</dockerHost> <!--内容是之前修改的maven的settings.xml配置文件中,server节点的id--> <serverId>docker-aliyun</serverId> <!-- 镜像名:阿里云镜像仓库地址 (1.从新建的仓库公网地址处复制 2. 从Registry中拉取镜像处复制此地址) ${project.artifactId}引用当前微服务工程名 (需要在阿里镜像仓库上面新建一个 ${project.artifactId}的仓库名称) ${project.version}引用当前微服务工程版本号 registry.cn-hangzhou.aliyuncs.com/mengxuegu/demo:0.0.1-SNAPSHOT --> <imageName> registry.cn-hangzhou.aliyuncs.com/xhx-image/${project.artifactId}:${project.version} </imageName> <!--基础镜像 像Dockerfile中的FROM--> <!--<baseImage>jdk:1.8</baseImage>--> <baseImage>java</baseImage> <!--类似于Dockerfile的ENTRYPOINT指令--> <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint> <resources> <resource> <!-- 指定打包的资源文件 --> <!-- 指定要复制的目录路径,这里是当前目录 --> <targetPath>/</targetPath> <!-- 指定要复制的根目录,这里是target目录 --> <directory>${project.build.directory}</directory> <!-- 这里指定最后生成的jar包 --> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> </plugins> </build>
-
在阿里云创建
${project.artifactId}
的仓库(也可不创建,会自动创建)
-
在CMD的命令提示符下(或Idea下的终端Terminal,按着项目名拖到里面即可进入当前项目路径下 ), 进入到微服务项目的工程所在目录,输入以下命令进行打包和上传镜像
// mvn clean 打包 构建镜像 推送 # mvn clean package docker:build -DpushImage
查看你推送到阿里云镜像仓库的镜像
docker服务器的宿主机上
把此镜像启动成一个容器,(别忘了开放宿主机的8081端口)
然后访问
13.2 用Dockerfile文件部署微服务(例)
#基础镜像为openjdk:8u242-jdk
FROM openjdk:8u242-jdk
#签名
MAINTAINER author "author@honeycombtech.com"
RUN rm -rf /home/honeycombtech/demo*
# 添加jar
ADD ./demo.jar /opt/honeycombtech/demo/demo.jar
# 添加自定义文件
COPY /customfile /opt/honeycombtech/demo/customfile
# 映射日志目录
VOLUME ["/home/honeycombtech/logs/demo","/home/honeycombtech/logs/demo"]
# 暴露端口,自定义
EXPOSE 18090
# 默认工作目录
WORKDIR /opt/honeycombtech/demo/
# 启动命令
CMD ["java", "-Xms256m", "-Xmx512m", "-Xss256k", "-jar", "demo.jar"]