这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战
1, Docker是怎么工作的?
Docker是一个Client-Server结构的系统, Docker的守护进程运行在主机上,,通过Socket从客户端访问。
DockerServer接收到DockerClient的指令,就会执行这个命令
Docker run的运行原理图
整体的工作流程:
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 // 帮助命令
(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 # 强制停止当前容器