Docker Linux CentOS

版本:19.03.5

Dockerfile文件是用来构建镜像的文本文件。

Docker 构建镜像不是在客户端进行的,是将 Dockerfile 所在目录整个上传到 Docker 守护进程,由 Docker 守护进程进行制作。Docker 的客户端和守护进程可以不在同一台主机上。

(也可以使用 # docker commit 根据已有容器制作镜像)


关键字(所有关键字都需要大写):

FROM 指定基础镜像,定制的镜像都是基于 FROM 的镜像

MAINTAINER 作者

RUN 用于(docker build)执行后面跟着的命令行命令。

    注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。多条指令推荐使用&&批次执行

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
	&& mkdir ~/weblogs/

CMD 指定容器启动过程中(docker run)需要运行的命令

    CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。

    注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。

ENTRYPOINT 和CMD类似,单参数有不会被docker run的参数覆盖。

    但是, 如果运行 docker run 时使用了 --entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序。

    注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

COPY 复制指令,将宿主机中文件或者目录复制到容器里指定路径
ADD 将宿主机的文件复制到容器指定路径,并且解压。
ENV 设置环境变量
ARG 构建参数
VOLUME 定义匿名数据卷。
EXPOSE 声明端口
WORKDIR 指定工作目录
USER 用于指定执行后续命令的用户和用户组
HEALTHCHECK 用于指定某个程序或者指令来监控 docker 容器服务的运行状态。
ONBUILD 用于延迟构建命令的执行。



制作 Oracle jdk 1.8.0_162 镜像

已准备好 jdk-8u162-linux-x64.tar.gz 安装包。上传到root目录下。


创建镜像工作目录

# mkdir oracle-jdk-8u162
将jdk安装包复制或移动到镜像目录中
# cp jdk-8u162-linux-x64.tar.gz ./oracle-jdk-8u162/jdk-8u162-linux-x64.tar.gz
# ll ./oracle-jdk-8u162/
total 185368
-rw-r--r--. 1 root root 189815615 Dec 26 07:46 jdk-8u162-linux-x64.tar.gz
进入 oracle-jdk-8u162/ 创建Dockerfile文件
# vim Dockerfile

FROM centos:centos7
MAINTAINER miselehe
WORKDIR /usr/lib/java
ENV JAVA_HOME /usr/lib/java/jdk1.8.0_162
ENV PATH $JAVA_HOME/bin:$PATH
ADD jdk-8u162-linux-x64.tar.gz /usr/lib/java
CMD ["java","-version"]
构建镜像
# docker build -t oracle-jdk-8u162 .
Sending build context to Docker daemon  189.8MB
Step 1/7 : FROM centos:centos7
centos7: Pulling from library/centos
ab5ef0e58194: Pull complete 
Digest: sha256:4a701376d03f6b39b8c2a8f4a8e499441b0d567f9ab9d58e4991de4472fb813c
Status: Downloaded newer image for centos:centos7
 ---> 5e35e350aded
Step 2/7 : MAINTAINER miselehe
 ---> Running in 226e8e691c66
Removing intermediate container 226e8e691c66
 ---> 67da3c846f41
Step 3/7 : WORKDIR /usr/lib/java
 ---> Running in 86b74fa94f67
Removing intermediate container 86b74fa94f67
 ---> 96bec266299e
Step 4/7 : ENV JAVA_HOME /usr/lib/java/jdk1.8.0_162
 ---> Running in 9308bc4a572b
Removing intermediate container 9308bc4a572b
 ---> bf2a0d1d6164
Step 5/7 : ENV PATH $JAVA_HOME/bin:$PATH
 ---> Running in ebfb1482ca5b
Removing intermediate container ebfb1482ca5b
 ---> 674a4a675d74
Step 6/7 : ADD jdk-8u162-linux-x64.tar.gz /usr/lib/java
 ---> c9c0996f3663
Step 7/7 : CMD ["java","-version"]
 ---> Running in 0cf32f567c47
Removing intermediate container 0cf32f567c47
 ---> 0edb614a6f1e
Successfully built 0edb614a6f1e
Successfully tagged oracle-jdk-8u162:latest
查看镜像
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
oracle-jdk-8u162    latest              0edb614a6f1e        16 seconds ago      588MB
tomcat              latest              6fa48e047721        12 days ago         507MB
centos              centos7             5e35e350aded        6 weeks ago         203MB
hello-world         latest              fce289e99eb9        11 months ago       1.84kB
根据镜像 创建并运行容器
# docker run --name oracle-jdk8 0edb614a6f1e
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)


