Dockerfile与Docker Compose构建镜像

Dockerfile与Docker Compose构建镜像

  • 什么是Dockerfile
    • 常用命令
    • 编写Dockerfile文件
    • Dockerfile部署Spring Boot项目
    • Dockerfile部署maven web项目
  • Docker Compose
    • 安装Compose
    • docker-compose.yml常用命令
    • Docker Compose常用命令
    • 编写docker-compose.yml文件
    • 启动所有服务
  • Docker Compose实战

什么是Dockerfile

Dockerfile是构建镜像的文本文件,是由一系列命令和参数构成的脚本,脚本容包含了一条条构建镜像所需的指令和说明,Dockerfile就是创建一个镜像文件的过程。

常用命令

命令 作用 实例
FROM 指定所需依赖的基础镜像 FROM centos:7
MAINTAINER 声明镜像创建者信息 MAINTAINER CJ
ENV 设置环境变量 ENV MYSQL_ROOT_PASSWORD root
RUN 在容器构建过程中执行的命令 RUN curl http://wttr.in
ADD 拷贝文件或目录到容器内,如果是URL或压缩包,会自动下载或自动解压 ADD my-app.jar /app.jar
COPY 和ADD相似,但是压缩包并不能自动解压
EXPOSE 声明需要暴露的端口,容器运行的服务端口 EXPOSE 8080
WORKDIR #指定工作目录,容器启动时,执行命令会在该目录下执行 WORKDIR /usr
CMD 类似于 RUN 指令,CMD 在docker run 时执行。RUN 是在 docker build时执行 CMD [“/bin/echo”, “hello world”]
ENTRYPOINT 指定容器启动时执行的命令 ENTRYPOINT[“java”,“-jar”,“/app.jar”]

编写Dockerfile文件

步骤:

(1)创建目录

mkdir –p /usr/local/docker/java

(2)进入 /usr/local/docker/java

下载或者上传jdk (感谢这位老哥分享的JDK下载地址)

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"

Dockerfile与Docker Compose构建镜像_第1张图片

(3)创建文件Dockerfile vi Dockerfile

FROM image_name (依赖的基础镜像,必须在第一行哦)
#依赖基础镜像名称和tag
FROM centos:7
RUN echo '开始构建.............'
#声明镜像创建者信息
MAINTAINER Jack
#指定工作目录
WORKDIR /usr
#创建目录
RUN mkdir  /usr/local/java
#来个操作
RUN curl http://wttr.in 
#ADD 把jdk添加到容器中
ADD jdk-8u141-linux-x64.tar.gz  /usr/local/java/

#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_141
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
RUN echo '构建完成.............'

Dockerfile与Docker Compose构建镜像_第2张图片

(4)执行命令构建镜像

-t 表示指定镜像仓库名称/镜像名称:镜像标签 .表示使用当前目录下的Dockerfile

docker build -t nginx/nginx:latest .
docker build -t=java8 .
空格和点不能省略
. 代表本次执行的上下文路径,也就是Dockerfile存在的目录

Dockerfile与Docker Compose构建镜像_第3张图片
Dockerfile与Docker Compose构建镜像_第4张图片
图中红框勾选项就是Dockerfile中一系列的指令,从上往下依次执行
(5)查看镜像是否建立完成

docker images

在这里插入图片描述
(6)创建容器进入并验证
Dockerfile与Docker Compose构建镜像_第5张图片
在这里插入图片描述
在这里插入图片描述

Dockerfile部署Spring Boot项目

使用Dockerfile构建SpringBoot应用镜像

#依赖基础镜像名称和tag
FROM java:8
#声明镜像创建者信息
MAINTAINER Jack
# 申明一个环境变量
ENV HOME_PATH /home
# 接受传入参数,如:启动容器添加参数:-e PARAMS="--server.port=7777"
ENV PARAMS=""
#指定工作目录,容器启动时,执行命令会在该目录下执行
WORKDIR $HOME_PATH
#ADD 把jdk添加到容器中
ADD target/demo-*.jar  $HOME_PATH/app.jar
# 容器启动时运行jar
ENTRYPOINT["java","-jar","/app.jar $PARAMS"]

Dockerfile部署maven web项目

使用Dockerfile构建maven web应用镜像

