Docker

一、简介

Docker:主要解决环境配置问题,它是一种虚拟化技术,对进程进行隔离,被隔离的进程独立于宿主操作系统和其它隔离的进程。

二、说明

相对于虚拟机

虚拟机也是一种虚拟化技术,它与 Docker 最大的区别在于它是通过模拟硬件,并在硬件上安装操作系统来实现。

  • 启动速度:

    • 虚拟机需要先启动虚拟机的操作系统,再启动应用
    • Docker相当于启动宿主操作系统上的一个进程
  • 资源占用:

    • 虚拟机是一个完整的操作系统,需要占用大量的磁盘、内存和CPU资源,一台机器只能开启几十个的虚拟机
    • Docker是一个进程,只需要将应用以及相关的组件打包,在运行时占用很少的资源,一台机器可以开启成千上万个 Docker

优势

  • 更容易迁移:提供一致性的运行环境

  • 更容易维护:使用分层技术和镜像

  • 更容易扩展:可以使用基础镜像进一步扩展得到新的镜像

使用场景

  • 持续集成

  • 提供可伸缩的云服务

  • 搭建微服务架构

镜像与容器

  • 镜像:是一种静态的结构,可以看成面向对象里面的类

    • 镜像包含着容器运行时所需要的代码以及其它组件,它是一种分层结构,构建镜像时,会一层一层构建,前一层是后一层的基础,每一层都是只读的(read-only layers)。
  • 容器:是镜像的一个实例

    • 构建容器时,可通过在镜像的基础上添加一个可写层(writable layer),用来保存着容器运行过程中的修改。

三、使用

Windos10本地搭建

  • 1、下载Docker Desktop

  • 2、开启 Hyper-V

  • 3、配置镜像加速

  • 4、使用Linux虚拟机模式

  • 5、开放2375端口

  • 6、使用Git Bash搭建服务

命令

服务命令

  • 一键安装命令
curl -sSL https://get.daocloud.io/docker | sh
  • 启动服务命令
systemctl start docker
  • 查看系统信息
docker system info
  • 设置开机启动
systemctl enable docker
systemctl is-enabled docker

容器命令

  • 运行容器
docker run learn/tutorial echo "hello world"
docker run -it ubuntu:15.10 /bin/bash(交互式运行:-t: 在新容器内指定一个伪终端或终端 -i: 允许你对容器内的标准输入进行交互)
docker run -d -p 5000:5000 training/webapp python app.py(-d: 让容器在后台运行 -p: 指定端口映射 -P: 随机端口 --name: 指定名称)
  • 在容器中安装新的程序
docker run learn/tutorial apt-get install -y ping
  • 获取容器列表
docker ps -a(-a: 所有容器 -l 最后一次创建的容器)
  • 保存对容器的修改
docker commit c7ca learn/ping
  • 检查运行中的容器底层信息
docker inspect fds
  • 查看容器日志
docker logs learn/ping(-f: 容器内部的标准输出)
  • 启动/停止/重启容器
docker start/stop/restart learn/ping
  • 进入容器
docker exec -it 243c32535da7 /bin/bash
  • 导出容器
docker export 1e560fca3906 > ubuntu.tar
  • 导入容器快照
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
  • 删除容器
docker rm -f 1e560fca3906
  • 查看容器端口
docker port 1e560fca3906
  • 查看内部的运行进程
docker top 1e560fca3906

网络命令

  • 新建网络
docker network create -d bridge test-net
  • 容器设置网络
docker run -itd --name test1 --network test-net ubuntu /bin/bash
  • 查看网络
docker network ls
  • 设置host网络
docker run -itd --name test1 --network host redis

镜像命令

  • 查看镜像
docker images
  • 搜索镜像
docker search tutorial
  • 下载/发布/删除镜像
docker pull/push/rmi learn/ping
  • 运行新的镜像
docker run learn/ping ping www.baidu.com
  • 设置镜像标签
docker tag 860c279d2fec runoob/centos:dev
  • 构建镜像
docker build -t runoob/centos:6.7 .(.: 可指定绝对路径)

Dockerfile

FROM java:alpine
VOLUME /tmp
ADD app-server-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
  • FROM:指定镜像
  • RUN:运行命令(build期间)
  • COPY:复制指令,从上下文目录中复制文件或者目录到容器里指定路径
  • CMD:运行指令(run期间)
  • ENTRYPOINT:配合CMD在run期间使用
  • ENV:设置环境变量
  • ARG:设置环境变量(作用域在文件内)
  • VOLUME:数据挂载点
  • EXPOSE:声明端口
  • WORKDIR:指定工作目录
  • USER:指定用户和用户组

Compose

version: '3'
services:
    mysql:
        image: mysql:5.7
        container_name: sc-mysql
        restart: always
        network_mode: host
        ports:
          - 3306:3306
        volumes:
          - ../data/mysql:/var/lib/mysql
        environment:
          TZ: Asia/Shanghai
          MYSQL_ROOT_PASSWORD: root123

version:指定compose版本
services:
    service:
        image: 指定容器运行的镜像
        build:
            - context:指定构建镜像的上下文路径
            - dockerfile:指定构建镜像的 Dockerfile 文件名
            - args:添加构建参数
            - labels:设置构建镜像的标签
        command:覆盖容器启动的默认命令
        depends_on:设置依赖关系
        entrypoint:覆盖容器默认的 entrypoint
        env_file:从文件添加环境变量
        environment:添加环境变量
        expose:暴露端口
        extra_hosts:添加主机名映射
        logging:服务的日志记录配置
        network_mode:设置网络模式
        restart:设置重启策略
        volumes:主机的文件挂载到容器

JAVA

1、配置dockerfile

FROM java:alpine
VOLUME /tmp
ADD test-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

2、配置docker镜像build插件

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.2.0</version>
    <configuration>
        <!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 -->
        <imageName>test/${project.artifactId}</imageName>
        <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
        <rm>true</rm>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>

3、构建镜像

mvn package && mvn docker:build

4、配置docker-compose

version: '3'
services:
  test:
    image: test/test:latest
    container_name: test
    restart: always
    network_mode: host
    ports:
      - 8888:8888
    environment:
      TZ: Asia/Shanghai
      JVM_OPTS: -Xmx256m -Xms256m -Xmn128m -XX:MaxPermSize=256m

5、启动容器

docker-compose up -d test

四、链接

Docker官网

docker-maven-plugin官网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值