构建 tomcat8.5.31构建镜像并使用上面创建的orcale jdk镜像

过程和jdk类似


# mkdir apache-tomcat8.5.31
# cp apache-tomcat-8.5.31.tar.gz ./apache-tomcat8.5.31/apache-tomcat-8.5.31.tar.gz
进入 apache-tomcat8.5.31/ 创建Dockerfile文件
# vim Dockerfile

FROM oracle-jdk-8u162
MAINTAINER miselehe
WORKDIR /usr/lib/tomcat
ENV CATALINA_HOME /usr/lib/tomcat/apache-tomcat-8.5.31
ENV PATH $CATALINA_HOME/bin:$PATH
ADD apache-tomcat-8.5.31.tar.gz /usr/lib/tomcat
EXPOSE 8080
CMD ["catalina.sh","run"]
构建镜像
# docker build -t apache-tomcat8.5.31 .
Sending build context to Docker daemon  9.555MB
Step 1/8 : FROM oracle-jdk-8u162
 ---> 0edb614a6f1e
Step 2/8 : MAINTAINER miselehe
 ---> Running in bfd4c9c3d751
Removing intermediate container bfd4c9c3d751
 ---> 65ddc20a8b20
Step 3/8 : WORKDIR /usr/lib/tomcat
 ---> Running in d650db1ef49d
Removing intermediate container d650db1ef49d
 ---> fe4e8ca1ed95
Step 4/8 : ENV CATALINA_HOME /usr/lib/tomcat/apache-tomcat-8.5.31
 ---> Running in ec5bf39e6463
Removing intermediate container ec5bf39e6463
 ---> 4edecf01b492
Step 5/8 : ENV PATH $CATALINA_HOME/bin:$PATH
 ---> Running in 85077086eaad
Removing intermediate container 85077086eaad
 ---> dd87eaf442c0
Step 6/8 : ADD apache-tomcat-8.5.31.tar.gz /usr/lib/tomcat
 ---> 1f89328f3979
Step 7/8 : EXPOSE 8080
 ---> Running in de2c682e13b6
Removing intermediate container de2c682e13b6
 ---> af546fef2350
Step 8/8 : CMD ["catalina.sh","run"]
 ---> Running in 5b0090b64ce3
Removing intermediate container 5b0090b64ce3
 ---> 264d4d274a3b
Successfully built 264d4d274a3b
Successfully tagged apache-tomcat8.5.31:latest
查看镜像
# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
apache-tomcat8.5.31   latest              264d4d274a3b        24 seconds ago      601MB
oracle-jdk-8u162      latest              0edb614a6f1e        19 minutes ago      588MB
tomcat                latest              6fa48e047721        12 days ago         507MB
centos                centos7             5e35e350aded        6 weeks ago         203MB
hello-world           latest              fce289e99eb9        11 months ago       1.84kB
运行镜像
# docker run -d --name tomcat8.5.31 apache-tomcat8.5.31
bf5ed3cbd6fb57d5b12797b0379faafa3dfcac8c8f2bce0d4991b01cfbe9115c
# docker ps
CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS               NAMES
bf5ed3cbd6fb        apache-tomcat8.5.31   "catalina.sh run"   32 seconds ago      Up 31 seconds       8080/tcp            tomcat8.5.31
进入镜像
# docker exec -it bf5ed3cbd6fb /bin/bash
[root@bf5ed3cbd6fb tomcat]# pwd
/usr/lib/tomcat
[root@bf5ed3cbd6fb tomcat]# java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
验证Tomcat8.5.31已启动
# curl http://127.0.0.1:8080
新创建容器增加端口映射
# docker run -d -p 8081:8080 --name tomcat8.5.31_2 apache-tomcat8.5.31
# docker ps
CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS                    NAMES
060b55f8b253        apache-tomcat8.5.31   "catalina.sh run"   2 seconds ago       Up 1 second         0.0.0.0:8081->8080/tcp   tomcat8.5.31_2
bf5ed3cbd6fb        apache-tomcat8.5.31   "catalina.sh run"   3 minutes ago       Up 3 minutes        8080/tcp                 tomcat8.5.31
端口映射后,可使用宿主主机Ip加端口进行访问

http://192.168.31.200:8081/

停止容器

# docker stop bf5ed3cbd6fb



转载请指明出处!http://www.miselehe.com/article/view/52