Dockerfile

2023-05-16

docker安装

yum install -y yum-utils device-mapper-persistent-data lvm2
curl -o /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum install docker-ce --nobest
vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://gqk8w9va.mirror.aliyuncs.com"],
  "graph":"/opt/mydocker"
}

docker工作目录

Dockerfile
dir/file
.dockerignore #排除文件

docker build (制作镜像)

dockerfile指令

FROM

FROM <repository>[:<tag>]
     <repository>@<digest>
     
FROM busybox:latest
MAINTAINER "wuxing"

LABEL 指定镜像元数据

LABEL <key>=<value> <key>=<value> <key>=<value> ...
LABEL maintainer="wuxing"

COPY 主机文件复制到docker镜像中

COPY  src ... dest
COPY  ["src",..."dest"]

src是目录,其内部文件和目录都复制,但src目录自身不会被复制
如果有多个src,则dest必须以/结尾

COPY index.html /data/web/html/
[root@k8s-master1 img1]# pwd
/root/img1
[root@k8s-master1 img1]# ls
Dockerfile  index.html
[root@k8s-master1 img1]# cat Dockerfile 
# Description: test image
FROM busybox:latest
MAINTAINER "wuxing"
#LABEL maintainer="wuxing"
COPY index.html /data/web/html/

[root@k8s-master1 img1]# docker build -t tinyhttpd:v0.1-1 ./
测试
[root@k8s-master1 img1]# docker run --name tinyweb1 --rm tinyhttpd:v0.1-1 cat /data/web/html/index.html
<h1>Busybox httpd server</h1>
[root@k8s-master1 img1]# ll
total 12
-rw-r--r--  1 root root  160 Sep 22 18:18 Dockerfile
-rw-r--r--  1 root root   30 Sep 22 17:53 index.html
drwxr-xr-x. 3 root root 4096 Sep  4 10:07 yum.repos.d
[root@k8s-master1 img1]# cat Dockerfile 
# Description: test image
FROM busybox:latest
MAINTAINER "wuxing"
#LABEL maintainer="wuxing"
COPY index.html /data/web/html/
COPY yum.repos.d /etc/yum.repos.d/

[root@k8s-master1 img1]# docker build -t tinyhttpd:v0.1-2 ./
测试
[root@k8s-master1 img1]# docker run --name tinyweb1 --rm tinyhttpd:v0.1-2 ls /etc/yum.repos.d/
CentOS-Base.repo
CentOS-Base.repo.off
CentOS-CR.repo
CentOS-Debuginfo.repo
CentOS-Media.repo
CentOS-Sources.repo
CentOS-Vault.repo
CentOS-fasttrack.repo
docker-ce.repo
epel-testing.repo
epel.repo
epel.repo.off
test

ADD 类似COPY ADD支持tar文件和url路径

ADD  src ... dest
ADD  ["src",..."dest"]

src为url且dest不以/结尾, 则src指定的文件被下载并直接创建为dest
dest以/结尾,则下载文件并保存为dest/filename

src为本地tar文件,则自动解压为一个目录;但通过url获取到的tar文件不会自动解压

ADD http://nginx.org/download/nginx-1.16.1.tar.gz /usr/local/src/
[root@k8s-master1 img1]# docker run --name tinyweb1 --rm tinyhttpd:v0.1-3 ls /usr/local/src/
nginx-1.16.1.tar.gz
ADD nginx-1.16.1.tar.gz /usr/local/src/
[root@k8s-master1 img1]# docker run --name tinyweb1 --rm tinyhttpd:v0.1-4 ls /usr/local/src/nginx-1.16.1
CHANGES
CHANGES.ru
LICENSE
README
auto
conf
configure
contrib
html
man
src

白手起家构建镜像

wget https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/centos/7/amd64/cloud/20220702_07%3A08/rootfs.tar.xz

vim Dockerfile

FROM scratch
ADD rootfs.tar.xz /
CMD ["/bin/bash"]

WORKDIR

为Dockerfile中所有的RUN CMD ENTRYPOINT COPY ADD设定工作目录
WORKDIR dirpath (相当于在容器中执行cd命令)

VOLUME

在镜像中创建一个挂载点目录,用于挂载主机上的卷或其它容器上的卷

