• Docker


    安装docker

    1、环境准备

    1、CentOS 7
    2、使用FinalShell 连接远程CentOS服务器

    2、环境查看

    # 系统内核是3.10 以上的
    [root@vmlocalhost ~]# uname -r
    3.10.0-1127.el7.x86_64
    cat /etc/os-release
    
    # 系统版本
    [root@vmlocalhost ~]# cat /etc/os-release 
    NAME="CentOS Linux"
    VERSION="7 (Core)"
    ID="centos"
    ID_LIKE="rhel fedora"
    VERSION_ID="7"
    PRETTY_NAME="CentOS Linux 7 (Core)"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o:centos:centos:7"
    HOME_URL="https://www.centos.org/"
    BUG_REPORT_URL="https://bugs.centos.org/"
    
    CENTOS_MANTISBT_PROJECT="CentOS-7"
    CENTOS_MANTISBT_PROJECT_VERSION="7"
    REDHAT_SUPPORT_PRODUCT="centos"
    REDHAT_SUPPORT_PRODUCT_VERSION="7"
    

    3、安装

    查看dockers官方文档

    #1、卸载旧的版本
    yum remove docker 
    
                      docker-client 
                      docker-client-latest 
                      docker-common 
                      docker-latest 
                      docker-latest-logrotate 
                      docker-logrotate 
                      docker-engine
    
    
    #2、需要的安装包
    yum install -y yum-utils
    
    #3、设置镜像的仓库
    yum-config-manager 
        --add-repo 
        https://download.docker.com/linux/centos/docker-ce.repo   #默认国外的
    
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  #国内阿里云镜像仓库 推荐
    
    
    #更新yum软件包索引
    yum makecache fast
    
    #4、安装docker相关 docker-ce 社区版,docker-ee 企业办
    yum install docker-ce docker-ce-cli containerd.io    #安装最新版本
    
    yum install docker-ce-20.10.3 docker-ce-cli-20.10.3 containerd.io  # 指定安装版本
    
    #5、启动docker
    systemctl start docker
    
    #6、查看是否安装成功
    docker version
    
    #7、测试docker
    docker pull hello-world #拉去镜像
    docker run hello-world
    
    #8、查看下载好的 hello-world 镜像
    [root@vmlocalhost ~]# docker images
    REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
    hello-world   latest    bf756fb1ae65   13 months ago   13.3kB
    
    

    卸载docker

    #1、卸载 Docker Engine、 CLI 和 Containerd 软件包:
    yum remove docker-ce docker-ce-cli containerd.io
    
    #2、删除所有图像、容器和卷 (主机上的映像、容器、卷或自定义配置文件不会自动删除)
    rm -rf /var/lib/docker
    

    配置阿里云镜像加速

    1、登录阿里云

    2、找到镜像加速地址

    3、配置使用

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://sqea11gb.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    Docker的常用命令

    帮助命令

    docker version  # 显示docker版本信息
    docker info     # 显示docker的系统信息,包含镜像和容器数量
    

    帮助文档地址
    https://docs.docker.com/engine/reference/commandline/docker/

    镜像命令

    docker images

    [root@vmlocalhost docker]# docker images
    REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
    hello-world   latest    bf756fb1ae65   13 months ago   13.3kB
    
    #解释
    REPOSITORY 镜像的仓库源
    TAG        镜像的标签
    IMAGE ID   镜像的Id
    CREATED    镜像的创建时间
    SIZE       镜像的大小
    
    #可选项
    -a --all    #列出所有镜像
    -q --quiet  #只显示镜像ID
    -aq         #列出所有镜像ID
    

    docker search

    [root@vmlocalhost /]# docker search mysql
    NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    mysql                             MySQL is a widely used, open-source relation…   10516     [OK]       
    mariadb                           MariaDB is a community-developed fork of MyS…   3927      [OK] 
    
    # 可选项,通过搜索来过滤
    --filter=stars=1000  # 搜索出的镜像 STARS 大于1000
    
    [root@vmlocalhost /]# docker search --filter=stars=6000 mysql
    NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    mysql     MySQL is a widely used, open-source relation…   10516     [OK] 
    

    docker pull 下载镜像

    # 下载镜像 docker pull 镜像名称[:tag]
    
    [root@iZwz9b8v7o84uupjlhulipZ ~]# docker pull mysql
    Using default tag: latest               # 如果不写 tag,默认就是 latest
    latest: Pulling from library/mysql
    a076a628af6f: Pull complete             # 分层下载,docker image的核心 联合文件系统
    f6c208f3f991: Pull complete 
    88a9455a9165: Pull complete 
    406c9b8427c6: Pull complete 
    7c88599c0b25: Pull complete 
    25b5c6debdaf: Pull complete 
    43a5816f1617: Pull complete 
    1a8c919e89bf: Pull complete 
    9f3cf4bd1a07: Pull complete 
    80539cea118d: Pull complete 
    201b3cad54ce: Pull complete 
    944ba37e1c06: Pull complete 
    Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c
    Status: Downloaded newer image for mysql:latest
    docker.io/library/mysql:latest         # 真实地址
    
    # 等价
    docker pull mysql
    docker pull docker.io/library/mysql:latest
    
    #指定版本下载 (版本要在仓库中支持)
    # docker pull mysql:8.0.23
    [root@iZwz9b8v7o84uupjlhulipZ ~]# docker pull mysql:8.0.23
    8.0.23: Pulling from library/mysql
    Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c
    Status: Downloaded newer image for mysql:8.0.23
    docker.io/library/mysql:8.0.23
    
    

    docker rmi 删除镜像

    docker rmi -f 镜像ID                 #删除指定镜像
    docker rmi -f 镜像ID 镜像ID2 镜像ID3  #删多个镜像
    docker rmi -f $(docker images -aq)   #递归删除所有镜像
    

    容器命令

    说明:我们有了镜像才可以创建容器,下载一个centos镜像测试学习

    docker pull centos
    

    新建容器

    docker run [可选参数] image
    
    # 参数说明
    --name='Name'          容器名称 tomcat01 tomcat02 ,用来区分容器
    -d                     后台方式运行
    -it                    使用交互方式,进入容器查看内容
    -p                     指定容器端口 -p 8080:8080
          -p 主机端口:容器端口
          -p 容器端口
    -P                     随机指定端口
    
    
    
    # 测试,启动并进入容器
    [root@vmlocalhost /]# docker run -it centos /bin/bash
    
    # 从容器中退回主机
    [root@e2341234 /]# exit
    

    列出所有运行的容器

    # docker ps 命令
     -a    #列出当前正在运行的容器+历史运行过的容器
     -n=?  #显示最忌创建的容器
     -q    #只显示容器的编号
    
    [root@vmlocalhost ~]# docker ps
    

    退出容器

    exit          #容器停止,退出
    ctrl+q+p      #容器不停止,退出
    

    删除容器

    docker rm 容器Id       #删除容器,不能删除运行的容器 
    docker rm -f 容器Id    #强制删除容器
    docker rm -f $(docker ps -aq)  #删除所有容器,包含运行的容器
    
    

    启动和停止容器的操作

    docker start 容器Id      # 启动容器
    docker restart 容器Id    # 重启容器
    docker stop 容器Id       # 停止容器
    docker kill 容器Id       # 杀掉容器(无法停止的时候,杀掉)
    

    常用其他命令

    后台启动容器

    # 命令 docker run -d 镜像名称
    [root@vmlocalhost /]# docker run -d centos
    
    # 问题docker ps 发现centos 停止了
    
    # 常见的坑,docker容器使用后台运行,就必须有一个前台进程,docker 发现没有应用,就会自动停止。
    # nginx,容器启动后,发现自己没有提供服务,就会立刻停止。
    

    查看日志

    docker logs -ft --tail 10 容器Id
    
    docker logs [可选参数] 容器Id
    -f #日志内容流动输出
    -t #显示日志时间戳
    --tail num  #显示最新多少条日志
    

    查看容器中的进程信息

    docker top 容器Id
    

    查看容器元数据

    docker inspect 容器Id
    

    进入当前正在运行的容器

    # 通查容器都是在后台运行的,需要进入容器,修改一下配置
    
    # 命令
    docker exec -it 容器id /bin/bash
    
    # 方式二
    docker attach 容器id
    # 正在执行当前代码
    
    docker exec      # 进入容器后开启一个新的终端,可以在里面操作(常用)
    docker attach    # 进入容器正在执行的终端,不会启动新的进程
    

    从容器内拷贝文件到主机上

    docker cp 容器id:容器内的路径 目的的主机路径
    

    测试

    1、搜索镜像(在官网上搜索镜像)
    2、拉取镜像 pull (注意防火墙)
    3、运行镜像 run

    
    # 拉取镜像(没有指定版本,默认最新)
    [root@vmlocalhost docker]# docker pull nginx
    Using default tag: latest
    latest: Pulling from library/nginx
    
    # 运行镜像
    # --name 给容器命名
    # -d     后台运行
    # -p     宿主端口:容器内部端口
    [root@vmlocalhost docker]# docker run -d --name nginx01 -p 3344:80 nginx
    cf5bf808cfce53ca9ebd8811799b0e69e70ec1f487f752af8ccd6a484d558626
    
    # 验证Nginx是否启动成功
    [root@vmlocalhost docker]# curl localhost:3344
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
        body {
             35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    
    # 进入容器
    [root@vmlocalhost docker]# docker exec -it cf5bf80 /bin/bash
    root@cf5bf808cfce:/# whereis nginx
    nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
    
    

    提交Commit

    对原容器进行修改后,提交成一个新的镜像

    # docker commit -a="作者" -m="消息" 容器Id  提交的镜像 目标镜像:[TAG]
    
    [root@iZwz9b8v7o84uupjlhulipZ ~]# docker commit -a="liang" -m="This is Test Commit" 977fe4a03958 tomcat02:1.1
    [root@iZwz9b8v7o84uupjlhulipZ ~]# docker images
    REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
    tomcat02      1.1       3fa371283039   5 minutes ago   654MB
    
    

    容器数据卷

    Docker容器中产生的数据,同步到本地!目录的挂载,将容器内的目录,挂载到linux上面。
    总结:容器的持久化和同步操作!容器间也是可以数据共享的;容器删除时,挂载的目录不会删除,但是如果在容器内删除,会同步到挂载目录

    使用数据卷

    方式1:直接使用命令挂载 -v

    # docker run -it -v 主机目录:容器目录
    
    # 测试
    [root@iZwz9b8v7o84uupjlhulipZ home]# docker images
    REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
    centos        latest    300e315adb2f   2 months ago    209MB
    [root@iZwz9b8v7o84uupjlhulipZ home]# docker run -it -v /home/ceshi:/home/ centos /bin/bash
    [root@1c7e8c87a5c6 /]# ls
    bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    [root@1c7e8c87a5c6 /]# cd home/
    [root@1c7e8c87a5c6 home]# ls 
    [root@1c7e8c87a5c6 home]# touch containerfile.java
    [root@1c7e8c87a5c6 home]# ls
    containerfile.java
    [root@1c7e8c87a5c6 home]# exit
    exit
    [root@iZwz9b8v7o84uupjlhulipZ home]# ls
    ceshi
    [root@iZwz9b8v7o84uupjlhulipZ home]# cd ceshi/
    [root@iZwz9b8v7o84uupjlhulipZ ceshi]# ls
    containerfile.java
    
    
    [root@iZwz9b8v7o84uupjlhulipZ ceshi]# docker ps -a
    CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS                      PORTS                    NAMES
    1c7e8c87a5c6   centos         "/bin/bash"              9 minutes ago   Exited (0) 8 minutes ago                             happy_tesla
    
    # 查看容器是否挂载成功 Mounts 节点
    [root@iZwz9b8v7o84uupjlhulipZ ceshi]# docker inspect 1c7e8c87a5c6
    

    安装mysql

    [root@iZwz9b8v7o84uupjlhulipZ nginx]# docker images
    REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
    mysql         5.7       a70d36bc331a   4 weeks ago     449MB
    [root@iZwz9b8v7o84uupjlhulipZ nginx]# docker run -d --name my-mysql -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
    
    # -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql    挂载mysql的配置和数据库存放地址
    # -p 3306:3306                                                                配置主机和容器的映射端口
    # -e MYSQL_ROOT_PASSWORD=123456                                               执行命令,设置mysql的存储密码
    # --name                                                                      容器名称
    

    具名挂载和匿名挂载

    # 匿名挂载(无需)
    -v 容器内路径
    
    # 查看 volume 卷情况
    docker volume ls
    
    # 具名挂载
    通过 -v 卷名:容器内路径   #卷名前不能有 /
    
    # 查看卷名的路径
    docker volume inspect 卷名
    
    # 测试 Nginx 具名挂载
    [root@iZwz9b8v7o84uupjlhulipZ home]# docker run -d -p 3344:80 -v my-nginx:/etc/nginx nginx
    120c74a57434c151ecf01b69c02f9c046ea1525b62bdbb3d8633e27fd9897222
    [root@iZwz9b8v7o84uupjlhulipZ home]# docker ps
    CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                               NAMES
    120c74a57434   nginx       "/docker-entrypoint.…"   4 seconds ago    Up 3 seconds    0.0.0.0:3344->80/tcp                objective_elgamal
    
    [root@iZwz9b8v7o84uupjlhulipZ home]# docker volume ls
    DRIVER    VOLUME NAME
    local     my-nginx
    
    [root@iZwz9b8v7o84uupjlhulipZ home]# docker volume inspect my-nginx
    [
        {
            "CreatedAt": "2021-02-20T16:40:09+08:00",
            "Driver": "local",
            "Labels": null,
            "Mountpoint": "/var/lib/docker/volumes/my-nginx/_data",  # 挂载到的宿主机地址
            "Name": "my-nginx",
            "Options": null,
            "Scope": "local"
        }
    ]
    [root@iZwz9b8v7o84uupjlhulipZ home]# cd /var/lib/docker/volumes/my-nginx/_data
    [root@iZwz9b8v7o84uupjlhulipZ _data]# ls
    conf.d  fastcgi_params  koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params  uwsgi_params  win-utf
    
    

    springboot项目的DockerFile

    # 该镜像需要依赖的基础镜像
    FROM java:8
    # 将targer目录下的jar包复制到docker容器/home/springboot目录下面目录下面
    ADD demo-package-0.0.1-SNAPSHOT.jar /springboot-dockerfile.jar
    
    CMD ["--server.port=8081"]
    # 声明服务运行在8080端口
    EXPOSE 8080
    # 执行命令
    CMD ["java","-jar","/springboot-dockerfile.jar"]
    
  • 相关阅读:
    SpringMVC学习笔记六:类型转换器及类型转换异常处理
    SpringMVC学习笔记五:HandlerExceptionResolver异常处理
    SpringMVC学习笔记四:SimpleMappingExceptionResolver异常处理
    SpringMVC学习笔记三:Controller的返回值
    SpringMVC学习笔记二:参数接受
    SSH+Ajax实现用户名重复检查(二)
    SSH+Ajax实现用户名重复检查(一)
    Java添加事件的四种方式
    用Java开发一个本地服务管理软件
    Java Web开发中的名词解释
  • 原文地址:https://www.cnblogs.com/songl/p/Docker.html
Copyright © 2020-2023  润新知