docker+docker-compose配置

docker简介

  1. docker是Linux版的软件中心,可大大简化应用的安装部署工作
  2. docker是轻量级的Linux,有自己的IP和端口,一个宿主机的多个容器可以构成局域网,可通过宿主机通过docker虚拟出来的网卡实现互通,外部访问容器,可通过端口映射的方式
    在这里插入图片描述

几个概念

  1. docker服务:docker服务是运行在宿主机的后台进程,也称之为守护进程(Docker daemon)
  2. docker客户端:是用户命令入口,可接受用户命令和配置标识,并于docker服务通信,比如docker build就是 Docker客户端输入的
  3. 镜像Images:可以理解为下载器,使用镜像可以创建容器
  4. 容器Container:可以理解为软件,是通过镜像来实例化的
  5. 仓库(Registry):是一个集中存储镜像的服务,类似于Maven的仓库

docker安装

  1. 系统要求:Linux内核版本3.10以上
  2. uname -r # 查看当前内核版本
  3. yum -y update # 更新yum包
  4. yum remove docker docker-common docker-selinux docker-engine # 卸载旧版本
  5. yum install -y yum-utils device-mapper-persistent-data lvm2 # 下载工具和依赖
  6. yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 设置docker的yum源
  7. yum list docker-ce --showduplicates | sort -r # 查看docker版本
  8. sudo yum install -y docker-ce # 安装docker
  9. systemctl start docker && systemctl enable docker # 启动并设置开机自启
  10. docker version # 查看是否安装成功,client和service都有表示docker安装成功
  11. 阿里镜像加速:https://cr.console.aliyun.com/cn-hangzhou/mirrors

常用命令

  1. docker search java # 镜像搜索
  2. docker pull java:8 # 镜像下载
  3. docker images # 镜像查看
  4. docker rmi java # 镜像删除,也可指定镜像id删除,如:docker rmi d23bdf5b1b1b
  5. docker run --name mynginx -d -p 81:80 docker.io/nginx # 容器创建并启动
    • –name:容器名称
    • -d:后台启动
    • -p:端口映射
    • e:启动参数(类似于命令行启动时的参数)
    • -v:文件映射,如 -v /opt/nginx:/etc/nginx/nginx.conf
  6. docker ps # 容器查看
  7. docker ps -a # 查看所有
  8. docker inspect mynginx # 查看容器启动状态
  9. docker exec -it mynginx/bin/bash 进入到容器
  10. docker start/stop/restart mynginx # 启动/停止/重启容器

构建自己docker镜像

  1. 自己构建docker还是比较复杂的,特别是一些成熟的软件,可能需要很多配置和依赖,此处就以springboot为例,构建自己的java程序镜像
  2. 打包时,需要指定可直接运行的插件,否则会报找不到主类的错误
    <build>
        <plugins>
            <!-- spring-boot-maven-plugin (提供了直接运行项目的插件:如果是通过parent方式继承spring-boot-starter-parent则不用此插件) -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    
  3. 将打好的jar包上传到虚拟机中,然后再Jar包同级目录创建Dockerfile文件,vi Dockerfile 添加如下内容:
    FROM java:8      # 指定java8环境镜像
    VOLUME /tmp      # 默认文件挂载
    ADD docker-demo-0.0.1-SNAPSHOT.jar app.jar   # 将jar添加到容器跟目录中
    RUN bash -c 'touch /app.jar'
    EXPOSE 9000     # 暴露端口
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
    
  4. 使用docker build命令构建镜像:docker build -t docker-springboot-0.0.1 .(格式说明:.代表Dockerfile的相对位置)
  5. 创建并启动容器:docker run --name job7777 -d -p 7777:7777 -p 9997:9997 stu-job-0.0.1需要开放哪些端口,我们就映射哪些端口
  6. 查看启动日志:docker logs -tf --tail 20 job7777

