Docker构建JAVA环境镜像

1\ 需要提前下载软件包jdk和tomcat

[root@docker-master ~]# vim Dockerfile-Java
FROM centos:6
MAINTAINER gujiwork
ADD jdk-8u151-linux-x64.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_151
ADD apache-tomcat-7.0.82.tar.gz /usr/local
WORKDIR /usr/local/apache-tomcat-7.0.82
ENTRYPOINT ["bin/catalina.sh","run"]
#暴露8080端口
EXPOSE 8080

2\执行build之后便开始构建成镜像

[root@docker-master ~]# docker build -t tomcat:v1 -f ./Dockerfile-Java  .
Sending build context to Docker daemon  3.045GB
Step 1/8 : FROM centos:6
6: Pulling from library/centos
9bfcefca2b8d: Pull complete
Digest: sha256:573923afbed3faf8000ad6eb333ebeb1d46e753d3ae23a6f59b528c7e1531747
Status: Downloaded newer image for centos:6
 ---> 0cbf37812bff
Step 2/8 : MAINTAINER gujiwork
 ---> Running in 2205a6b1c70d
 ---> 807741f8ef42
Removing intermediate container 2205a6b1c70d
Step 3/8 : ADD jdk-8u151-linux-x64.tar.gz /usr/local
 ---> 617e8b4fa97d
Step 4/8 : ENV JAVA_HOME /usr/local/jdk1.8.0_151
 ---> Running in deded76bd1f4
 ---> bfe5b16b5dfb
Removing intermediate container deded76bd1f4
Step 5/8 : ADD apache-tomcat-7.0.82.tar.gz /usr/local
 ---> ad01015a58f5
Step 6/8 : WORKDIR /usr/local/tomcat
 ---> 70c90ddeb127
Removing intermediate container 385c8cafef5b
Step 7/8 : ENTRYPOINT bin/catalina.sh run
 ---> Running in fb186dfb8068
 ---> 0c9299e34658
Removing intermediate container fb186dfb8068
Step 8/8 : EXPOSE 8080
 ---> Running in 44161cdc051b
 ---> b0ca287e65ba
Removing intermediate container 44161cdc051b
Successfully built b0ca287e65ba
Successfully tagged tomcat:v1

3\可通过docker images查看构建的镜像