VOLUME mountpoint
VOLUME ["mountpoint"]
VOLUME /data/mysql/

测试

docker run --name tinyweb1 --rm tinyhttpd:v0.1-5 mount
docker inspect tinyweb1

EXPOSE

指定容器监听端口

EXPOSE port[/protocol] [port[/protocol]...]
EXPOSE 11211/udp 11211/tcp

EXPOSE 80/tcp

测试

docker run --name tinyweb1 -P --rm tinyhttpd:v0.1-6 /bin/httpd -f -h /data/web/html

[root@k8s-master1 img1]# docker port tinyweb1 
80/tcp -> 0.0.0.0:32768

http://192.168.0.141:32768/

ENV

为镜像定义所需的环境变量,并可被Dockerfile文件中位于其后的其它指令(ENV ADD COPY等)调用

ENV key value
ENV key=value ...

cat Dockerfile

# Description: test image
FROM busybox:latest
MAINTAINER "wuxing"
#LABEL maintainer="wuxing"
ENV DOC_ROOT=/data/web/html/ \
    WEB_SERVER_PACKAGE="nginx-1.16.1"

COPY index.html ${DOC_ROOT:-/data/web/html/}
COPY yum.repos.d /etc/yum.repos.d/
#ADD http://nginx.org/download/nginx-1.16.1.tar.gz /usr/local/src/
ADD ${WEB_SERVER_PACKAGE}.tar.gz /usr/local/src/

VOLUME /data/mysql/

EXPOSE 80/tcp

测试

[root@k8s-master1 img1]# docker run --name tinyweb1 -P --rm tinyhttpd:v0.1-7 ls /usr/local/src/
nginx-1.16.1
[root@k8s-master1 img1]# docker run --name tinyweb1 -P --rm tinyhttpd:v0.1-7 ls /data/web/html
index.html
[root@k8s-master1 img1]# docker run --name tinyweb1 -P --rm tinyhttpd:v0.1-7 printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=8dc9429db08b
DOC_ROOT=/data/web/html/
WEB_SERVER_PACKAGE=nginx-1.16.1
HOME=/root
[root@k8s-master1 img1]# docker run --name tinyweb1 -P -e WEB_SERVER_PACKAGE="nginx-1.15.1" --rm tinyhttpd:v0.1-7 printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=0d004c6c23e1
WEB_SERVER_PACKAGE=nginx-1.15.1
DOC_ROOT=/data/web/html/
HOME=/root

Dockerfile

FROM harbor.uat.wuxingge.com.cn/uat/jenkins-slave-maven-centos7:v1
USER root
ADD Katalon_Studio_Linux_64-6.3.3.tar.gz /
ENV PATH /Katalon_Studio_Linux_64-6.3.3:$PATH
WORKDIR /Katalon_Studio_Linux_64-6.3.3

RUN

构建镜像时运行的命令

RUN command
RUN ["executable","param1","param2"]
RUN ["/bin/bash","-c","executable","param1"] #命令依赖shell特性使用

cat Dockerfile

# Description: test image
FROM busybox:latest
MAINTAINER "wuxing"
#LABEL maintainer="wuxing"
ENV DOC_ROOT=/data/web/html/ \
    WEB_SERVER_PACKAGE="nginx-1.16.1"

COPY index.html ${DOC_ROOT:-/data/web/html/}
COPY yum.repos.d /etc/yum.repos.d/
ADD http://nginx.org/download/${WEB_SERVER_PACKAGE}.tar.gz /usr/local/src/
#ADD ${WEB_SERVER_PACKAGE}.tar.gz /usr/local/src/

VOLUME /data/mysql/

EXPOSE 80/tcp

RUN cd /usr/local/src/ && \
    tar xf ${WEB_SERVER_PACKAGE}.tar.gz && \
    mv ${WEB_SERVER_PACKAGE} webserver
[root@k8s-master1 img1]# docker run --name tinyweb1 -P  --rm tinyhttpd:v0.1-8 ls /usr/local/src/
nginx-1.16.1.tar.gz
webserver

CMD

镜像启动容器时默认运行的命令
当其运行结束后,容器也将终止
CMD指定的命令可以被docker run的命令行选项覆盖
Dockerfile中可以存在多个CMD指令,但只有最后一个会生效