docker-compose安装

  1. 介绍:是docker高效的容器管理工具,可定义、运行、停止多个容器

  2. 安装命令:

    sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    
  3. 查看是否安装成功:docker-compose -v

  4. 构建docker-compose文件:`vi docker-compose.yml

    version: '2'  # 表示docker-compose.yml版本
    services:
      nginx-service:    # 服务名称
        build: /opt/module/Dockerfile   # 指定镜像构建的Dockerfile文件
        ports:
          - "81:80"   # 指定映射端口     
    
  5. 常用命令(注意:所有命令都必须在docker-compose.yml同级目录执行)

    容器docker-compose up -d   # 后台启动管理器
    docker-compose ps      # 查看此管理器下所有运行容器
    docker-compose logs -f # 查看管理器日志输出
    docker-compose build   # 构建或重新构建管理器
    docker-compose start mynginx   # 启动管理器中已有的容器
    docker-compose stop mynginx   # 停止管理器中已有的容器
    docker-compose rm mynginx   # 删除管理器中已有的容器
    

docker-compose.yml详解

  1. version:指定docker-compose.yml版本

  2. services:容器服务的集合

  3. build:容器构建参数,有两种指定Dockerfile方式

    version: '2'  # 表示docker-compose.yml版本
    services:
      nginx-service:    # 服务名称
        #build: /opt/module/Dockerfile   # 指定镜像构建的Dockerfile文件
        build:
          context: /opt/module
          dockerfile: Dockerfile
          args:          # 构建参数
            buildno: 1
    
  4. command:自定义容器启动时的命令

    version: '2'  # 表示docker-compose.yml版本
    services:
      nginx-service:    # 服务名称
        #command: java -jar app.jar    # 自定义容器启动命令
        command: [jave, -jar, app.jar]
    
  5. dns:配置DNS服务器

    version: '2'  # 表示docker-compose.yml版本
    services:
      nginx-service:    # 服务名称
        #dns: 114.114.114.114
        dns: 
          - 8.8.8.8
          - 114.114.114.114
    
  6. dns_search:配置DNS搜索域

    version: '2'  # 表示docker-compose.yml版本
    services:
      nginx-service:    # 服务名称
        #dns_search: example.com
        dns_search: 
          - dc1.example.com
          - dc2.example.com
    
  7. environment:环境变量的配置

    version: '2'  # 表示docker-compose.yml版本
    services:
      nginx-service:    # 服务名称
        environment: 
          #RACK_ENV: development
          #SHOW: 'ture'
          - RACK_ENV=development
          - SHOW=ture
    
  8. env_file:使用文件指定环境变量,其优先级低于environment 指定的环境变量

    version: '2'  # 表示docker-compose.yml版本
    services:
      nginx-service:    # 服务名称
       #env_file: /opt/module/myenv
       env_file: 
         - /opt/module/myenv
    
  9. expose:端口暴露,将端口暴露给管理器中其他容器,而不暴露给主机

    version: '2'  # 表示docker-compose.yml版本
    services:
      nginx-service:    # 服务名称
       expose: 
         - "80"
         - "3000"
    
  10. image:指定容器启动时所使用的镜像

    version: '2'  # 表示docker-compose.yml版本
    services:
      nginx-service:    # 服务名称
       image: nginx
    
  11. network_mode:指定管理器中容器之间的网络模式

    version: '2'  # 表示docker-compose.yml版本
    services:
      nginx-service:    # 服务名称
       #network_mode: "bridge"     # 桥接模式
       #network_mode: "host"       # 主机模式
       #network_mode: "none"       
       #network_mode: "service:[service name]"    # 指定服务连接(必须是管理器的)
       #network_mode: "container:[container name/id]"  # 指定容器名称/id进行连接(可以是外面的)
    
  12. ports:端口映射,对外暴露端口,与expose对应

    version: '2'  # 表示docker-compose.yml版本
    services:
      nginx-service:    # 服务名称
       ports:           # 端口暴露,其格式为 宿主机端口:容器暴露端口
         - "80:81"
         - "3306:3306"
    
  13. links:指定服务连接到当前连接,可使用别名进行连接,防止使用默认ip方式连接,要是管理器中的容器,此方法不使用了,详情查看:https://blog.csdn.net/y19910825/article/details/106937611

    version: '2'  # 表示docker-compose.yml版本
    services:
      nginx-service:    # 服务名称
       links:     # 服务名称:访问别名
         - docker-compose-eureka-server:eureka-server
    
  14. volumes:文件挂载

    version: '2'  # 表示docker-compose.yml版本
    services:
      nginx-service:    # 服务名称\
       volumes: 
         - /opt/module/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
    
  15. container_name:指定容器名称

    version: '2'  # 表示docker-compose.yml版本
    services:
      nginx-service:    # 服务名称
       container_name: mynginx
    
  16. restart:重启方式

    version: '2'  # 表示docker-compose.yml版本
    services:
      nginx-service:    # 服务名称
       restart: always      # 开机自启
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值