| 命令 | 用途 |
|---|---|
| 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.0docker搭建私服
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 目录。
打标签:
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.1.160做相关设置,不使用https传输
将下面的代码放进去保存并退出。
vim /etc/sysconfig/docker 添加 "insecure-registries":["192.168.1.161: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"
]
}
再次上传即可
[root@node01 sysconfig]# docker push 192.168.36.138:5000/eureka:base
查看 http://192.168.36.13:5000/v2/eureka/tags/listspringBoot项目脚本启动
#!/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.shDockeFile带环境参数启动应用
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



