DockerFile
命令 | 用途 |
---|---|
FROM | 基础镜像文件 |
RUN | 构建镜像阶段执行命令 |
ADD | 添加文件,从src目录复制文件到容器的dest,其中 src可以是 Dockerfile所在目录的相对路径,也可以是一个 URL,还可以是一个压缩包 |
COPY | 拷贝文件,和ADD命令类似,但不支持URL和压缩包 |
CMD | 容器启动后执行命令 |
EXPOSE | 声明容器在运行时对外提供的服务端口 |
WORKDIR | 指定容器工作路径 |
ENV | 指定环境变量 |
ENTRYPINT | 容器入口, ENTRYPOINT和 CMD指令的目的一样,都是指定 Docker容器启动时执行的命令,可多次设置,但只有最后一个有效。 |
USER | 该指令用于设置启动镜像时的用户或者 UID,写在该指令后的 RUN、 CMD以及 ENTRYPOINT指令都将使用该用户执行命令。 |
VOLUME | 指定挂载点,该指令使容器中的一个目录具有持久化存储的功能,该目录可被容器本身使用,也可共享给其他容器。当容器中的应用有持久化数据的需求时可以在 Dockerfile中使用该指令。格式为: VOLUME[“/data”]。 |
注意:RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;CMD命令则是在容器启动后执行。另外,一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令。
注意,指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令。
# 基于哪个镜像
From java:8
# 复制文件到容器
ADD microservice-eureka-server-0.0.1-SNAPSHOT.jar /app.jar
# 声明需要暴露的端口
EXPOSE 8761
# 配置容器启动后执行的命令
ENTRYPOINT java ${JAVA_OPTS} ‐jar /app.jar
# 格式: docker build -t 镜像名称:标签 Dockerfile的相对位置
在这里,使用-t选项指定了镜像的标签。执行该命令后,终端将会输出如下的内容
docker build -t eureka-images:1.0 -f docker/DockerFile .
docker build -t eureka-images:1.0 .
启动镜像,加-d可在后台启动
docker run ‐d ‐p 8761:8761 microservice‐eureka‐server:0.0.1
使用 -v 可以挂载一个主机上的目录到容器的目录
docker run ‐d ‐p 8761:8761 ‐v /log:/container‐log eureka-images:1.0
加上JVM参数:
# ‐‐cap‐add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo,jmap这些命令,如果不需要在容器里执 行这些命令可以不加
docker run -e JAVA_OPTS='-Xms1028M -Xmx1028M -Xmn512M -Xss512K -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M' --cap-add=SYS_PTRACE -d -p 8761:8761 --name eureka eureka-images:1.0
将微服务镜像发布到远程镜像仓库
我们制作好了微服务镜像,一般需要发布到镜像仓库供别人使用,我们可以选择自建镜像仓库,也可以直接使用docker官方镜像仓库,这里我们选择docker官方镜像仓库:Docker Hub
首先,我们需要在docke官方镜像仓库里注册一个账号
然后,在linux服务器上用docker login命令登录镜像仓库
[root@node01 k8s]# docker login
要把镜像推送到镜像仓库,需要将镜像前面加个分组名,执行如下命令修改镜像名字,需要将镜像前面加个分组名(一般就是docker hub的账户名),执行如下命令修改镜像名字
docker tag fairy-images 用户名/fairy-images:1.0
最后将镜像推送到远程仓库
docker push 用户名/fairy-images:1.0
之后就可以登录docker查看推送的镜像
denied: requested access to the resource is denied
因为要求 tag 必须是 hub 仓库的用户名才行。
docker tag fairy-images 用户名/fairy-images:1.0
docker搭建私服
1.安装docker pull registry,官网上截止目前的版本是V2
启动registry
docker run -itd -v /mydata/docker:/var/lib/registry \
-p 5000:5000 --restart=always --name registry registry:latest
这将使用官方的 registry 镜像来启动私有仓库。
默认情况下,仓库会被创建在容器的 /var/lib/registry 目录下。你可以通过 -v 参数来将镜像文件存放在本地的指定路径,例如下面的例子将上传的镜像放到本地的 /mydata/docker 目录。
http://192.168.36.139:5000/v2/
出现 {} 表示搭建成功
打标签:
docker tag cc304d806073 192.168.36.138:5000/eureka:base
push出错
[root@node01 sysconfig]# docker push 192.168.36.138:5000/eureka:base
The push refers to repository [192.168.36.138:5000/eureka]
Get https://192.168.36.138:5000/v2/: http: server gave HTTP response to HTTPS client
原因是docker私有仓库服务器,默认是基于https传输的,所以我们需要在客户端192.168.36.138做相关设置,不使用https传输
将下面的代码放进去保存并退出。
vi /etc/docker/daemon.json
添加
"insecure-registries":["192.168.36.138:5000"]
最终如下所示:
[root@node01 nginx]# cat /etc/sysconfig/docker
{
"registry-mirrors": ["https://oqx1npiz.mirror.aliyuncs.com"],
"registry-mirror": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
],
"insecure-registries": [
"192.168.36.138:5000"
]
多个配置, "192.168.36.138:5000","192.168.36.139:5000"
}
再次上传即可
[root@node01 sysconfig]# docker push 192.168.36.138:5000/eureka:base
查看 http://192.168.36.13:5000/v2/eureka/tags/list
springBoot项目脚本启动
#!/bin/bash
APPNAME=fairy-images-1.0.jar
LOG_FILE=console.log
export JAVA_HOME
export JAVA="$JAVA_HOME/bin/java"
JAVA_OPT="${JAVA_OPT} -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./java-frontend.hprof \
-Dspring.logging.path=./logs \
-Dfile.encoding=UTF-8 \
-Dserver.servlet.context-path=/fairy-images \
-Dserver.port=8081
-Dspring.datasource.type=com.alibaba.druid.pool.DruidDataSource
-Dspring.datasource.druid.username=root
-Dspring.datasource.druid.password=root
-Dspring.datasource.druid.url=jdbc:mysql://node01:33306/fairy?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
-Dspring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver"
echo $JAVA $JAVA_OPT $APPNAME
$JAVA $JAVA_OPT -jar $APPNAME >$LOG_FILE 2>&1 &
sh start.sh
DockeFile带环境参数启动应用
Dockerfile文件
FROM openjdk:latest
MAINTAINER docker部署发布SpringBoot项目
LABEL name="fiary-image镜像" version="1.0" author="lulu"
COPY fairy-images-1.0.jar /data/fairy-images-1.0.jar
WORKDIR /data/java
ENV JAVA_OPTS ""
ADD start.sh /data/start.sh
RUN echo 'JAVA_OPTS=' $JAVA_OPTS
CMD sh /data/start.sh $JAVA_OPTS
启动脚本命令
#!/bin/bash
JAVA_OPTS=$*
echo '入参参数:' $JAVA_OPTS
java $JAVA_OPTS -jar /data/fairy-images-1.0.jar
docker启动
docker run --name fairy-images -d \
-e JAVA_OPTS="-Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./java-frontend.hprof \
-Dserver.port=8081" -p 8081:8081 fairy-images