• Docker—概述与安装


    目录

    1.百度百科介绍Docker

    2.Docker 架构

    3.Docker安装 

    4.Docker卸载 

    5.配置阿里云镜像加速 

    6.Docker容器运行流程 

    7.底层原理

    Docker为什么比VM Ware快?

    8.Docker常用命令 

    8.1 基础命令

    8.2 镜像命令 

    8.3 容器命令


    1.百度百科介绍Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 LinuxWindows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

    解析:我们之前开发,发布一个项目,每台机器都要部署环境(Redis,ES,Mysql...),而且部署环境还有可能出错(为什么我电脑上能跑,你电脑上不能跑哈哈啊)。因此我们想发布项目能不能把环境也一起打包?(jar+(Redis,ES,Mysql...))。Docker就是解决了这一个问题。Docker是把应用和依赖一起打包成一个整体镜像,并且他们之间互不影响。打包的镜像也可以再发布到Linux上。

    比较Docker和虚拟机技术的不同:
    1.传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
    2.容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了,Docker占用空间更小,运行速度更快。
    3.每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响。 

    注意:Docker不能取代虚拟机(Linux)!

    2.Docker 架构

    Docker 包括三个基本概念:

    • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
    • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
    • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。仓库分为公有仓库和私有仓库!    Docker Hub (默认是国外的)

    Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

    Docker 容器通过 Docker 镜像来创建。

    容器与镜像的关系类似于面向对象编程中的对象与类。

    3.Docker安装 

    1.卸载旧的版本

    1.  yum remove docker \
    2.                   docker-client \
    3.                   docker-client-latest \
    4.                   docker-common \
    5.                   docker-latest \
    6.                   docker-latest-logrotate \
    7.                   docker-logrotate \
    8.                   docker-engine

    2.下载需要的安装包 

    yum install -y yum-utils 

    3.设置镜像的仓库 
     

    1. yum-config-manager \
    2.     --add-repo \
    3.     https://download.docker.com/linux/centos/docker-ce.repo  #国外的地址
    4.     
    5.     # 设置阿里云的Docker镜像仓库
    6. yum-config-manager \
    7.     --add-repo \
    8.     https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  #国外的地址

    4.更新yum软件包索引 

    yum makecache fast 

    5.安装docker相关的配置 

    docker-ce 是社区版,docker-ee 企业版  

    yum install docker-ce docker-ce-cli containerd.io

    6.启动Docker 
     

    1. systemctl start docker
    2. # 查看当前版本号,是否启动成功
    3. docker version
    4. # 设置开机自启动
    5. systemctl enable docker

    7. run helloworld测试

    docker run hello-world 

     查看下载的hello world镜像   docker images

    4.Docker卸载 

    1. # 1. 卸载依赖
    2. yum remove docker-ce docker-ce-cli containerd.io
    3. # 2. 删除资源  . /var/lib/docker是docker的默认工作路径
    4. rm -rf /var/lib/docker

    5.配置阿里云镜像加速 

    进入阿里云官网,搜索容器镜像服务   加速地址每个人都不一样,不要复制粘贴!

    1. sudo mkdir -p /etc/docker
    2. sudo tee /etc/docker/daemon.json <<-'EOF'
    3. {
    4. "registry-mirrors": ["https://wg0ggpwi.mirror.aliyuncs.com"]
    5. }
    6. EOF
    7. sudo systemctl daemon-reload
    8. sudo systemctl restart docker

    6.Docker容器运行流程 

     

    7.底层原理

    Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问!

    Docker Server接收到Docker-Client的指令,就会执行这个指令!

    通过客户端的命令到守护进程,默认容器是一个也没启动的,根据命令去启动相应的容器。 

    Docker为什么比VM Ware快?

    1、Docker比虚拟机更少的抽象层

    2、docker利用宿主机的内核,VM需要的是Guest OS

     

    8.Docker常用命令 

    8.1 基础命令

    1. docker version #查看docker的版本信息
    2. docker info #查看docker的系统信息,包括镜像和容器的数量
    3. docker 命令 --help #帮助命令(可查看可选的参数)
    4. docker COMMAND --help

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

    8.2 镜像命令 

    docker images 查看本地主机的所有镜像

    --all , -aShow all images (default hides intermediate images)
    --digestsShow digests
    --filter , -fFilter output based on conditions provided
    --formatPretty-print images using a Go template
    --no-truncDon't truncate output
    --quiet , -qOnly show image IDs
    1. [root@wjc01 ~]# docker images
    2. REPOSITORY TAG IMAGE ID CREATED SIZE
    3. hello-world latest feb5d9fea6a5 9 months ago 13.3kB
    4. #解释:
    5. 1.REPOSITORY 镜像的仓库源
    6. 2.TAG 镜像的标签
    7. 3.IMAGE ID 镜像的id
    8. 4.CREATED 镜像的创建时间
    9. 5.SIZE 镜像的大小
    10. [root@wjc01 ~]# docker images -a #显示全部
    11. REPOSITORY TAG IMAGE ID CREATED SIZE
    12. hello-world latest feb5d9fea6a5 9 months ago 13.3kB
    13. [root@wjc01 ~]# docker images -q #只显示id
    14. feb5d9fea6a5
    15. [root@wjc01 ~]# docker images -aq #显示所有镜像的id
    16. feb5d9fea6a5

     docker search 搜索镜像

    Name, shorthandDefaultDescription
    --filter , -fFilter output based on conditions provided
    --formatPretty-print search using a Go template
    --limit25Max number of search results
    --no-truncDon't truncate output
    1. [root@wjc01 ~]# docker search mysql
    2. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
    3. mysql MySQL is a widely used, open-source relation… 12785 [OK]
    4. mariadb MariaDB Server is a high performing open sou… 4910 [OK]
    5. percona Percona Server is a fork of the MySQL relati… 579 [OK]
    6. phpmyadmin phpMyAdmin - A web interface for MySQL and M… 558 [OK]
    7. bitnami/mysql Bitnami MySQL Docker Image 71 [OK]
    8. linuxserver/mysql-workbench 37
    9. linuxserver/mysql A Mysql container, brought to you by LinuxSe… 36
    10. ubuntu/mysql MySQL open source fast, stable, multi-thread… 34
    11. circleci/mysql MySQL is a widely used, open-source relation… 26
    12. google/mysql MySQL server for Google Compute Engine 21 [OK]
    13. rapidfort/mysql RapidFort optimized, hardened image for MySQL 13
    14. vmware/harbor-db Mysql container for Harbor 10
    15. bitnami/mysqld-exporter 3
    16. ibmcom/mysql-s390x Docker image for mysql-s390x 2
    17. vitess/mysqlctld vitess/mysqlctld 1 [OK]
    18. newrelic/mysql-plugin New Relic Plugin for monitoring MySQL databa… 1 [OK]
    19. nasqueron/mysql 1 [OK]
    20. mirantis/mysql 0
    21. docksal/mysql MySQL service images for Docksal - https://d… 0
    22. drud/mysql-local-57 ddev mysql local container 0
    23. drud/mysql 0
    24. drud/mysql-docker-local-57 This repo has been deprecated, new tags are … 0
    25. drud/mysql-docker-local docker containers for local womysql rk 0 [OK]
    26. cimg/mysql 0
    27. silintl/mysql-backup-restore Simple docker image to perform mysql backups… 0 [OK]
    28. [root@wjc01 ~]# docker search mysql -f=stars=3000 #过滤只显示收藏过3k的
    29. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
    30. mysql MySQL is a widely used, open-source relation… 12785 [OK]
    31. mariadb MariaDB Server is a high performing open sou… 4910 [OK]

    docker pull 镜像名[:tag] 下载镜像          #tag为版本号,不加默认下载最新版

    1. [root@wjc01 ~]# docker pull mysql
    2. Using default tag: latest #如果不写tag默认就是latest
    3. latest: Pulling from library/mysql
    4. 6ec7b7d162b2: Pull complete #分层下载,docker image的核心-联合文件系统
    5. fedd960d3481: Pull complete
    6. 7ab947313861: Pull complete
    7. 64f92f19e638: Pull complete
    8. 3e80b17bff96: Pull complete
    9. 014e976799f9: Pull complete
    10. 59ae84fee1b3: Pull complete
    11. ffe10de703ea: Pull complete
    12. 657af6d90c83: Pull complete
    13. 98bfb480322c: Pull complete
    14. 6aa3859c4789: Pull complete
    15. 1ed875d851ef: Pull complete
    16. Digest: sha256:78800e6d3f1b230e35275145e657b82c3fb02a27b2d8e76aac2f5e90c1c30873 #签名
    17. Status: Downloaded newer image for mysql:latest
    18. docker.io/library/mysql:latest #下载来源的真实地址
    19. #docker pull mysql等价于
    20. #docker pull docker.io/library/mysql:latest
    21. #指定版本下载
    22. [root@wjc01 ~]# docker pull mysql:5.7
    23. 5.7: Pulling from library/mysql
    24. 6ec7b7d162b2: Already exists #因为之前下载过了,分层的好处,无需下载了
    25. fedd960d3481: Already exists
    26. 7ab947313861: Already exists
    27. 64f92f19e638: Already exists
    28. 3e80b17bff96: Already exists
    29. 014e976799f9: Already exists
    30. 59ae84fee1b3: Already exists
    31. 7d1da2a18e2e: Pull complete
    32. 301a28b700b9: Pull complete
    33. 529dc8dbeaf3: Pull complete
    34. bc9d021dc13f: Pull complete
    35. Digest: sha256:c3a567d3e3ad8b05dfce401ed08f0f6bf3f3b64cc17694979d5f2e5d78e10173
    36. Status: Downloaded newer image for mysql:5.7
    37. docker.io/library/mysql:5.7

     docker rmi 删除镜像

    1. #1.删除指定的镜像id
    2. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f 镜像id
    3. #2.删除多个镜像id
    4. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f 镜像id 镜像id 镜像id
    5. #3.删除全部的镜像id
    6. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f $(docker images -aq)

     

    8.3 容器命令

    如何拉取一个centos镜像

    docker pull centos
    1. 运行容器的命令说明:
    2. docker run [可选参数] image
    3. #参数说明
    4. --name="名字"           指定容器名字
    5. -d                     后台方式运行
    6. -it                    使用交互方式运行,进入容器查看内容
    7. -p                     指定容器的端口
    8. (
    9. -p ip:主机端口:容器端口  配置主机端口映射到容器端口
    10. -p 主机端口:容器端口
    11. -p 容器端口
    12. )
    13. -P                     随机指定端口(大写的P)

    运行并进入容器centos

    1. [root@wjc01 ~]# docker run -it centos /bin/bash
    2. [root@bd1b8900c547 /]# ls
    3. bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var

    退出容器命令:

    1. #exit 停止并退出容器(后台方式运行则仅退出)
    2. #Ctrl+P+Q 不停止容器退出
    3. [root@bd1b8900c547 /]# exit
    4. exit
    5. [root@wjc01 ~]#

    列出运行过的容器命令

    1. #docker ps
    2. # 列出当前正在运行的容器
    3. -a # 列出所有容器的运行记录
    4. -n=? # 显示最近创建的n个容器
    5. -q # 只显示容器的编号
    6. [root@wjc01 ~]# docker ps
    7. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    8. [root@wjc01 ~]# docker ps -a
    9. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    10. bca129320bb5 centos "/bin/bash" 4 minutes ago Exited (0) 3 minutes ago optimistic_shtern
    11. bd1b8900c547 centos "/bin/bash" 6 minutes ago Exited (0) 5 minutes ago cool_tesla
    12. cf6adbf1b506 bf756fb1ae65 "/hello" 5 hours ago Exited (0) 5 hours ago optimistic_darwin

    删除容器命令:

    1. docker rm 容器id #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f
    2. docker rm -f $(docker ps -aq) #删除所有的容器
    3. docker ps -a -q|xargs docker rm #删除所有的容器

    启动和停止容器命令:

    1. docker start 容器id #启动容器
    2. docker restart 容器id #重启容器
    3. docker stop 容器id #停止当前运行的容器
    4. docker kill 容器id #强制停止当前容器

     

    8.4 其他命令

    后台启动容器

    日志的查看 

    1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker logs --help
    2. Usage: docker logs [OPTIONS] CONTAINER
    3. Fetch the logs of a container
    4. Options:
    5. --details Show extra details provided to logs
    6. -f, --follow Follow log output
    7. --since string Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
    8. -n, --tail string Number of lines to show from the end of the logs (default "all")
    9. -t, --timestamps Show timestamps
    10. --until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
    11. 常用:
    12. docker logs -tf 容器id
    13. docker logs --tail number 容器id #num为要显示的日志条数
    14. #docker容器后台运行,必须要有一个前台的进程,否则会自动停止
    15. #编写shell脚本循环执行,使得centos容器保持运行状态
    16. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d centos /bin/sh -c "while true;do echo hi;sleep 5;done"
    17. c703b5b1911ff84d584390263a35707b6024816e1f46542b61918a6327a570dc
    18. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
    19. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    20. c703b5b1911f centos "/bin/sh -c 'while t…" 13 seconds ago Up 10 seconds pedantic_banach
    21. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker logs -tf --tail 10 c703b5b1911f
    22. 2020-12-27T03:34:07.255599560Z hi
    23. 2020-12-27T03:34:12.257641517Z hi
    24. 2020-12-27T03:34:17.259706294Z hi
    25. 2020-12-27T03:34:22.261693707Z hi
    26. 2020-12-27T03:34:27.262609289Z hi
    27. 2020-12-27T03:34:32.267862677Z hi
    28. 2020-12-27T03:34:37.270382873Z hi
    29. 2020-12-27T03:34:42.272414182Z hi
    30. 2020-12-27T03:34:47.274823243Z hi
    31. 2020-12-27T03:34:52.277419274Z hi

    查看容器中进程信息

    1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker top 容器id
    2. UID PID PPID C STIME TTY TIME CMD
    3. root 11156 11135 0 11:31 ? 00:00:00 /bin/sh -c while true;do echo hi;sleep 5;done
    4. root 11886 11156 0 11:43 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5

    查看容器的元数据

    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker inspect 容器id
    

    进入当前正在运行的容器​​​​​​​

    因为通常我们的容器都是使用后台方式来运行的,有时需要进入容器修改配置

    方式一: /bin/bash是必须创建一个进程,否则容器会自杀

    1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it 容器id /bin/bash
    2. [root@c703b5b1911f /]# ls
    3. bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
    4. [root@c703b5b1911f /]# ps -ef
    5. UID PID PPID C STIME TTY TIME CMD
    6. root 1 0 0 03:31 ? 00:00:00 /bin/sh -c while true;do echo hi;sleep 5;done
    7. root 279 0 0 03:54 pts/0 00:00:00 /bin/bash
    8. root 315 1 0 03:56 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5
    9. root 316 279 0 03:56 pts/0 00:00:00 ps -ef

    方式二:

    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker attach 容器id

    docker exec 进入容器后开启一个新的终端,可以在里面操作(常用)

    docker attach 进入容器正在执行的终端,不会启动新的进程

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

    ​​​​​​​拷贝操作的命令如下:

    1. #拷贝容器的文件到主机中
    2. docker cp 容器id:容器内路径 目的主机路径
    3. #拷贝宿主机的文件到容器中
    4. docker cp 目的主机路径 容器id:容器内路径
    1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it c703b5b1911f /bin/bash
    2. [root@c703b5b1911f /]# cd home
    3. [root@c703b5b1911f home]# ls
    4. #touch 新建文件
    5. [root@c703b5b1911f home]# touch test.java
    6. [root@c703b5b1911f home]# ls
    7. test.java
    8. [root@c703b5b1911f home]# exit
    9. exit
    10. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
    11. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    12. c703b5b1911f centos "/bin/sh -c 'while t…" 35 minutes ago Up 35 minutes pedantic_banach
    13. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker cp c703b5b1911f:/home/test.java /home
    14. [root@iZwz99sm8v95sckz8bd2c4Z ~]# ls /home
    15. hai pan test.java

  • 相关阅读:
    如何在 Spring Boot 中实现容错机制
    C/C++饮品自动贩卖机系统
    MATLAB中cellstr函数的使用
    springboot个性化课程推荐系统毕业设计源码131805
    Lianwei 安全周报|2024.06.17
    达人评测r9 5900hx和i7 12700h差距 r95900hx和i712700h哪个好
    【毕业设计】新闻分类系统 - 深度学习 机器学习
    在线打印资料的软件叫什么名字来着
    1.2 w字+!Java IO 基础知识系统总结 | JavaGuide
    基于JAVA一起组局校园交友平台计算机毕业设计源码+系统+数据库+lw文档+部署
  • 原文地址:https://blog.csdn.net/m0_46845579/article/details/125490837