Docker入门学习(二)

140 阅读3分钟

这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战

1, Docker是怎么工作的?

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

DockerServer接收到DockerClient的指令,就会执行这个命令

Docker run的运行原理图

1636769782626.png

整体的工作流程

1636771024066.png

2, Docker为什么比VM快?

1,Docker有着比虚拟机更少的抽象层,

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

​ 所以新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载Guest OS, 分钟级别的,而docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级。

3, Docker常用命令

(1)常用命令

docker version    // 显示docker的版本信息
docker info       // 显示docker的系统信息,包括镜像和容器的数量
docker --help     // 帮助命令

docker文档地址

(2)镜像命令

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

[root@VM-0-7-centos ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   7 weeks ago   13.3kB


# 解释
REPOSITORY: 镜像的仓库源
TAG: 镜像的标签
IMAGE ID 镜像的ID
CREATED  镜像的创建时间
SIZE  镜像的大小

# 可选项
-a ,    --all   #列出所有的镜像
-q ,    --quit  #只显示镜像的id

docker search 搜索镜像

[root@VM-0-7-centos ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   11680     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4450      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   867                  [OK]
phpmyadmin                        phpMyAdmin - A web interface for MySQL and M…   369       [OK]       
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   91                   
mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   89                   
centurylink/mysql                 Image containing mysql. Optimized to be link…   59    

# 可选项
docker search --help
Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output
      
      
# 用法
--filter=STARS=3000    #搜索出来的镜像就是STARS大于3000
[root@VM-0-7-centos ~]# docker search mysql --filter=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   11680     [OK]       
mariadb   MariaDB Server is a high performing open sou…   4450      [OK] 

docker pull 下载镜像

[root@VM-0-7-centos ~]# docker pull --help

Usage:  docker pull [OPTIONS] NAME[:TAG|@DIGEST]

Pull an image or a repository from a registry

Options:
  -a, --all-tags                Download all tagged images in the repository
      --disable-content-trust   Skip image verification (default true)
      --platform string         Set platform if server is multi-platform capable
  -q, --quiet                   Suppress verbose output

# 下载镜像 docker pull 镜像名称
[root@VM-0-7-centos /]# docker pull mysql
Using default tag: latest     #如果不写tag, 默认就是latest
latest: Pulling from library/mysql 
b380bbd43752: Pull complete    # 分层下载, docker iamge的核心,联合文件系统
f23cbf2ecc5d: Pull complete 
30cfc6c29c0a: Pull complete 
b38609286cbe: Pull complete 
8211d9e66cd6: Pull complete 
2313f9eeca4a: Pull complete 
7eb487d00da0: Pull complete 
4d7421c8152e: Pull complete 
77f3d8811a28: Pull complete 
cce755338cba: Pull complete 
69b753046b9f: Pull complete 
b2e64b0ab53c: Pull complete 
Digest: sha256:6d7d4524463fe6e2b893ffc2b89543c81dec7ef82fb2020a1b27606666464d87
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:5.7

docker rmi 镜像删除

# 删除指定的镜像ID
[root@VM-0-7-centos /]# docker rmi -f ecac195d15af

# 删除多个镜像
[root@VM-0-7-centos /]# docker rmi -f 镜像ID1 镜像ID2  镜像ID3

# 递归删除全部镜像
[root@VM-0-7-centos /]# docker rmi -f $(docker images -aq)  #全部镜像

(3) 容器命令

注意:有了镜像才可以创建容器,linux下面,下载一个centos镜像来测试学习

docker pull centos

下载成功之后, 新建容器并启动

docker run [可选参数] image

# 参数说明

--name = "容器名称"    # 容器名称, 方便区分容器
-d                    # 后端方式运行
-it                  # 使用交互方式运行,进入容器查看内容
-p                   # 指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口
-p 容器端口
    容器端口
-P                      # 随机指定端口


# 测试,启动并进入容器

[root@VM-0-7-centos /]# docker run -it centos /bin/bash   
[root@1f86c577c8c3 /]# ls 
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys
tmp  usr  var
[root@1f86c577c8c3 /]# exit
exit
[root@VM-0-7-centos /]# ls
bin  boot  data  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin 
srv  sys  tmp  usr  var



docker ps 列出所有的运行的容器

# docker ps
[root@VM-0-7-centos /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@VM-0-7-centos /]# docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED         STATUS                     PORTS     NAMES
1f86c577c8c3   centos        "/bin/bash"   3 minutes ago   Exited (0) 2 minutes ago 
recursing_chandrasekhar
dc8582fcac1b   hello-world   "/hello"      2 days ago      Exited (0) 2 days ago     
quirky_maxwell

# 常用参数
-a    # 列出曾经所有运行的容器,包括正在运行的容器
-n = ?  # 显示最近创建的容器
-q # 只显示当前容器的编号


[root@VM-0-7-centos /]# docker ps -aq
1f86c577c8c3
dc8582fcac1b

**容器不停止退出 **

exit    # 直接容器停止并退出

Ctrl + P + Q   #容器不停止但退出


[root@VM-0-7-centos /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@VM-0-7-centos /]# docker run -it  centos /bin/bash
[root@08213b58ef16 /]# [root@VM-0-7-centos /]# 
[root@VM-0-7-centos /]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
08213b58ef16   centos    "/bin/bash"   44 seconds ago   Up 43 seconds             silly_vaughan
[root@VM-0-7-centos /]# 

删除容器

# 删除指定的容器,   不能删除正在运行的容器
docker rm  容器ID  

# 删除所有的容器
docker rm -f $(docker ps -aq)

# 不常用的,删除所有的容器方法
docker ps -a -q|xargs docker rm 

启动和停止容器的操作

docker start 容器ID     # 启动容器
docker restart 容器ID   # 重启容器
docker  stop  容器ID    # 停止当前正在运行的容器
docker kill  容器ID     # 强制停止当前容器