CMD command  #默认以shell(默认shell为 /bin/sh -c)子进程方式执行
CMD ["executable","param1","param2"]   #不以shell子进程方式执行
CMD ["param1","param2"]  #为ENTRYPOINT指令提供默认参数
[root@k8s-master1 img2]# cat Dockerfile 
FROM busybox
LABEL maintainer="wuxing" app="httpd"

ENV WEB_DOC_ROOT="/data/web/html/"

RUN mkdir -p ${WEB_DOC_ROOT} && \
    echo '<h1>Busybox httpd server.</h1>' > ${WEB_DOC_ROOT}/index.html

CMD /bin/httpd -f -h ${WEB_DOC_ROOT}
docker build -t tinyhttpd:v0.2-1 ./
docker run --name tinyweb2 -it --rm -P tinyhttpd:v0.2-1
[root@k8s-master1 img1]# docker exec -it tinyweb2 /bin/sh
/ # ps
PID   USER     TIME  COMMAND
    1 root      0:00 /bin/httpd -f -h /data/web/html/
   12 root      0:00 /bin/sh
   18 root      0:00 ps

cat Dockerfile

FROM busybox
LABEL maintainer="wuxing" app="httpd"

ENV WEB_DOC_ROOT="/data/web/html/"

RUN mkdir -p ${WEB_DOC_ROOT} && \
    echo '<h1>Busybox httpd server.</h1>' > ${WEB_DOC_ROOT}/index.html

#CMD /bin/httpd -f -h ${WEB_DOC_ROOT}
CMD ["/bin/sh","-c","/bin/httpd","-f","-h ${WEB_DOC_ROOT}"] 

ENTRYPOINT

1.类似CMD,为容器指定默认运行程序,使容器像一个单独的可执行程序
2.ENTRYPOINT启动的程序不会被docker run命令行指定的参数覆盖,这些命令行参数会被当作参数传递给ENTRYPOINT指定的程序

3.docker run命令的–entrypoint选项的参数可覆盖ENTRYPOINT指令指定的程序

docker run --name tinyweb2 -it  --rm -P --entrypoint "ls /data/web/html" tinyhttpd:v0.2-5

4.docker run命令传入的命令参数会覆盖CMD指令的内容并且附加到ENTRYPOINT命令最后做为其参数使用
5.Dockerfile文件中可以有多个ENTRYPOINT指令,但只有最后一个生效

ENTRYPOINT command
ENTRYPOINT ["executable","param1","param2"]

cat Dockerfile

FROM busybox
LABEL maintainer="wuxing" app="httpd"

ENV WEB_DOC_ROOT="/data/web/html/"

RUN mkdir -p ${WEB_DOC_ROOT} && \
    echo '<h1>Busybox httpd server.</h1>' > ${WEB_DOC_ROOT}/index.html

ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}

cat Dockerfile

FROM busybox
LABEL maintainer="wuxing" app="httpd"

ENV WEB_DOC_ROOT="/data/web/html/"

RUN mkdir -p ${WEB_DOC_ROOT} && \
    echo '<h1>Busybox httpd server.</h1>' > ${WEB_DOC_ROOT}/index.html

CMD ["/bin/httpd","-f","-h ${WEB_DOC_ROOT}"]
ENTRYPOINT ["/bin/sh","-c"]

测试

docker run --name tinyweb2 -it --rm  -P tinyhttpd:v0.2-7 "ls /data"
[root@k8s-master1 img3]# ll
total 12
-rw-r--r-- 1 root root 260 Sep 24 00:14 Dockerfile
-rwxr-xr-x 1 root root 182 Sep 23 23:56 entrypoint.sh
-rw-r--r-- 1 root root  19 Sep 23 23:54 index.html

cat Dockerfile

FROM nginx:alpine
LABEL maintainer="wuxing"
ENV NGX_DOC_ROOT="/data/web/html/"
ADD index.html ${NGX_DOC_ROOT}
ADD entrypoint.sh /bin/
RUN rm -f /etc/nginx/conf.d/default.conf
CMD ["/usr/sbin/nginx","-g","daemon off;"]
ENTRYPOINT ["/bin/entrypoint.sh"]

