Docker基础1-3

Posted mingyuewu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker基础1-3相关的知识,希望对你有一定的参考价值。

Docker基础1-3

时间:2023-01-02
https://www.bilibili.com/video/BV1gr4y1U7CY/
xmind文档:https://www.aliyundrive.com/s/6iaQt9zLDVm

一、Docker简介

1、Docker解决了什么问题

Docker打破了过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。
举例:
传统方法部署博客系统,需要在服务器上安装mysql,redis,rabbitmq,nginx,运行jar包,将dist文件上传到指定位置,修改各软件的配置文件等;而Docker可以将上述数据库、中间件、配置文件、应用服务、程序运行所需要的依赖(最小化linux内核)等全部打包成一个image。在其他服务器上部署博客系统应用时,只需要安装docker,使用docker run image,即可完整部署该博客系统。

2、Docker理念

Docker是基于Go语言实现的云开源项目,Docker的主要目标是“Build,Ship and Run Any App,Anywhere”。一次镜像,处处运行。Docker是解决了运行环境和配置问题的软件容器,方便做持续集成并并有助于整体发布的容器虚拟化技术。

3、容器和虚拟机的比较

(1)虚拟机

虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程。

虚拟机缺点:
1 资源占用多 ,虚拟机是在宿主机上运行Hypervisor层软件,并模拟出完整的guest OS
2 冗余步骤多
3 启动慢

(2)容器

容器不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。Docker容器是在操作系统层面上实现虚拟化,Docker占用体积小,启动速度快。容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

(3) 为什么Docker比虚拟机快

docker不需要Hypervisor(虚拟机)
docker利用的是宿主机的内核,而不需要加载Guest OS内核

4、Docker官网

https://www.docker.com/
https://hub.docker.com/ 存放镜像image

二、Docker安装

1、安装前提条件

Docker必须部署在Linux内核系统上,要求系统为64位、Linux系统内核版本为 3.8以上。
查看内核
uname命令用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)

-bash-4.2# cat  /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 

-bash-4.2# uname -r
3.10.0-1160.53.1.el7.x86_64

2、Docker基本组成

(1)镜像image

Docker 镜像是一个只读模板,可以用来创建 Docker 容器。docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。

(2)容器container

从面向对象角度:
Docker 利用容器(Container)独立运行的一个或一组应用。镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
从镜像容器角度:
容器可以看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

(3)仓库repository

仓库(Repository)是集中存放镜像文件的场所。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库:Docker公司提供的Docker Hub。

3、Docker平台架构

Docker 是一个 C/S 模式的架构。

Docker客户端发送指令给Docker Server端处理。
如docker 客户端发送docker pull centos命令,Docker daemon守护进程接收到该条命令后检查本地是否有centos镜像,有则使用本地镜像,无则去配置的docker 镜像地址下载centos镜像,这里没有写版本,那就默认取lastest版本,如果是docker pull centos:7.3 则获取指定版本的centos镜像。获取到镜像后,运行docker run centos命令,则以centos镜像为模板,创建一个容器。

4、Centos7安装Docker步骤

官方安装文档:https://docs.docker.com/engine/install/centos/

(1)确保Linux内核版本3.8以上

(2) 卸载旧版本Docker

sudo yum remove docker \\
                  docker-client \\
                  docker-client-latest \\
                  docker-common \\
                  docker-latest \\
                  docker-latest-logrotate \\
                  docker-logrotate \\
                  docker-engine

(3)yum安装gcc及相关软件包

yum  -y  install gcc
yum -y intsall gcc-c++
yum install -y yum-utils

(4)设置稳定的镜像仓库,docker官网的仓库太慢,建议使用阿里云的

yum-config-manager  --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

(5) 更新yum软件包索引

yum   makecache  fast

(6) 安装Docker CE

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

(7) 启动docker

systemctl start docker

(8) 测试Docker是否启动成功

docker  version
docker  run hello-word

(9) 卸载Docker

systemctl stop docker
yum remove docker-ce   docker-ce-cli containerd.io
rm -fr /var/lib/docker
rm -fr /var/lib/containerd

5、Docker配置阿里云镜像加速器

https://blog.csdn.net/weixin_45764765/article/details/1283672197

三、Docker常用命令

1、启动类命令

1 启动Docker

systemctl  start  docker

2 停止docker

systemctl  stop  docker

