Docker安装教程以及操作指令

Docker - 快速通关 (3h) (yuque.com)
本文参考该文档进行修改完善

一、Docker安装

  1. 安装指南:[Install Docker Engine on CentOS | Docker Docs](https://docs.docker.com/engine/install/centos/)

  2. 安装文档:

    # 移除旧版本docker
    sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
                      
    # 配置docker yum源。
    sudo yum install -y yum-utils
    sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    # 安装 最新 docker
    sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
    # 启动Docker
    sudo systemctl start docker
    
    # 启动& 开机启动docker; enable + start 二合一
    systemctl enable docker --now
    
    # 配置加速
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

二、常见的Docker命令

  1. 镜像操作

    #搜索镜像
    docker search nginx
    #下载镜像
    docker pull nginx
    #下载指定版本镜像  tag是指版本
    docker pull nginx:1.26.0
    #查看所有镜像
    docker images
    #删除指定id的镜像
    docker rmi <IMAGE ID>
    #eg:docker rmi e784f4560448
    
  2. 容器操作

    #查看运行中的容器
    docker ps
    #查看所有容器
    docker ps -a
    #查看所有容器的id
    docker ps -aq 
    
    #运行一个新容器
    docker run nginx
    #docker run详细讲解 docker run --help
    # docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    # 后台启动容器
    docker run -d --name mynginx nginx
    # 后台启动并暴露端口
    docker run -d --name mynginx -p 88:80 nginx
    #将容器的80端口映射到本机的88端口。原本的80端口是指容器内部的操作系统的80端口,但记得要在安全组策略中开放端口
    
    #停止容器
    docker stop <NAME>
    #启动容器
    docker start <CONTAINER ID>
    #重启容器
    docker restart <CONTAINER ID>
    #查看容器资源占用情况
    docker stats <CONTAINER ID>
    #查看容器日志
    docker logs <CONTAINER ID>
    #删除指定容器
    docker rm <CONTAINER ID>
    #强制删除指定容器
    docker rm -f <CONTAINER ID>
    docker rm -f $(docker ps -aq)
    # 进入容器内部
    docker exec -it <NAME> /bin/bash
    
  3. 容器打包镜像

    # 提交容器变化打成一个新的镜像
    docker commit -m "update index.html" <NAME> <NEW NAME>:<tag>
    # 保存镜像为指定文件
    docker save -o <文件名称> <NAME>
    #ps:docker save -o mynginx.tar mynginx:v1.0
    # 删除多个镜像
    docker rmi <CONTAINER ID> <CONTAINER ID> <CONTAINER ID>
    docker rmi bde7d154a67f 94543a6c1aef e784f4560448
    # 加载镜像
    docker load -i <文件名称>
    #ps:docker load -i mynginx.tar 
    
  4. 镜像推送社区

    # 登录 docker hub
    docker login
    # 重新给镜像打标签
    docker tag <NAME> <NEW NAME>
    docker tag mynginx:v1.0 leifengyang/mynginx:v1.0
    # 推送镜像
    docker push leifengyang/mynginx:v1.0
    

三、端口映射

在这里插入图片描述

四、文件存储

  1. 目录挂载

    • 目录挂载是将宿主机上的一个目录挂载到容器中的某个目录。这意味着容器可以直接访问和修改宿主机上的文件系统。

      • 优点:
        1. 简单直观:只需指定宿主机目录和容器目录即可。
        2. 性能好:由于直接访问宿主机文件系统,性能较高。
        3. 实时同步:任何对宿主机目录的更改都会立即反映在容器中,反之亦然。
      • 缺点:
        1. 依赖宿主机文件系统:如果宿主机目录被删除或改变,容器可能会失效。
        2. 安全性问题:容器可以访问宿主机文件系统,可能带来安全隐患。
    • docker run指令:-v <宿主机文件路径>:<容器内部文件路径>

      完整指令:docker run -d -p 8080:80 -v /app/nghtml:/usr/share/nginx/html --name app01 nginx

  2. 卷映射

    • 数据卷是 Docker 提供的一种更高级的数据持久化方法。数据卷完全由 Docker 管理,不依赖于宿主机的具体文件系统路径。

      • 优点:
        1. 独立于宿主机:数据卷的管理独立于宿主机文件系统,可以在不同宿主机之间迁移。
        2. 持久化:容器删除后,数据卷中的数据仍然保留。
        3. 备份和迁移:容易备份和迁移数据卷。
        4. 安全性:与宿主机隔离,提供更高的安全性。
      • 缺点:
        1. 管理复杂度:需要通过 Docker 命令或配置文件管理数据卷。
        2. 性能可能略低:由于隔离层,可能会有轻微的性能开销。
    • docker run指令:-v <数据卷名>:<容器内部文件路径>

      完整指令:docker run -d -p 8080:80 -v ngconf:/etc/nginx --name app01 nginx

    • 数据卷目录:/var/lib/docker/volumes/<volume-name>

    • 数据卷常见命令:

       # 查看数据卷
      docker volume ls
      # 删除数据卷
      docker volume rm 
      # 查看数据卷详情
      docker volume inspect <数据卷名>
      # 删除未使用的数据卷
      docker volume prune 
      #查看容器挂载了哪些数据卷
      docker inspect <容器名>
      
  3. 比较总结

    • 目录挂载适用于需要直接访问宿主机文件系统的场景,如开发调试,或需要高性能的场景。
    • 数据卷适用于生产环境,尤其是需要数据持久化、备份和迁移的场景。

五、Docker容器通信

  1. Docker基本通信原理:docker为每个容器分配唯一ip,使用容器ip+容器端口 可以互相访问,但是ip由于各种原因可能会变化

  2. 自定义网络常见指令:

    #创建自定义网络
    docker network create my_custom_network
    #创建两个容器并连接到自定义网络
    docker run -d --name container1 --network my_custom_network nginx
    docker run -d --name container2 --network my_custom_network nginx
    #验证容器间通信
    docker exec -it container1 ping container2
    

六、Docker Compose

  1. 官方文档:https://docs.docker.com/compose/compose-file/

  2. 顶级元素:

在这里插入图片描述

  1. 示例文件

    name: myblog
    services:
      mysql:
        container_name: mysql
        image: mysql:8.0
        ports:
          - "3306:3306"
        environment:
          - MYSQL_ROOT_PASSWORD=123456
          - MYSQL_DATABASE=wordpress
        volumes:
          - mysql-data:/var/lib/mysql
          - /app/myconf:/etc/mysql/conf.d
        restart: always
        networks:
          - blog
    
      wordpress:
        image: wordpress
        ports:
          - "8080:80"
        environment:
          WORDPRESS_DB_HOST: mysql
          WORDPRESS_DB_USER: root
          WORDPRESS_DB_PASSWORD: 123456
          WORDPRESS_DB_NAME: wordpress
        volumes:
          - wordpress:/var/www/html
        restart: always
        networks:
          - blog
        depends_on:
          - mysql
    
    volumes:
      mysql-data:
      wordpress:
    
    networks:
      blog:
    
  2. docker compose启动:在yaml文件的根目录下 docker compose -f compose.yaml up -d

    • -d:表示后台方式
    • -f :表示文件名compose.yaml
  3. 关闭:docker compose down

七、Dockerfile

  1. 常见指令

在这里插入图片描述

  1. 示例Dockerfile

    FROM openjdk:17  #基础环境
    
    LABEL author=leifengyang  #标签
    
    COPY app.jar /app.jar  #复制文件
    
    EXPOSE 8080     #暴露端口
    
    ENTRYPOINT ["java","-jar","/app.jar"]   #执行指令
    
  2. 制作镜像

    • 指令:docker build -f Dockerfile -t myjavaapp:v1.0 .
    • -f :镜像文件
    • -t:镜像名称
    • .:表示宿主机工作目录
  • 28
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值