借助Docker DockerCompose Dockerfile 部署服务

118 阅读6分钟

借助Docker DockerCompose Dockerfile 部署服务

注意:以下操作环境为Centos7

1、Docker安装

  • 必要安装

    yum -y install yum-utils device-mapper-persistent-data lvm2
    
  • 配置国内源

    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  • 安装

    • 可使用以下命令查看版本列表

      yum list docker-ce --showduplicates | sort -r
      

    由于repo中默认只开启stable仓库,故这里安装的是最新稳定版

    yum install docker-ce
    
  • 启动

    systemctl start docker
    
  • 开机自启

    systemctl enable docker
    
  • 验证

    # 简单信息
    docker -v
    # 查看docker的版本号,包括客户端、服务端、依赖的Go等
    docker version
    # 查看系统(docker)层面信息,包括管理的images, containers数等
    docker info
    
  • 成功示例

    [root@iZa7l019nmh1l8bfjuy6liZ ~]# docker version
    Client:
     Version:         1.13.1
     API version:     1.26
     Package version: docker-1.13.1-208.git7d71120.el7_9.x86_64
     Go version:      go1.10.3
     Git commit:      7d71120/1.13.1
     Built:           Mon Jun  7 15:36:09 2021
     OS/Arch:         linux/amd64
    
    Server:
     Version:         1.13.1
     API version:     1.26 (minimum version 1.12)
     Package version: docker-1.13.1-208.git7d71120.el7_9.x86_64
     Go version:      go1.10.3
     Git commit:      7d71120/1.13.1
     Built:           Mon Jun  7 15:36:09 2021
     OS/Arch:         linux/amd64
     Experimental:    false
    [root@iZa7l019nmh1l8bfjuy6liZ ~]# 
    

2、DockerCompose安装

  • 下载(GitHub拉取,速度可能会比较慢!误躁~)

    注意1.24.1这个版本号,可根据需要变更!!!

    curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    
  • 安装

    chmod +x /usr/local/bin/docker-compose
    
  • 验证

    docker-compose version
    
  • 成功示例

    [root@iZa7l019nmh1l8bfjuy6liZ ~]# docker-compose version
    docker-compose version 1.20.0, build ca8d3c6
    docker-py version: 3.1.3
    CPython version: 3.6.4
    OpenSSL version: OpenSSL 1.0.1t  3 May 2016
    [root@iZa7l019nmh1l8bfjuy6liZ ~]# 
    
  • 常用操作命令

    #前台运行容器
    docker-compose up
    
    #后台运行容器
    docker-compose up -d
    
    #停止并释放容器
    docker-compose down
    
    #查看日志
    docker-compose 欧根纱-
    
    #启动、停止、重启容器
    docker-compose start
    docker-compose stop
    docker-compose restart
    

3、Dockerfile介绍

     Docker通过Dockerfile来自动构建需要的镜像,Dockerfile文件是一个包含了用于组建需要镜像的文本文件,文件内容都是由一条一条的指令组成。

        Dockerfile分为以下几部分:

FROM
MAINTAINER   
RUN, ADD, COPY...
CMD, ENTRYPOINT     

        下面具体来看看:


FROM
    # 指明构建的镜像来自于哪个基础镜像,后续所有的操作都基于此镜像,必须要有!!
    # 示例:FROM centos:7
MAINTAINER
    # 指定镜像的作者信息    
    # 示例:MAINTAINER houzx "houzxkf@163.com"
RUN
    # 用于执行一条命令;Dockerfile的指令每执行一次都会在docker上新建一层,
    # 所以无意义的层,会造成镜像膨胀过大;可以利用&&符合来连接命令,这样只会创建一层
    # 示例: RUN cd /opt \
    # && wget -O https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.86/bin/apache-tomcat-8.5.86.tar.gz \
    # && tar -zxvf apache-tomcat-8.5.86.tar.gz
CMD
    # 启动容器时执行的shell命令,类似于RUN命令,但是二者执行时间点不同
    # CMD 在docker run的时候运行
    # RUN 在docker build的时候运行
    # 其支持shell、exec两种形式的语法
    # shell格式 CMD command  param1 param2
    # exec格式[推荐] CMD ["command", "param1", "param2"]
    # 示例:CMD ["tar", "-zxvf", "apache-tomcat-8.5.86.tar.gz"]
EXPOSE 
    # 声明容器运行可能会用到的端口,此处仅是声明端口
    # 作用:
    # 1、帮助镜像使用者理解这个景象服务的守护端口,以便配置映射
    # 2、在运行时使用随机端口映射时,即docker run -P时,会自动随机映射EXPOSE端口
    # 示例:EXPOSE 8080
ENV 
    # 设置环境变量,定义了环境变量,就能在后续指令中使用这个环境变量
    # 示例:ENV JAVA_HOME=/usr/local/java/jdk1.8.0_181
COPY 
    # 拷贝文件或目录到镜像的目录中,支持通配符,例如:
    # 示例: COPY hom* /mydir/
    # 示例:COPY hom?.txt /mydir/
ADD 
    # 与COPY的使用方式一致,不同的是,ADD在gzip, bzip2,即xz的情况下,会自动复制并解压到目标路径
    # 示例:ADD jdk-8u181-linux-x64.tar.gz /usr/local/java
ENTRYPOINT 
    # 类似于CMD命令,也支持两种方式,但是不会被docker run的命令行参数覆盖。
    # 但是如果执行docker run 的时候指定了 --entrypoint 选项,此选项参数会覆盖ENTRYPOINT指令定义的程序
    # 如果Dockerfile中存在多个ENTRYPOINT指令,仅最后一个生效
    # 示例:ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh", "run"]