3 重启docker

systemctl  restart  docker

4 查看docker状态

systemctl  status  docker

5 设置docker开机自启

systemctl  enable  docker

6 查看docker概要信息

docker info

7 查看帮助信息

docker --help

8 查看某个具体命令的帮助信息

docker run --help

2、镜像命令

# 1 查看本地主机的镜像
-bash-4.2# docker images
REPOSITORY        TAG       IMAGE ID       CREATED       SIZE
redis             latest    0256c63af7db   12 days ago   117MB
nginx             latest    1403e55ab369   12 days ago   142MB
rabbitmq          latest    3ddcc140fe5c   2 weeks ago   228MB
mysql             8.0       7484689f290f   3 weeks ago   538MB
primetoninc/jdk   1.8       f4b4fccc65bb   4 years ago   657MB

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

docker images 参数说明
-a  列出本地所有的镜像,包含历史镜像层
-q  静默模式,只显示镜像id
-----------------------------------------------------------------------------------
# 2  查找镜像 
-bash-4.2# docker search  redis  --limit 5
NAME                     DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
redis                    Redis is an open source key-value store that…   11695     [OK]       
redislabs/redisinsight   RedisInsight - The GUI for Redis                77                   
redislabs/redisearch     Redis With the RedisSearch module pre-loaded…   56                   
redislabs/redis          Clustered in-memory database engine compatib…   36                   
redislabs/rebloom        A probablistic datatypes module for Redis       21                   [OK]

NAME  镜像名称
DESCRIPTION   镜像描述
STARS 点赞数
OFFICIAL  是否官方
AUTOMATED   是否是自动构建的

参数说明  --limit  N  只列出N个镜像,不写limit时,默认展示25个镜像
-----------------------------------------------------------------------------------
# 3、下载镜像  docker  pull  镜像名称[:TAG]
-bash-4.2# docker pull mysql:5.7
5.7: Pulling from library/mysql
d26998a7c52d: Downloading [============================>                      ]  28.59MB/49.82MB
4a9d8a3567e3: Download complete 
........
701dea355691: Pull complete 
Digest: sha256:6306f106a056e24b3a2582a59a4c84cd199907f826eff27df36406f227cd9a7d
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
# docker pull mysql:5.7  指下载5.7版本的mysql
# docker pull mysql 指下载最新版本的mysql,等价于docker pull mysql:lastest
-----------------------------------------------------------------------------------
# 4、查看镜像、容器、数据卷所占的空间
-bash-4.2# docker system  df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          6         4         2.097GB   1.233GB (58%)
Containers      4         3         1.708kB   1.093kB (63%)
Local Volumes   3         1         191.6kB   130.7kB (68%)
Build Cache     0         0         0B        0B
-----------------------------------------------------------------------------------
# 5、删除镜像  docker  rmi   镜像名称或id
-bash-4.2# docker rmi  redis
Error response from daemon: conflict: unable to remove repository 
reference "redis" (must force) - container cec779594508 is using 
its referenced image 0256c63af7db

删除镜像时,必须没有容器使用该镜像,docker stop 容器名称或id,再删除镜像
或者使用 -f 选项,无论是否有容器使用该镜像,都可以删掉镜像 

3、容器命令

3.1 新建并启动容器

docker   run  [OPTIONS]  IMAGES   [COMMAND][ARGS]

------ OPTIONS说明----
--name="myredis"   为容器起一个新名字,否则系统随机给容器起名字
-d  后台运行容器,返回容器ID
-i   interactive 交互式运行容器,通常与 -t 一起使用,提供一个可以操作容器的终端
-t   tty  为容器分配一个伪终端,通常与-i 同时使用
-P   随机端口映射
docker  run  -it  centos:lastest  /bin/bash   创建启动centos容器,并提供一个交互式shell

3.2 列出当前正在运行的容器

docker   ps   [OPTIONS]
-a  列出当前所有正在运行的容器 + 历史上运行过的
-l  显示最近创建的容器
-n  显示最近n个创建的容器
-q  quiet 静默模式,只显示容器编号

3.3 退出容器

两种退出方式
exit 退出,容器停止:  docker run -it  centos /bin/bash 进入容器,exit退出容器,exit退出后,容器会停止运行
ctrl + p + q退出,容器不停止: docker run -it  centos /bin/bash 进入容器,退出容器,ctrl + p + q退出容器不停止

