• Docker


    1.Docker概述

            Docker包括三个基本概念:镜像、容器、仓库

    镜像(Image)Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。
    容器(Container)

    容器是独立运行的一个或一组应用,是镜像运行时的实体。

    镜像和容器的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

    仓库(Repository)Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。

    2.Docker安装

            Docker的安装分为外网和内网安装。

    2.1 外网安装Docker

    2.1.1 Ubuntu安装Docker

    root@ubuntu:/home/lqs# wget -qO- https://get.docker.com/ | sh

    2.1.2 配置Docker镜像加速

            Docker镜像加速地址:

    • 科大镜像:https://docker.mirrors.ustc.edu.cn/
    • 网易:https://hub-mirror.c.163.com/
    • 阿里云:https://<你的ID>.mirror.aliyuncs.com
    • 七牛云加速器:https://reg-mirror.qiniu.com

            这里使用阿里云镜像加速阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台,查看阿里云加速地址。

    • Windows配置加速地址

            打开Docker Destop程序,在【Settings】-【Docker Engine】里面,配置加速地址:

    1. {
    2. ...
    3. "registry-mirrors":["https://bbx6hlst.mirror.aliyuncs.com"],
    4. ...
    5. }
    • Ubuntu16.04+、Debian8+、CentOS7配置加速地址

            对于使用 systemd 的系统,查看如下文件/etc/docker/daemon.json,如果没有daemon.json文件,则需要使用如下命令新建一个文件(注意mdkir命令是新建一个文件夹)

    sudo touch daemon.json

            如果文件存在,则使用sudo vim /etc/docker/daemon.json命令,写入如下内容:

    1. {
    2. "registry-mirrors":[
    3. "https://reg-mirror.qiniu.com/"
    4. ]
    5. }

            之后输入以下命令,重新启动服务:

    1. $ sudo systemctl daemon-reload
    2. $ sudo systemctl restart docker

            检查加速配置是否生效,输入命令docker info,如果看到以下内容,则表示配置成功:

    Registry Mirrors:
      https://bbx6hlst.mirror.aliyuncs.com/

    2.2 内网安装Docker

            Docker离线安装包下载地址:Index of linux/static/stable/x86_64/,这里以在Ubuntu里面安装为例,版本选择的是 docker-20.10.17.tgz

    • 通过Xftp将Docker离线安装包上传到Ubuntu任一文件目录下。
    • 使用tar命令,解压Docker离线安装包
    tar -zxvf docker-20.10.17.tgz
    • 使用mv命令,将解压后的Docker离线安装包文件,移到可执行文件目录下
    mv docker/* /usr/bin
    • 配置docker.service:vim /usr/lib/systemd/system/docker.service,输入以下内容
    1. [Unit]
    2. Description=Docker Application Container Engine
    3. Documentation=https://docs.docker.com
    4. After=network-online.target docker.socket firewalld.service containerd.service
    5. Wants=network-online.target
    6. Requires=docker.socket containerd.service
    7. [Service]
    8. Type=notify
    9. ExecStart=/usr/bin/dockerd -H fd:
    10. ExecReload=/bin/kill -s HUP $MAINPID
    11. TimeoutSec=0
    12. RestartSec=2
    13. Restart=always
    14. StartLimitBurst=3
    15. StartLimitInterval=60s
    16. LimitNOFILE=infinity
    17. LimitNPROC=infinity
    18. LimitCORE=infinity
    19. TasksMax=infinity
    20. Delegate=yes
    21. KillMode=process
    22. OOMScoreAdjust=-500
    23. [Install]
    24. WantedBy=multi-user.target
    • 启动Docker服务
    1. systemctl daemon.reload
    2. systemctl start docker.service
    3. systemctl info
    4. #开机自启
    5. systemctl enable docker

    3.Docker常用命令

    docker -v查看Docker版本
    docker info查看Docker配置信息
    docker images

    查看本地主机上的镜像

    docker pull

    获取一个镜像

    docker pull redis(获取redis镜像)

    docker rmi

    删除镜像

    docker rmi nginx:latest(表示删除版本为latest的Nginx镜像)

    docker run

    创建并启动一个容器

    docker run --name ixuea-redis -p 6379:6379 redis:latest

    docker ps查看已经启动的容器
    docker ps -a查看所有容器(包括已启动和未启动)
    docker start

    启动容器

    docker start redis

    docker stop

    停止容器

    docker stop redis

    docker rm

    删除未运行的容器

    docker rm redis

    docker rm -f

    删除正在运行的容器

    docker rm -f redis

    4.Docker 镜像(Images)    

    4.1 Docker官方镜像仓库

            官方镜像仓库地址:Docker Hub,带有DOCKER OFFICIAL IMAGE的是官方镜像。如下图所示:

     4.2 查看本机上的镜像

            使用docker images命令,来查看本地主机上的镜像

    1. root@lqs-virtual-machine:/home/lqs# docker images
    2. REPOSITORY TAG IMAGE ID CREATED SIZE
    3. redis latest 7614ae9453d1 7 months ago 113MB
    4. hello-world latest feb5d9fea6a5 10 months ago 13.3kB

            字段含义如下:

    REPOSITORY表示镜像的仓库源
    TAG镜像的标签,代表这个镜像的版本
    IMAGE ID镜像ID
    CREATED镜像创建时间
    SIZE镜像大小

    4.3 获取一个新的镜像

            使用docker pull命令来获取一个新的镜像,如下所示,获取安装Ngnix,#是加上去对应内容的注释,用于解释具体含义:

    1. root@ubuntu:/home/lqs# docker pull nginx
    2. Using default tag: latest
    3. # 表示从library/nginx下载
    4. latest: Pulling from library/nginx
    5. # docker镜像使用类似Git的方式管理,同时采用分层技术
    6. 1efc276f4ff9: Already exists
    7. baf2da91597d: Pull complete
    8. 05396a986fd3: Pull complete
    9. 6a17c8e7063d: Pull complete
    10. 27e0d286aeab: Pull complete
    11. b1349eea8fc5: Pull complete
    12. # docker文件的签名
    13. Digest: sha256:790711e34858c9b0741edffef6ed3d8199d8faa33f2870dea5db70f16384df79
    14. # 下载完成
    15. Status: Downloaded newer image for nginx:latest
    16. docker.io/library/nginx:latest

    4.4 Docker导入导出镜像

            1.导出镜像

    docker save -o nginx.tar nginx:latest

            2.导入镜像

    docker load -i nginx.tar

    5.容器

    5.1 创建并启动一个容器

             使用命令docker run,如下所示,创建并启动一个Nginx容器:

    docker run --rm --name lqs-nginx -p 80:80 nginx:latest

            字段含义如下:

    docker run表示创建一个容器
    --rm表示退出后,自动删除该容器。
    --name表示给这个容器取一个名字
    -p表示端口映射,格式为主机端口:容器端口,将容器端口映射到当前主机的端口,这样访问当前主机端口,就能访问到容器的端口
    nginx:latest表示使用nginx镜像,latest表示使用最新的版本

               运行成功后,浏览器访问http://localhost:80/,就能看到Nginx默认页面了,如下所示:

      

    6.Docker部署项目

    • 找一个目录存放相关文件,这里选择的目录为:/home/lqs/Work/Test
    • 在Test目录下,创建Dockerfile文件       

            使用命令touch Dockerfile来创建Dcokerfile文件,然后使用命令vim Dockerfile,编辑Dockerfile,输入以下内容:

    1. #指定基础镜像,不需要另外安装jdk
    2. FROM java:8
    3. #维护者
    4. MAINTAINER lqs
    5. #将本地文件添加到容器中,并更名为sms-send.jar
    6. COPY sms-send.jar sms-send.jar
    7. #指定访问端口,与yml文件汇总的端口一致
    8. EXPOSE 8080
    9. #容器启动时,运行该程序
    10. ENTRYPOINT ["java", "-jar", "sms-send.jar"]
    • 将jar包放在Test目录下,目录结构如下所示
    1. lqs@lqs-virtual-machine:~/Work/Test$ ls -l
    2. total 231044
    3. -rw-rw-r-- 1 lqs lqs 118 8月 19 15:53 Dockerfile
    4. drwxrwxr-x 2 lqs lqs 4096 8月 19 12:01 logs
    5. -rw-rw-r-- 1 lqs lqs 236579642 8月 19 11:29 sms-send.jar
    • 构建镜像
    docker build -t sms-send .
    • 创建并启动容器
    1. docker run -p 8080:8080 --name sms-send \
    2. > -v /home/lqs/Work/Test/logs:/home/lqs/Work/Test/logs \
    3. > -d sms-send

  • 相关阅读:
    js中的call() apply() bind()的用法
    自动控制原理2.3---控制系统的结构图与信号流图
    力扣二分查找:第一个错误的版本
    npm login报错 ‘proxy‘ config is set properly. See: ‘npm help config‘
    nginx配置详解
    Shiro【散列算法、Shiro会话、退出登录 、权限表设计、注解配置鉴权 】(五)-全面详解(学习总结---从入门到深化)
    MyBatis动态设置要连接的数据库地址,用户名,密码
    阿里一面,说说你了解zookeeper的应用场景有哪些?
    Redis系列---集群模式
    Camunda 7.x 系列【57】流程设计器
  • 原文地址:https://blog.csdn.net/qq_35507234/article/details/126398052