#依赖基础镜像名称和tag
FROM tomcat:8
# 挂载时间配置文件
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# 申明环境变量
ENV DIR_WEBAPP /usr/local/tomcat/webapps/
# 执行删除命令
RUN rm -rf $DIR_WEBAPP/*
# 执行创建命令
RUN mkdir /avatar
# 复制 jar 到容器中
COPY target/demo-*.war $DIR_WEBAPP/app.war
# 指定工作目录,容器启动时,执行命令会在该目录下执行
WORKDIR /usr/local/tomcat/bin
# 暴露端口
EXPOSE 8080
# 执行命令
CMD ["catalina.sh", "run"]

Docker Compose

Compose用于定义和运行多容器的工具。通过Compose,可以使用YML文件来配置应用程序需要的所有服务。然后使用一个命令,就可以从YML文件配置中创建并启动所有服务。

安装Compose

地址:https://github.com/docker/compose/releases

下载Compose

curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

修改该文件的权限为可执行

chmod +x /usr/local/bin/docker-compose

查看安装是否成功

[root@administrator ~]# docker-compose --version
Docker Compose version v2.2.1

使用Docker Compose的步骤

使用 Dockerfile 定义应用程序的环境。

使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。

最后,执行 docker-compose up 命令来启动并运行整个应用程序

docker-compose.yml常用命令

命令 实例 描述
image image: mysql:5.7 运行的是mysql5.7的镜像
container_name container_name: mysql 配置容器名称
ports ports:
- 3306:3306
指定宿主机和容器的端口映射
volumes volumes:
- /usr/local/program/mysql/log:/var/log/mysql
- /usr/local/program/mysql/data:/var/lib/mysql
- /usr/local/program/mysql/conf:/etc/mysql
将宿主机的文件或目录挂载到容器中
environment environment:
-MYSQL_ROOT_PASSWORD=root
配置环境变量;设置mysqlroot帐号密码的环境变量
links links:
-mysql:linktest
连接其他容器的服务;定义一个别名,从而使用该别名访问其它服务;以mysql或linktest为域名访问服务名称为mysql的容器

Docker Compose常用命令

命令 描述
docker-compose up -d 构建、创建、启动相关容器;-d表示在后台运行
docker-compose stop 停止所有相关容器
docker-compose ps 列出所有容器信息
docker-compose logs 查看服务日志输出
docker-compose build 构建或者重新构建服务
docker-compose start db-service 启动指定服务已存在的容器
docker-compose stop db-service 停止已运行的服务的容器
docker-compose rm db-service 删除指定服务的容器
docker-compose kill db-service 发送 SIGKILL 信号来停止指定服务的容器
docker-compose run db-service bash 在容器服务上执行一个命令

编写docker-compose.yml文件

Docker Compose 将所管理的容器分为三层:工程、服务及容器。

定义的所有服务组成一个工程,services节点下即为服务,服务之下为容器。

容器与容器之间以服务名称为域名进行访问,

A(db)、B(web)的两个服务,B服务中连接A服务的数据库: jdbc:mysql://db:3306
#指定docker-compose.yml文件版本
version: '3'
# 定义所有service信息
services:
  # 指定服务名称
  db-service:
    # 指定服务使用的镜像
    image: mysql:5.7
    # 定义容器重启策略
    restart: always
    # 指定容器名称
    container_name: mysql
   # 建立宿主机和容器之间的端口映射关系,容器3306端口和宿主机3307端口建立映射关系
    ports:
      - 3307:3306
    # 指定容器中需要挂载的文件
    volumes:
      - /usr/local/program/mysql/log:/var/log/mysql
      - /usr/local/program/mysql/data:/var/lib/mysql
      - /usr/local/program/mysql/conf:/etc/mysql
     
      # docker inspect container_name查看容器默认持久化目录,需要配置定义volumes使用
      #- db_data:/var/lib/mysql
    # 指定容器的环境变量
    environment:
      - MYSQL_ROOT_PASSWORD=root123456

  # 指定服务名称
  myweb-service:
    #docker-compose up 以依赖顺序启动服务,先启动db-service
    depends_on:
      - db-service
    # 指定服务使用的镜像
    image: tomcat:8
    # 指定容器名称
    container_name: myweb
    # 指定服务运行的端口
    ports:
      - 8080:8080
    # 指定容器中需要挂载的文件
    volumes:
      - /etc/localtime:/etc/localtime
      - /usr/local/program/myweb/logs:/var/logs
    
# 定义容器和宿主机的卷映射关系
volumes:
    db_data: {}

启动所有服务

将docker-compose.yml上传到服务器,并在当前目录下运行如下命令:

docker-compose up -d
[root@administrator ~]# docker ps
CONTAINER ID   IMAGE                    COMMAND                  CREATED         STATUS         PORTS                                                                                                                                  NAMES
459b3c14f750   tomcat:8                 "catalina.sh run"        7 seconds ago   Up 6 seconds   0.0.0.0:8080->8080/tcp                                                                                                                 myweb
eddd4675b028   mysql:5.7                "docker-entrypoint.s…"   7 seconds ago   Up 6 seconds   33060/tcp, 0.0.0.0:3307->3306/tcp 

Docker Compose实战

使用Docker Compose搭建wordpress博客

version: '3.3'
services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: root_wordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - 8090:80
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress

volumes:
    db_data: {}

启动

[root@administrator docker]# docker-compose up
[+] Running 2/1Container docker-db-1         Recreated                                                                                                                                                               0.1s
 ⠿ Container docker-wordpress-1  Recreated   

Dockerfile与Docker Compose构建镜像_第6张图片

你可能感兴趣的:(#,Docker,docker,linux,java,Dockerfile,spring,boot)