3.4 停止容器

docker  stop 容器ID或容器名称

3.5 强制停止容器

docker  kill 容器ID或容器名称

3.6 启动已停止的容器

docker  start  容器ID或容器名称

3.7 重启容器

docker restart  容器ID或容器名称

3.8 删除已停止的容器

docker   rm   容器ID或容器名称

3.9 启动守护式容器

docker   run   -d    redis:6.0.8    后台启动
docker   run   -it    redis:6.0.8   前台启动

3.10 查看容器日志

docker   logs  容器名称或容器ID

3.11 查看容器内运行的进程

docker  top  容器名称或容器ID

3.12 查看容器内部细节

docker  inspect 容器名称或容器ID

3.13 进入正在运行的容器,并以命令行交互

(1)
docker  exec  -it  容器ID   bashShell  使用exit退出不会导致容器停止。
exec是在容器中打开新的终端,并且可以启动新的进程
(2)
docker  attach   容器ID   使用exit退出会导致容器停止

一般使用docker  run -d redis 后台启动程序,然后docker exec -it  redis redis-cli  进入容器操作

3.14 从容器拷贝文件到宿主机

docker  cp  容器ID:容器内路径    宿主机路径
该命令在Linux命令行运行

3.15 导入和导出容器

docker   export 容器ID > 文件名.tar
cat  文件名.tar  | docker import - 镜像用户/镜像名:镜像版本号

4、总结

attach    Attach to a running container                 # 当前 shell 下 attach 连接指定运行镜像
build     Build an image from a Dockerfile              # 通过 Dockerfile 定制镜像
commit    Create a new image from a container changes   # 提交当前容器为新的镜像
cp        Copy files/folders from the containers filesystem to the host path   #从容器中拷贝指定文件或者目录到宿主机中
create    Create a new container                        # 创建一个新的容器,同 run,但不启动容器
diff      Inspect changes on a container's filesystem   # 查看 docker 容器变化
events    Get real time events from the server          # 从 docker 服务获取容器实时事件
exec      Run a command in an existing container        # 在已存在的容器上运行命令
export    Stream the contents of a container as a tar archive   # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
history   Show the history of an image                  # 展示一个镜像形成历史
images    List images                                   # 列出系统当前镜像
import    Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export]
info      Display system-wide information               # 显示系统相关信息
inspect   Return low-level information on a container   # 查看容器详细信息
kill      Kill a running container                      # kill 指定 docker 容器
load      Load an image from a tar archive              # 从一个 tar 包中加载一个镜像[对应 save]
login     Register or Login to the docker registry server    # 注册或者登陆一个 docker 源服务器
logout    Log out from a Docker registry server          # 从当前 Docker registry 退出
logs      Fetch the logs of a container                 # 输出当前容器日志信息
port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT    # 查看映射端口对应的容器内部源端口
pause     Pause all processes within a container        # 暂停容器
ps        List containers                               # 列出容器列表
pull      Pull an image or a repository from the docker registry server   # 从docker镜像源服务器拉取指定镜像或者库镜像
push      Push an image or a repository to the docker registry server    # 推送指定镜像或者库镜像至docker源服务器
restart   Restart a running container                   # 重启运行的容器
rm        Remove one or more containers                 # 移除一个或者多个容器
rmi       Remove one or more images       # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run       Run a command in a new container              # 创建一个新的容器并运行一个命令
save      Save an image to a tar archive                # 保存一个镜像为一个 tar 包[对应 load]
search    Search for an image on the Docker Hub         # 在 docker hub 中搜索镜像
start     Start a stopped containers                    # 启动容器
stop      Stop a running containers                     # 停止容器
tag       Tag an image into a repository                # 给源中镜像打标签
top       Lookup the running processes of a container   # 查看容器中运行的进程信息
unpause   Unpause a paused container                    # 取消暂停容器
version   Show the docker version information           # 查看 docker 版本号
wait      Block until a container stops, then print its exit code   # 截取容器停止时的退出状态值

以上是关于Docker基础1-3的主要内容,如果未能解决你的问题,请参考以下文章

Docker核心基础之容器的文件复制与挂载

Docker 核心基础之容器的文件复制与挂载

docker底层原理

Docker 多宿主互联

docker在centos7宿主机上的安装和卸载

docker基础学习一