cat entrypoint.sh

#!/bin/sh
cat > /etc/nginx/conf.d/www.conf << EOF
server {
	server_name $HOSTNAME;
	listen ${PORT:-80};
	root ${NGX_DOC_ROOT:-/usr/share/nginx/html};
}
EOF

exec "$@"

构建镜像

docker build . -t mynginx:v1

启动容器

docker run --rm -p :8080 -e "HOSTNAME=www.wuxing.com" -e "PORT=8080" mynginx:v1

进入容器测试

/etc/nginx/conf.d # cat www.conf 
server {
	server_name www.wuxing.com;
	listen 8080;
	root /data/web/html/;
}

https://github.com/docker-library/mysql/tree/master/5.7

USER

用于指定运行镜像时或运行Dockerfile中任何 RUN CMD 或ENTRYPOINT指令指定的程序时的用户名或UID

USER UID|username

HEALTHCHECK

选项

--interval=...     (default 30s)
--timeout=...     (default  30s)
--start-period=...     (default  0s)  等待多长时间开始检查
--retries=...   (default  3)

检测返回结果
0 success
1 unhealthy
2 reserved (预留)

HEALTHCHECK --interval=5m  --timeout=3s CMD curl -f http://localhost/ || exit 1

cat Dockerfile

FROM nginx:1.14-alpine
LABEL maintainer="wuxing"

ENV NGX_DOC_ROOT="/data/web/html/"

ADD index.html ${NGX_DOC_ROOT}
ADD entrypoint.sh /bin/
RUN rm -f /etc/nginx/conf.d/default.conf

EXPOSE 80/tcp

HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}/

CMD ["/usr/sbin/nginx","-g","daemon off;"]
ENTRYPOINT ["/bin/entrypoint.sh"]

SHELL

指定默认shell

STOPSIGNAL

STOPSIGNAL signal

ARG

定义变量(只在build中使用), --build-arg varname=value

ARG name[=default value]

cat Dockerfile

FROM nginx:1.14-alpine

ARG author="wuxing"
LABEL maintainer="${author}"

ENV NGX_DOC_ROOT="/data/web/html/"

ADD index.html ${NGX_DOC_ROOT}
ADD entrypoint.sh /bin/
RUN rm -f /etc/nginx/conf.d/default.conf

EXPOSE 80/tcp

HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}/

CMD ["/usr/sbin/nginx","-g","daemon off;"]
ENTRYPOINT ["/bin/entrypoint.sh"]
docker build --build-arg author="xiadongzhi" -t myweb:v0.3-10 .

ONBUILD

在Dockerfile中定义一个触发器
Dockerfile中ONBUILD指令不会在构建镜像时执行,但基于此镜像再次构建镜像时会执行

ONBUILD不能自我嵌套,不会触发FROM和MAINTAINER指令

ONBUILD  <INSTRUCTION>

Dockerfile(带ONBUILD)

FROM nginx:1.14-alpine

ARG author="wuxing"
LABEL maintainer="${author}"

ENV NGX_DOC_ROOT="/data/web/html/"

ADD index.html ${NGX_DOC_ROOT}
ADD entrypoint.sh /bin/
RUN rm -f /etc/nginx/conf.d/default.conf

EXPOSE 80/tcp

HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}/

ONBUILD ADD http://nginx.org/download/nginx-1.16.1.tar.gz /usr/local/src/

CMD ["/usr/sbin/nginx","-g","daemon off;"]
ENTRYPOINT ["/bin/entrypoint.sh"]

构建镜像

docker build --build-arg author="xiadongzhi" -t myweb:v0.3-11 .

Dockerfile(基于上一个镜像)

FROM myweb:v0.3-11

RUN mkdir /tmp/test

继续构建镜像

docker build -t test:v0.1-1 .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM myweb:v0.3-11
# Executing 1 build trigger
Downloading [==================================================>]  1.033MB/1.033MB
 ---> fd7f84e22f95
Step 2/2 : RUN mkdir /tmp/test
 ---> Running in 972d8b183b44
Removing intermediate container 972d8b183b44
 ---> ff6325e943bf