[root@docker-master ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              v1                  b0ca287e65ba        2 minutes ago       592MB
nginx               latest              568c4670fa80        2 weeks ago         109MB
centos              6                   0cbf37812bff        2 months ago        194MB
centos              latest              3fa822599e10        12 months ago       204MB

4\ 启动docker tomcat容器,使用宿主机IP访问页面进行测试.

[root@docker-master ~]# docker run -itd --name web01 -p 80:8080 tomcat:v1
2c4d214c8ce9aef03409d7e02a43ed10247480de22c3b9d9c31b4e8d73eca45f
[root@docker-master ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                 CREATED             STATUS              PORTS                  NAMES
2c4d214c8ce9        tomcat:v1           "bin/catalina.sh run"   29 seconds ago      Up 27 seconds       0.0.0.0:80->8080/tcp   web01
# 查看本机网卡IP地址
[root@docker-master ~]# ifconfig  ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.18.10  netmask 255.255.255.0  broadcast 172.18.18.255
        inet6 fe80::20c:29ff:fe80:de01  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:80:de:01  txqueuelen 1000  (Ethernet)
        RX packets 55747  bytes 72954144 (69.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 30192  bytes 2373785 (2.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Docker构建JAVA环境镜像

5\配置开启SSH远程登录,方便测试及开发进行相关的排错查看

[root@docker-master ~]# vim Dockerfile-Java-ssh
FROM centos:6
MAINTAINER gujiwork
ENV JAVA_HOME /usr/local/jdk1.8.0_151
ENV ROOT_PASSWORD 123456
ADD jdk-8u151-linux-x64.tar.gz /usr/local
ADD apache-tomcat-7.0.82.tar.gz /usr/local
COPY ./start.sh /usr/local/start.sh
RUN yum install -y openssh-server && \
    echo $ROOT_PASSWORD |passwd --stdin root && \
    ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key && \
    ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key && \
    echo 'UseDNS no' >> /etc/ssh/sshd_config && \
    sed -i -e '/pam_loginuid.so/d' /etc/pam.d/sshd && \
    chmod +x /usr/local/start.sh && \
    rm -rf /usr/local/apache-tomcat-7.0.82.tar.gz
WORKDIR /usr/local/apache-tomcat-7.0.82
ENTRYPOINT ["/usr/local/start.sh","run"]
#暴露8080和22端口
EXPOSE 8080
EXPOSE 22

6\start.sh脚本,用于启动容器内的多个服务

[root@docker-master ~]# vim start.sh
#!/bin/bash
TomcatDir="/usr/local/apache-tomcat-7.0.82"
cd $TomcatDir ; ./bin/startup.sh
/usr/sbin/sshd -D
tail -f /var/log/*

7\重新构建镜像,tag标记为tomcat:v2

[root@docker-master ~]# docker build -t tomcat:v2 -f Dockerfile-Java-ssh .
Sending build context to Docker daemon  3.045GB
Step 1/15 : FROM centos:6
 ---> 0cbf37812bff
Step 2/15 : MAINTAINER gujiwork
 ---> Using cache
 ---> 807741f8ef42
Step 3/15 : ENV ROOT_PASSWORD 123456
 ---> Running in b01f3ce7ae37
 ---> 47ec926ccf9c
Removing intermediate container b01f3ce7ae37
Step 4/15 : ADD jdk-8u151-linux-x64.tar.gz /usr/local
 ---> 33bb1bfe21ce
Step 5/15 : ENV JAVA_HOME /usr/local/jdk1.8.0_151
 ---> Running in 53d4f20f8a3e
 ---> 4589c805fe03
Removing intermediate container 53d4f20f8a3e
Step 6/15 : ADD apache-tomcat-7.0.82.tar.gz /usr/local
 ---> 2b9b81efe22c
Step 7/15 : WORKDIR /usr/local/apache-tomcat-7.0.82
 ---> 4e0132cba433
Removing intermediate container d3629c03c293
Step 8/15 : ENTRYPOINT bin/catalina.sh run
 ---> Running in 3149b8be9f3e
 ---> 4a0d49525705
Removing intermediate container 3149b8be9f3e
Step 9/15 : RUN yum install -y openssh-server
 ---> Running in 54d1c22da719
Loaded plugins: fastestmirror, ovl
Setting up Install Process
http://mirrors.njupt.edu.cn/centos/6.10/updates/x86_64/repodata/e38a3ccfa43be7ce9c19045799166dc3424cba6ca0f49b19d4c1b48707e7597f-primary.sqlite.bz2: [Errno 14] PYCURL ERROR 7 - "couldn't connect tohost"
Trying other mirror.
Resolving Dependencies
--> Running transaction check
---> Package openssh-server.x86_64 0:5.3p1-123.el6_9 will be installed
--> Processing Dependency: openssh = 5.3p1-123.el6_9 for package: openssh-server-5.3p1-123.el6_9.x86_64
--> Processing Dependency: /sbin/service for package: openssh-server-5.3p1-123.el6_9.x86_64
--> Processing Dependency: libwrap.so.0()(64bit) for package: openssh-server-5.3p1-123.el6_9.x86_64
--> Processing Dependency: libfipscheck.so.1()(64bit) for package: openssh-server-5.3p1-123.el6_9.x86_64
--> Running transaction check
---> Package fipscheck-lib.x86_64 0:1.2.0-7.el6 will be installed
--> Processing Dependency: /usr/bin/fipscheck for package: fipscheck-lib-1.2.0-7.el6.x86_64
---> Package initscripts.x86_64 0:9.03.61-1.el6.centos will be installed
--> Processing Dependency: util-linux-ng >= 2.16 for package: initscripts-9.03.61-1.el6.centos.x86_64
--> Processing Dependency: upstart >= 0.6.5-11 for package: initscripts-9.03.61-1.el6.centos.x86_64
--> Processing Dependency: udev >= 125-1 for package: initscripts-9.03.61-1.el6.centos.x86_64
--> Processing Dependency: sysvinit-tools >= 2.87-6 for package: initscripts-9.03.61-1.el6.centos.x86_64
--> Processing Dependency: plymouth for package: initscripts-9.03.61-1.el6.centos.x86_64
--> Processing Dependency: /sbin/pidof for package: initscripts-9.03.61-1.el6.centos.x86_64
--> Processing Dependency: /sbin/ip for package: initscripts-9.03.61-1.el6.centos.x86_64
--> Processing Dependency: /sbin/blkid for package: initscripts-9.03.61-1.el6.centos.x86_64
--> Processing Dependency: /sbin/arping for package: initscripts-9.03.61-1.el6.centos.x86_64
---> Package openssh.x86_64 0:5.3p1-123.el6_9 will be installed
---> Package tcp_wrappers-libs.x86_64 0:7.6-58.el6 will be installed
--> Running transaction check
---> Package fipscheck.x86_64 0:1.2.0-7.el6 will be installed
---> Package iproute.x86_64 0:2.6.32-57.el6 will be installed
--> Processing Dependency: iptables >= 1.4.5 for package: iproute-2.6.32-57.el6.x86_64
--> Processing Dependency: libxtables.so.4()(64bit) for package: iproute-2.6.32-57.el6.x86_64
---> Package iputils.x86_64 0:20071127-24.el6 will be installed
---> Package plymouth.x86_64 0:0.8.3-29.el6.centos will be installed
--> Processing Dependency: system-logos for package: plymouth-0.8.3-29.el6.centos.x86_64
--> Processing Dependency: libdrm_radeon.so.1()(64bit) for package: plymouth-0.8.3-29.el6.centos.x86_64
--> Processing Dependency: libdrm_nouveau.so.1()(64bit) for package: plymouth-0.8.3-29.el6.centos.x86_64
--> Processing Dependency: libdrm_intel.so.1()(64bit) for package: plymouth-0.8.3-29.el6.centos.x86_64
--> Processing Dependency: libdrm.so.2()(64bit) for package: plymouth-0.8.3-29.el6.centos.x86_64
---> Package sysvinit-tools.x86_64 0:2.87-6.dsf.el6 will be installed
---> Package udev.x86_64 0:147-2.73.el6_8.2 will be installed
--> Processing Dependency: hwdata for package: udev-147-2.73.el6_8.2.x86_64
---> Package upstart.x86_64 0:0.6.5-17.el6 will be installed
---> Package util-linux-ng.x86_64 0:2.17.2-12.28.el6_9.2 will be installed
--> Running transaction check
---> Package hwdata.noarch 0:0.233-20.1.el6 will be installed
---> Package iptables.x86_64 0:1.4.7-19.el6 will be installed
--> Processing Dependency: policycoreutils for package: iptables-1.4.7-19.el6.x86_64
---> Package libdrm.x86_64 0:2.4.65-2.el6 will be installed
--> Processing Dependency: libpciaccess.so.0()(64bit) for package: libdrm-2.4.65-2.el6.x86_64
---> Package redhat-logos.noarch 0:60.0.14-12.el6.centos will be installed
--> Running transaction check
---> Package libpciaccess.x86_64 0:0.13.4-1.el6 will be installed
---> Package policycoreutils.x86_64 0:2.0.83-30.1.el6_8 will be installed
--> Processing Dependency: libdbus-glib-1.so.2()(64bit) for package: policycoreutils-2.0.83-30.1.el6_8.x86_64
--> Running transaction check
---> Package dbus-glib.x86_64 0:0.86-6.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
 Package                Arch        Version                     Repository
                                                                           Size
================================================================================
Installing:
 openssh-server         x86_64      5.3p1-123.el6_9             base      329 k
Installing for dependencies:
 dbus-glib              x86_64      0.86-6.el6                  base      170 k
 fipscheck              x86_64      1.2.0-7.el6                 base       14 k
 fipscheck-lib          x86_64      1.2.0-7.el6                 base      8.3 k
 hwdata                 noarch      0.233-20.1.el6              base      1.4 M
 initscripts            x86_64      9.03.61-1.el6.centos        base      949 k
 iproute                x86_64      2.6.32-57.el6               base      386 k
 iptables               x86_64      1.4.7-19.el6                base      255 k
 iputils                x86_64      20071127-24.el6             base      121 k
 libdrm                 x86_64      2.4.65-2.el6                base      136 k
 libpciaccess           x86_64      0.13.4-1.el6                base       24 k
 openssh                x86_64      5.3p1-123.el6_9             base      277 k
 plymouth               x86_64      0.8.3-29.el6.centos         base       89 k
 policycoreutils        x86_64      2.0.83-30.1.el6_8           base      663 k
 redhat-logos           noarch      60.0.14-12.el6.centos       base       15 M
 sysvinit-tools         x86_64      2.87-6.dsf.el6              base       60 k
 tcp_wrappers-libs      x86_64      7.6-58.el6                  base       62 k
 udev                   x86_64      147-2.73.el6_8.2            base      358 k
 upstart                x86_64      0.6.5-17.el6                base      177 k
 util-linux-ng          x86_64      2.17.2-12.28.el6_9.2        base      1.6 M
Transaction Summary
================================================================================
Install      20 Package(s)
Total download size: 21 M
Installed size: 42 M
Downloading Packages:
--------------------------------------------------------------------------------
Total                                           7.3 MB/s |  21 MB     00:02
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Importing GPG key 0xC105B9DE:
 Userid : CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>
 Package: centos-release-6-10.el6.centos.12.3.x86_64 (@CentOS/6.10)
 From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : sysvinit-tools-2.87-6.dsf.el6.x86_64                        1/20
  Installing : hwdata-0.233-20.1.el6.noarch                                2/20
  Installing : libpciaccess-0.13.4-1.el6.x86_64                            3/20
  Installing : fipscheck-lib-1.2.0-7.el6.x86_64                            4/20
  Installing : fipscheck-1.2.0-7.el6.x86_64                                5/20
  Installing : dbus-glib-0.86-6.el6.x86_64                                 6/20
  Installing : redhat-logos-60.0.14-12.el6.centos.noarch                   7/20
  Installing : upstart-0.6.5-17.el6.x86_64                                 8/20
  Installing : policycoreutils-2.0.83-30.1.el6_8.x86_64                    9/20
  Installing : iptables-1.4.7-19.el6.x86_64                               10/20
  Installing : iproute-2.6.32-57.el6.x86_64                               11/20
  Installing : libdrm-2.4.65-2.el6.x86_64                                 12/20
  Installing : iputils-20071127-24.el6.x86_64                             13/20
  Installing : plymouth-0.8.3-29.el6.centos.x86_64                        14/20
  Installing : util-linux-ng-2.17.2-12.28.el6_9.2.x86_64                  15/20
install-info: No such file or directory for /usr/share/info/ipc.info
  Installing : initscripts-9.03.61-1.el6.centos.x86_64                    16/20
  Installing : udev-147-2.73.el6_8.2.x86_64                               17/20
  Installing : openssh-5.3p1-123.el6_9.x86_64                             18/20
  Installing : tcp_wrappers-libs-7.6-58.el6.x86_64                        19/20
  Installing : openssh-server-5.3p1-123.el6_9.x86_64                      20/20
  Verifying  : plymouth-0.8.3-29.el6.centos.x86_64                         1/20
  Verifying  : tcp_wrappers-libs-7.6-58.el6.x86_64                         2/20
  Verifying  : policycoreutils-2.0.83-30.1.el6_8.x86_64                    3/20
  Verifying  : fipscheck-1.2.0-7.el6.x86_64                                4/20
  Verifying  : upstart-0.6.5-17.el6.x86_64                                 5/20
  Verifying  : redhat-logos-60.0.14-12.el6.centos.noarch                   6/20
  Verifying  : udev-147-2.73.el6_8.2.x86_64                                7/20
  Verifying  : initscripts-9.03.61-1.el6.centos.x86_64                     8/20
  Verifying  : iptables-1.4.7-19.el6.x86_64                                9/20
  Verifying  : openssh-5.3p1-123.el6_9.x86_64                             10/20
  Verifying  : hwdata-0.233-20.1.el6.noarch                               11/20
  Verifying  : sysvinit-tools-2.87-6.dsf.el6.x86_64                       12/20
  Verifying  : util-linux-ng-2.17.2-12.28.el6_9.2.x86_64                  13/20
  Verifying  : iputils-20071127-24.el6.x86_64                             14/20
  Verifying  : libdrm-2.4.65-2.el6.x86_64                                 15/20
  Verifying  : dbus-glib-0.86-6.el6.x86_64                                16/20
  Verifying  : libpciaccess-0.13.4-1.el6.x86_64                           17/20
  Verifying  : openssh-server-5.3p1-123.el6_9.x86_64                      18/20
  Verifying  : iproute-2.6.32-57.el6.x86_64                               19/20
  Verifying  : fipscheck-lib-1.2.0-7.el6.x86_64                           20/20
Installed:
  openssh-server.x86_64 0:5.3p1-123.el6_9
Dependency Installed:
  dbus-glib.x86_64 0:0.86-6.el6
  fipscheck.x86_64 0:1.2.0-7.el6
  fipscheck-lib.x86_64 0:1.2.0-7.el6
  hwdata.noarch 0:0.233-20.1.el6
  initscripts.x86_64 0:9.03.61-1.el6.centos
  iproute.x86_64 0:2.6.32-57.el6
  iptables.x86_64 0:1.4.7-19.el6
  iputils.x86_64 0:20071127-24.el6
  libdrm.x86_64 0:2.4.65-2.el6
  libpciaccess.x86_64 0:0.13.4-1.el6
  openssh.x86_64 0:5.3p1-123.el6_9
  plymouth.x86_64 0:0.8.3-29.el6.centos
  policycoreutils.x86_64 0:2.0.83-30.1.el6_8
  redhat-logos.noarch 0:60.0.14-12.el6.centos
  sysvinit-tools.x86_64 0:2.87-6.dsf.el6
  tcp_wrappers-libs.x86_64 0:7.6-58.el6
  udev.x86_64 0:147-2.73.el6_8.2
  upstart.x86_64 0:0.6.5-17.el6
  util-linux-ng.x86_64 0:2.17.2-12.28.el6_9.2
Complete!
 ---> c488b880f48b
Removing intermediate container 54d1c22da719
Step 10/15 : RUN echo $ROOT_PASSWORD |passwd --stdin root
 ---> Running in 9906618c76ea
Changing password for user root.
passwd: all authentication tokens updated successfully.
 ---> 473b44862b8b
Removing intermediate container 9906618c76ea
Step 11/15 : RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
 ---> Running in 1ff47b661b7d
Generating public/private dsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
The key fingerprint is:
c7:17:da:ca:fc:9c:b4:d6:45:fb:db:b0:93:a3:23:75 root@1ff47b661b7d
The key's randomart image is:
+--[ DSA 1024]----+
|                 |
|                 |
|            .    |
|         . o .  .|
|        S + o  ..|
|         + o. E..|
|          +..o.o.|
|          .+oo=oo|
|           o*o.+o|
+-----------------+
Enter passphrase (empty for no passphrase): Enter same passphrase again:  ---> 956b3bf9ecc1
Removing intermediate container 1ff47b661b7d
Step 12/15 : RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
 ---> Running in 1a1c8be34244
Generating public/private rsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_rsa_key.
Your public key has been saved in /etc/ssh/ssh_host_rsa_key.pub.
The key fingerprint is:
fd:9c:57:31:62:06:0e:df:8d:af:60:c8:d7:75:77:f3 root@1a1c8be34244
The key's randomart image is:
+--[ RSA 2048]----+
|         . .     |
|          + o o  |
|           o * *+|
|        ... + + O|
|        So.+ . .E|
|          oo.... |
|            +..  |
|             .   |
|                 |
+-----------------+
Enter passphrase (empty for no passphrase): Enter same passphrase again:  ---> dd3bcb4ab9ae
Removing intermediate container 1a1c8be34244
Step 13/15 : CMD /usr/bin/sshd -D
 ---> Running in 09c2eca527ce
 ---> 02941cde6997
Removing intermediate container 09c2eca527ce
Step 14/15 : EXPOSE 8080
 ---> Running in f1f09cd58b26
 ---> c6cbbb630d02
Removing intermediate container f1f09cd58b26
Step 15/15 : EXPOSE 22
 ---> Running in 98ca940bb8c2
 ---> 1f569892a3d7
Removing intermediate container 98ca940bb8c2
Successfully built 1f569892a3d7
Successfully tagged tomcat:v2

8\启动容器 -p 表示映射到宿主机的固定端口, -P为随机端口

[root@docker-master ~]# docker run -itd --name web02 -p 80:8080 -p 2222:22 tomcat:v2
9cc734888d1f87bbbad4536c05dc1a62bae4f12ae8d88560067d1d89039f2ca1

9\ 测试远程连接是否可以登陆

Docker构建JAVA环境镜像

10\此时便可以通过宿主机映射的2222端口进行连接了.

Docker构建JAVA环境镜像

转载于:https://blog.51cto.com/11238548/2335392

<think>嗯,用户想用Docker构建Java应用的镜像,我需要一步一步来指导。首先,用户可能已经有一个Java项目,比如Spring Boot的Jar包。我需要告诉他如何准备Dockerfile,然后构建镜像。 首先,Dockerfile的基础镜像选择很重要。根据引用[1]、[2]、[3]中的例子,常见的是使用OpenJDK或者Java的官方镜像。比如FROM openjdk:8或者java:8。不过现在可能更推荐用较新的版本,比如OpenJDK 11,如引用[3]提到的。需要提醒用户根据自己项目的JDK版本选择合适的基础镜像。 然后,设置环境变量和时区,引用[1]里配置了LANG、TZ等,这可能对日志和系统时间有帮助。用户可能需要设置这些,尤其是时区设为Asia/Shanghai,避免容器内时间不对。 接着是工作目录和复制文件。WORKDIR /app,然后把本地的jar包复制进去,比如COPY .jar /app/。但要注意用户的项目结构,可能需要更具体的路径。例如,引用[2]中的例子是ADD jar包到容器,并指定入口点。 暴露端口EXPOSE 8080,这里要确认用户的应用端口是否一致,如果不一致需要修改。 启动命令是ENTRYPOINT或者CMD,运行java -jar。需要确保jar包的名字和路径正确,比如引用[1]中的layne-docker.jar,用户需要替换成自己的jar文件名。 构建镜像的命令是docker build -t,注意标签和Dockerfile的位置。引用[1]和[2]都用了不同的例子,需要统一说明,比如使用-f指定Dockerfile,或者默认当前目录的Dockerfile。 可能还需要提到多阶段构建,但引用里没提到,不过对于优化镜像大小可能有帮助。比如先用Maven镜像构建,再复制jar到运行时镜像,这样可以减少层数和依赖。 另外,用户可能会遇到构建上下文的问题,比如Dockerfile和jar包的位置是否正确。COPY命令的相对路径是相对于构建上下文的,所以需要确保文件在正确的位置。 还有,镜像标签的命名规范,建议使用小写和版本号,如引用[1]中的layne-docker-test:1.0。提醒用户遵循命名最佳实践。 最后,验证镜像是否构建成功,运行容器测试。比如docker run -p 8080:8080镜像名,检查应用是否正常启动。 可能还需要提到优化,比如.dockerignore文件,避免不必要的文件被打进镜像,减少大小。 总结步骤应该是:准备Dockerfile,构建镜像,运行测试。过程中需要确保基础镜像、文件复制、启动命令正确,并处理常见的配置如时区、端口等。</think>### 分步指南:使用Docker构建Java应用镜像 #### 一、准备基础文件 1. **Java应用打包** 确保项目已编译为可执行的JAR包(如`app.jar`),推荐使用Maven/Gradle构建工具生成。例如Spring Boot项目可通过`mvn clean package`生成位于`target/`目录的JAR文件。 2. **编写Dockerfile** 在JAR包同级目录创建`Dockerfile`文件,内容如下: ```dockerfile # 选择基础镜像(根据项目JDK版本选择) FROM openjdk:11-jre-slim # 设置时区与环境变量(解决中文乱码问题) ENV TZ=Asia/Shanghai \ LANG=zh_CN.UTF-8 RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 设置工作目录并复制JAR包 WORKDIR /app COPY target/app.jar ./app.jar # 暴露端口(与应用端口一致) EXPOSE 8080 # 启动命令 ENTRYPOINT ["java", "-jar", "app.jar"] ``` #### 二、构建镜像 1. **上传文件到服务器** 将`Dockerfile`和`app.jar`上传至具备Docker环境的服务器(推荐使用`scp`或SFTP工具)。 2. **执行构建命令** 在文件所在目录运行: ```bash docker build -t java-app:1.0 . ``` - `-t`:指定镜像名称与标签(格式:`name:tag`) - `.`:表示Dockerfile位于当前目录 #### 三、验证与运行 1. **查看镜像列表** ```bash docker images | grep java-app ``` 2. **启动容器** ```bash docker run -d -p 8080:8080 --name my-java-app java-app:1.0 ``` - `-d`:后台运行 - `-p`:端口映射(主机端口:容器端口) 3. **查看日志** ```bash docker logs -f my-java-app ``` #### 四、高级优化(可选) 1. **多阶段构建** 减少镜像体积,分离编译与运行环境: ```dockerfile # 第一阶段:使用Maven构建 FROM maven:3.8.6 AS build COPY src /app/src COPY pom.xml /app RUN mvn -f /app/pom.xml clean package # 第二阶段:仅保留运行时 FROM openjdk:11-jre-slim COPY --from=build /app/target/app.jar /app.jar ENTRYPOINT ["java", "-jar", "app.jar"] ``` 2. **使用`.dockerignore`** 创建`.dockerignore`文件,忽略无关文件: ``` *.git *.iml target/*.tmp ``` ### 常见问题解决 - **时区问题**:若容器内时间错误,检查`TZ`环境变量是否设置为`Asia/Shanghai`[^1]。 - **内存限制**:添加JVM参数调整内存,例如: ```dockerfile ENTRYPOINT ["java", "-Xmx512m", "-jar", "app.jar"] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值