VOLUME 
    # 指定容器挂载点到宿主机自动生成的目录或其他容器,在启动容器docker run的时候,可通过 -v 参数修改挂载点
    # 示例:VOLUME ["/data1","/data2"]
USER
    # 用于指定执行后续命令的用户和用户组
    # 示例:USER <用户名>[:<用户组>]
WORKDIR 
    # 为Dockerfile中的任何 RUN、CMD、ENTRYPOINT、COPY 和 ADD指令设置工作目录
    # 如果镜像中对应的路径不存在,会自动创建此目录
    # 一般用 WORKDIR 来替代 切换目录进行操作的指令
    # 示例:WORKDIR /usr/local
  • 使用Dockerfile自定义镜像并上传到中央仓库

    #1、切换到Dockerfile文件所在目录
    ➜ cd <DockerfilePath>
    
    #2、执行build命令,实例:
    ➜ docker build -t jdk8-tomcat8:1.0 .
    [+] Building 0.3s (10/10) FINISHED                                              
     => [internal] load build definition from Dockerfile                       0.1s
     => => transferring dockerfile: 1.21kB                                     0.0s
     => [internal] load .dockerignore                                          0.0s
     => => transferring context: 2B                                            0.0s
     => [internal] load metadata for docker.io/library/centos:7                0.0s
     => [internal] load build context                                          0.0s
     => => transferring context: 617B                                          0.0s
     => [1/5] FROM docker.io/library/centos:7                                  0.0s
     => CACHED [2/5] WORKDIR /usr/local                                        0.0s
     => CACHED [3/5] ADD jdk-8u181-linux-x64.tar.gz /usr/local/java            0.0s
     => CACHED [4/5] ADD apache-tomcat-8.5.81.tar.gz /usr/local                0.0s
     => CACHED [5/5] RUN mv apache-tomcat-8.5.81 tomcat                        0.0s
     => exporting to image                                                     0.0s
     => => exporting layers                                                    0.0s
     => => writing image sha256:2f4b87f4c1742956a5d07539b92c6371758d7858be02c  0.0s
     => => naming to docker.io/library/jdk8-tomcat8:1.0                        0.0s
    
    #3、查看生成的镜像,实例:
    ➜ docker images | grep jdk8-tomcat8
    houzx/jdk8-tomcat8                              1.0       2f4b87f4c174   41 hours ago    615MB
    jdk8-tomcat8                                    1.0       2f4b87f4c174   41 hours ago    615MB
    
    #4、登录hub.docker.com账户,实例:
    ➜ docker login -u houzx     
    Password: 
    Login Succeeded
    
    #5、打标签,实例:
    ➜ docker tag jdk8-tomcat8:1.0 houzx/jdk8-tomcat8:1.0
    
    #6、推送,实例:
    ➜ docker push houzx/jdk8-tomcat8:1.0
    
    #7、登录hub.docker.com查看
    
    

4、[选] 部署Minio服务

此处只是根据实际情况编写操作手册,详细介绍可查看官方介绍

  • 编写docker-compose.yml文件

    version: '3.3'
    services:
     minio:
       image: minio/minio
       hostname: minio
       container_name: minio
       ports:
         - "9000:9000" #api端口
         - "9001:9001" #控制台端口
       environment:
         TZ: Asia/Shanghai
         MINIO_ACCESS_KEY: admin
         MINIO_SECRET_KEY: minio_admin #大于等于8位
       healthcheck:
         test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
         interval: 30s
         timeout: 20s
         retries: 3
       volumes:
         - /home/minio/data:/data
         - /home/minio/config:/root/.minio/
       command: server --console-address ':9001' /data
       privileged: true
       restart: always      
    
  • 为Minio设置Nginx代理

    请参考网址:为Minio设置Nginx代理

5、[选] 部署Redis服务

  • 编写docker-compose.yml文件

    version: '3.3'
    services:  
      redis:
        image: redis
        hostname: redis
        container_name: redis
        volumes:
          - /home/redis/data:/data
          - /home/redis/logs:/logs
          - /home/redis/redis.conf:/etc/redis/redis.conf
        ports:
          - 6379:6379
        environment:
          TZ: Asia/Shanghai
        command: redis-server /etc/redis/redis.conf
        restart: always
    

6、[选] 部署SpringBoot服务

  • 编写docker-compose.yml文件

    version: '3.3'
    services:
      xxx-boot:
        image: houzx/jdk8:1.0
        container_name: xxx-boot
        volumes:
          - /home/springboot/xxx:/springboot
        ports:
          - "20900:9000"
        restart: always
        environment:
          TZ: Asia/Shanghai
        command:
          - /bin/bash
          - -c
          - |
            cd /springboot
            java -Dfile.encoding=utf-8 -jar xxx-boot-1.0.0.jar --spring.profiles.active=prod
    

7、[选] 部署SpringWeb服务

  • 编写docker-compose.yml文件

    version: '3.3'
    services:
      xxx-web:
        image: houzx/jdk8-tomcat8:1.0
        container_name: xxx-web
        volumes:
          - /home/tomcat/xxx/webapps:/usr/local/tomcat/webapps
          - /home/logs/xxx:/home/logs
          - /home/data/xxx:/home/data
        ports:
          - "20800:8080"
        restart: always
        environment:
          TZ: Asia/Shanghai