美文网首页
8.Docker使用

8.Docker使用

作者: 星野君 | 来源:发表于2022-05-20 16:07 被阅读0次

    Docker镜像命令

    从DockerHub中拉取镜像

    1. 去镜像仓库搜索要下载的镜像
      Docker Hub Container Image Library | App Containerization

    2.拉取一个nginx镜像

    $ docker pull nginx
    
    1. 通过docker images查看拉取到的镜像
    $ docker images
    

    利用Docker save将nginx镜像导出磁盘,然后通过load加载回来

    1. 导出
    $ docker save -o nginx.tar nginx:latest  
    
    1. 导入
    $ docker load -i nginx.tar
    

    Docker容器命令

    • 创建运行一个nginx容器
    $ docker run --name some-nginx -d -p 8080:80 nginx
    

    docker run:创建并运行一个容器
    --name:给容器起一个名字
    -p: 将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
    -d:后台运行容器

    • 查看所有运行中的容器状态
    $ docker ps
    $ docker ps -a   #所有容器
    
    • 查看容器日志
    $ docker logs -f some-nginx
    
    • 进入容器内部
    $ docker exec -it some-nginx bash
    
    • 停止容器
    $ docker stop some-nginx
    
    • 启动容器
    $ docker start some-nginx
    
    • 删除容器
    $ docker rm some-nginx
    

    数据卷

    • 数据卷的作用
      将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全
    • 数据集操作
    $ docker volume create    # 创建一个volume
    $ docker volume inspect   # 显示一个或者多个volume的信息
    $ docker volume ls        # 列出所有volume
    $ docker volume prune     # 删除未使用的volume
    $ docker volume rm        # 删除一个或者多个指定的volume
    
    • 挂载数据卷
      创建容器时可以通过-v参数来挂载一个数据卷到某个容器目录
    $ docker run --name mn -v html:root/html -p 80:80 nginx
    

    挂载之后就可以通过inspect 查看挂载的目录,然后直接在容器外部直接修改容器里的内容

    • 创建并运行一个MySQL容器,将宿主机目录直接挂载到容器
    $ docker pull mysql:5.7.25
    $ mkdir -p /tmp/mysql/data
    $ mkdir -p /tmp/mysql/conf
    

    在/tmp/mysql/conf创建一个.cnf文件

    [mysqld]
    skip-name-resolve
    character_set_server=utf8
    datadir=/var/lib/mysql
    

    启动mysql

    $ docker run \
     --name mysql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -p 3306:3306 \
    -v /tmp/mysql/data:/var/lib/mysql \
    -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
    -d \
    mysql:5.7.25
    

    自定义镜像

    • Dockerfile基础命令


      image.png
    • 基于java:8-alpine镜像构建一个新镜像,运行一个java项目

    1. 新建一个空文件夹docker-demo
    2. 把打包好的.jar文件到docker-demo这个目录
    3. 创建一个Dockerfile文件到docker-demo这个目录
    # 指定基础镜像
    FROM java:8-alpine
    
    # 拷贝java项目的包
    COPY ./docker-demo.jar /tmp/app.jar
    
    # 暴露端口
    EXPOSE 8090
    # 入口,java项目的启动命令
    ENTRYPOINT java -jar /tmp/app.jar
    
    1. 进入docker-demo,运行命令:
    $ docker build -t javaweb:1.0 .
    
    1. 启动刚刚创建好的镜像
    $ docker run --name web -p 8090:8090 -d javaweb:1.0
    

    DockerCompose

    Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!
    Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。

    实现思路如下:
    新建一个文件夹,文件结构如下


    image.png

    每个微服务里面


    image.png
    1. 编写docker-compose文件
    version: "3.2"
    
    services:
      nacos:
        image: nacos/nacos-server
        environment:
          MODE: standalone
        ports:
          - "8848:8848"
      mysql:
        image: mysql:5.7.25
        environment:
          MYSQL_ROOT_PASSWORD: 123
        volumes:
          - "$PWD/mysql/data:/var/lib/mysql"
          - "$PWD/mysql/conf:/etc/mysql/conf.d/"
      userservice:
        build: ./user-service
      orderservice:
        build: ./order-service
      gateway:
        build: ./gateway
        ports:
          - "10010:10010"
    
    
    1. 修改自己的cloud-demo项目,将数据库、nacos地址都命名为docker-compose中的服务名
    2. 使用maven打包工具,将项目中的每个微服务都打包为app.jar
    3. 将打包好的app.jar拷贝到cloud-demo中的每一个对应的子目录中
    4. 将cloud-demo上传至虚拟机,利用 docker-compose up -d 来部署
      dock

    相关文章

      网友评论

          本文标题:8.Docker使用

          本文链接:https://www.haomeiwen.com/subject/ecytprtx.html