Successfully built ff6325e943bf
Successfully tagged test:v0.1-1

测试

docker run --name test1 --rm test:v0.1-1 ls /usr/local/src/

nginx底包镜像制作

nginx.conf

worker_processes  4;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  102400;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;
    client_max_body_size 0;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

default.conf

    log_format  json  '{"@timestamp":"$time_iso8601",'
                      '"@version":"1",'
                      '"client":"$remote_addr",'
                      '"url":"$request_uri",'
                      '"status":"$status",'
                      '"domain":"$host",'
                      '"host":"$server_addr",'
                      '"size":$body_bytes_sent,'
                      '"responsetime":$request_time,'
                      '"referer": "$http_referer",'
                      '"ua": "$http_user_agent"'
                     '}';

server {
        listen       80;
        # 配置成实际的域名,每个虚拟主机的配置文件域名都相同
        #server_name  www.wuxingge.com;

        access_log   /var/log/nginx/access.log json;
        error_log    /var/log/nginx/error.log;

        location / {
            root   /usr/share/nginx/html/;
            index  index.html index.htm;
            try_files $uri $uri/ /index.html;
        }
    }

Dockerfile

FROM nginx:alpine
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
COPY default.conf /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80

jdk镜像

vim Dockerfile

FROM ubuntu:latest
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
ADD jdk-8u221-linux-x64.tar.gz /jdk/
ENV JAVA_HOME=/jdk/jdk1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
CMD java -version

jar包镜像

vim Dockerfile

FROM ascdc/jdk8
COPY blog-admin.jar /
ENTRYPOINT ["java","-jar","/blog-admin.jar"]

centos镜像支持中文

vim Dockerfile

FROM centos:7
ENV LANG=zh_CN.UTF-8 \
    LC_ALL=zh_CN.UTF-8
RUN sed -i '13'd /etc/yum.conf && \
    yum install -y kde-l10n-Chinese glibc-common

jenkins-slave-nodejs镜像

vim Dockerfile

FROM registry.cn-hangzhou.aliyuncs.com/wuxingge/jenkins-slave-nodejs-centos7:v4
USER root
RUN echo "root@123" | passwd --stdin root && unset NPM_CONFIG_PREFIX && export NVM_DIR="$HOME/.nvm"  && [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" && nvm install v14.19.1 && nvm use v14.19.1 && npm cache verify && npm config set registry https://registry.npm.taobao.org && npm install -g yarn
USER 1001

各种服务前台启动

# nginx
nginx -g "daemon off;"

# php
php-fpm -F --pid /run/php-fpm/php-fpm.pid -y /etc/php-fpm.conf

# MySQL
mysqld --basedir=/usr --user=mysql

# tomcat
catalina.sh run

# sshd
/usr/sbin/sshd -D
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dockerfile 的相关文章

随机推荐

  • 6S管理的24个常用工具、10大要点

    6S管理就是整理 xff08 SEIRI xff09 整顿 xff08 SEITON xff09 清扫 xff08 SEISO xff09 清洁 xff08 SEIKETSU xff09 素养 xff08 SHITSUKE xff09 安全
  • 二进制位运算

    http blog csdn net gzu imis article details 20078479 1 原码 反码 和 补码 二进制位元算包括按位与 按位或 按位异或 取反 左移以及右移这几种运算 xff0c 运算都使用补码 xff0
  • python中的pow()函数解释

    Python中pow xff0c 里面可以有两个或三个参数 xff0c 它们的意义是完全不同的 1 pow x y 这个是表示x的y次幂 gt gt gt pow 2 4 16 gt gt gt 2 pow x y z xff1a 这个是表
  • javascript中的显示和隐藏(display属性)

    lt DOCTYPE HTML gt lt html gt lt head gt lt meta http equiv 61 34 Content Type 34 content 61 34 text html charset 61 gb2
  • Python中的图像处理

    http www ituring com cn tupubarticle 2024 第 1 章 基本的图像操作和处理 本章讲解操作和处理图像的基础知识 xff0c 将通过大量示例介绍处理图像所需的 Python 工具包 xff0c 并介绍用
  • ubuntu中aptitude工具的意思

    aptitude xff1a xff08 Debian系统的包管理工具 xff09 aptitude与 apt get 一样 xff0c 是 Debian 及其衍生系统中功能极其强大的包管理工具 与 apt get 不同的是 xff0c a
  • 什么是微服务

    一 微服务介绍 1 什么是微服务 在介绍微服务时 xff0c 首先得先理解什么是微服务 xff0c 顾名思义 xff0c 微服务得从两个方面去理解 xff0c 什么是 34 微 34 什么是 34 服务 34 xff0c 微 狭义来讲就是体
  • 三、Docker:命令

    其他文章 xff1a 一 Docker xff1a 概述 二 Docker xff1a 安装 三 Docker xff1a 命令 四 Docker xff1a 可视化管理 五 Docker xff1a 镜像 xff08 image 六 Do
  • mysql group by 报错Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated c

    当使用group by的语句中 xff0c select后面跟的列 xff0c 在group by后面没有时 xff0c 会报以下错误 xff1a Expression 2 of SELECT list is not in GROUP BY
  • Opencv快速入门(C++版),新手向

    Opencv快速入门 C 43 43 版 xff09 前言1 图像的读取与显示所使用的API接口 xff1a 代码演示 xff1a 2 图像色彩空间转换所使用的API接口 xff1a 代码演示 xff1a 3 图像对象的创建与赋值所使用的A
  • 前台解析jwt token 前后端分离 ant design pro

    前言 在如今得环境下 xff0c 越来越多得项目采用微服务 xff0c 前后端分离项目 优点在于同时开发 xff0c 分开部署 缺点在于需要约定的太多 xff0c 导致前后端联调产生分歧 就标题而言 xff0c 解决前端antd 接收后台返
  • win10 双击启动nacos报错 Unable to start web server...... Unable to start embedded Tomcat

    1 遇到的问题 win10双击启动nacos报错 2 分析 从启动cmd开始查看 发现 启动模式为集群模式 定位成功 3 解决 修改startup中启动模式 重新启动 成功
  • IDEA 远程debugger SpringBoot项目 超赞!!!

    如题哦 xff0c 项目发布到服务器上后 xff0c 每天被不同的bug所困扰 强大的idea超出你的想象 xff0c 强大到可以远程debugger xff0c 就和在本地一样一样的 进入正题 前提概要 线上即服务器代码必须与本地一致 x
  • git提交时 # Please enter the commit message for your changes. Lines starting # with ‘#‘ will be ignored

    问题 xff1a Please enter the commit message for your changes Lines starting with 39 39 will be ignored and an empty message
  • canal 修改配置信息后监听不到mysql数据并报错can‘t find start position for example

    原由 xff1a 数据库地址变化 canal 需要修改监听 问题 xff1a 修改配置信息后重启canal 但并无监听到数据库信息变化 分析 xff1a canal 与数据库之间断层 xff0c 导致信息传输失败 解决 xff1a xff0
  • AI那点事儿

    从古至今 xff0c 改朝换代 一代崛起 xff0c 就标志着一代的灭亡 AI的兴起 xff0c 让无数程序梦想客死他乡 无论是学者还是技术科研者 xff0c 无一不在说 xff0c AI的时代到了 然而 xff0c 我们扣心自问 xff0
  • win7 配置JDK环境变量

    第一步 xff1a 安装jdk 8u101 windows x64 exe xff0c 路径为默认路径 xff0c 一直下一步直到完成安装 安装最好不要修改安装路径 xff0c 防止自己找不到 第二步 xff1a 设置环境变量 xff1a
  • 完整的搭建内网穿透ngrok详细教程(有图有真相)

    如上 网上找到的都是不稳定的 还不如自己搭建一个 去问度娘了 xff0c 发现了一堆 好吧 xff0c 那就动手开干吧 准备工作 xff08 其实也是硬性条件 xff09 xff1a 1 服务器一台 2 备案域名一个 xff08 好多都说可
  • lsyncd-实时同步(镜像)守护程序

    E mail 1226032602 64 qq com 官方文档 https axkibe github io lsyncd https github com axkibe lsyncd 简介 Lsyncd使用文件系统事件接口 xff08
  • Dockerfile

    docker安装 yum span class token function install span y yum utils device mapper persistent data lvm2 span class token func