如果对于容器和镜像还无法区分:https://blog.csdn.net/yao694899744/article/details/105307150?spm=1001.2014.3001.5502

Docker底层原理

Docker是怎么工作的?

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

DockerServer 接受到 Docker-Client 的指令,就会执行这个命令!

image-20221104164836322.png

Dokcer 为什么比 VM 快?

1、Dokcer 有着比虚拟机更少的抽象层

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

image-20221104165500369.png

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

image-20221104165921747.png

Docker常用命令

帮助命令

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

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

镜像命令

C:\Users\lookchem>docker images
REPOSITORY                                                      TAG                     IMAGE ID       CREATED         SIZE
casimg                                                          dev                     75fda16afbb3   6 weeks ago     186MB
mcr.microsoft.com/dotnet/runtime                                5.0                     da195286baf8   4 months ago    186MB
mcr.microsoft.com/dotnet/aspnet                                 5.0                     99323686c908   5 months ago    205MB

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

#可选项
  -a, --all             Show all images (default hides intermediate images)#列出所有镜像
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show image IDs(只显示镜像的id)

docker search 搜索镜像

C:\Users\lookchem>docker search mysql
NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                           MySQL is a widely used, open-source relation…   13234     [OK]
mariadb                         MariaDB Server is a high performing open sou…   5062      [OK]

#可选项    通过搜索来过滤
--filter=STARS=3000        #搜索出来的镜像就是STARS大于3000的
C:\Users\lookchem>docker search mysql --filter=stars=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   13234     [OK]
mariadb   MariaDB Server is a high performing open sou…   5062      [OK]


  -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

docker pull 下载镜像

# 下载镜像  docker pull 镜像名[:tag]
C:\Users\lookchem>docker pull mysql
Using default tag: latest            #如果不写 tag,默认就是 latest
latest: Pulling from library/mysql
295ca2342728: Pull complete            #分层下载,docker images的核心 联合文件系统
79af4312a7e0: Pull complete
48d3d73d1704: Pull complete
521b8724b397: Pull complete
b8cf360b4a14: Pull complete
0115482cc006: Pull complete
a360b08917ea: Pull complete
12deeb3c1323: Pull complete
ee1dc10db1e9: Pull complete
64be404ad29c: Pull complete
1921fe8879a2: Pull complete
Digest: sha256:3c1aab708f6e57fc4dccafe36baccc7219acfb4ec450f3fb6d370ea89409e906    #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest#真实地址

# 等价于它
docker pull mysql
docker pull docker.io/library/mysql:latest

# 指定版本下载
C:\Users\lookchem>docker pull mysql:5.7

docker rmi 删除镜像

# docker rmi -f 镜像id                       #删除指定镜像id
# docker rmi -f 镜像id 镜像id 镜像id 镜像id    #删除多个镜像id
# docker rmi -f $(docker images -aq)        #删除全部镜像

C:\Users\lookchem>docker rmi -f dbaea59d1b41    # 删除指定镜像id
Untagged: mysql:latest
Untagged: mysql@sha256:3c1aab708f6e57fc4dccafe36baccc7219acfb4ec450f3fb6d370ea89409e906
Deleted: sha256:dbaea59d1b4194257138a6434ec0820a13097dd7e900135e78daf9759fe2407a
Deleted: sha256:e507fd966e8388339d4024e698d2d9000eece41c497a8857774c9f0f1f17c3de
Deleted: sha256:239ac15e65c3efa92872682fdfcbf177735fba69a3bb236f7acfb230319f8b9f
Deleted: sha256:944a10fce07786f698ca86bb6781f004e9f1fa22fad021ec57132d77e231a165
Deleted: sha256:6acb95708216880feed67b390e3855ec9c48947904a1f97900584c9bedafca14
Deleted: sha256:28945f2a92f5ff073346724641d6e82464dd61dc903ab71f18eb975503a1a5d1
Deleted: sha256:a1e4e03c3de2361aedf9cea34b0477dc80a7de3dce128ac450a1aa8b4202ea7f
Deleted: sha256:8f063e9b29c9e6fca010e488a7972826483aa87364fee8005d30ac5809d539df
Deleted: sha256:714888f3d7e50ce4819618162cf60f0d6899e556b4cfc83edce10750117bcbaf
Deleted: sha256:3b0f259c919a98067a2debaa2bc9c405250fc9c468ceabc9a0ebe51eb36d2e7e
Deleted: sha256:2047a833bd7438a2271051138d5d599d01374b615a7f77f6ef2b199ff917f6cb
Deleted: sha256:553b196ea5e8358e8b819253dc8fb9af6cf5711df6c83e594b4c2109c61eda18

容器命令

说明:我们有了镜像才可以创建容器。linux下载一个centos镜像来测试学习

docker pull centos

新建容器并启动

docker run [可选参数] image

# 参数说明
--name="Name"    容器名称    tomcat01    tomcat02,用来区分容器
-d                后台方式运行
-it                使用交互方式运行,进入容器查看内容
-p                指定容器的端口 -p 8080:8080
    -p ip:容器端口:主机端口
    -p 容器端口:主机端口(常用)
    -p 容器端口
-p                随机指定端口


#测试,启动并进入容器
C:\Users\lookchem>docker run -it centos
[root@e543898b573a /]# ls    #查看容器内的centos,基础版本,很多命令都是不完善的!
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

列出所有运行的容器

#docker ps 命令
            # 列出正在运行的容器
    -a        # 列出正在运行的容器+未运行的容器
    -n=?    # 显示最近创建的容器   ?=显示几个
    -q        # 只显示容器的编号

C:\Users\lookchem>docker ps        #列出正在运行的容器
CONTAINER ID   IMAGE                                                          COMMAND                  CREATED          STATUS         PORTS                    NAMES
e543898b573a   centos                                                         "/bin/bash"              12 minutes ago   Up 7 seconds                            awesome_elbakyan
f1752205028a   ccr.ccs.tencentyun.com/mssql/sqlserver:2019-CU6-ubuntu-16.04   "/opt/mssql/bin/perm…"   19 months ago    Up 6 hours     0.0.0.0:1433->1433/tcp   mssql

C:\Users\lookchem>docker ps -a    #列出所有容器,包括未运行的
CONTAINER ID   IMAGE                                                          COMMAND                  CREATED         STATUS                      PORTS                      NAMES
e543898b573a   centos                                                         "/bin/bash"              7 minutes ago   Exited (0) 18 seconds ago                              awesome_elbakyan
f83772c4d175   redis                                                          "docker-entrypoint.s…"   9 months ago    Exited (255) 6 weeks ago    0.0.0.0:6379->6379/tcp     redis
5c2c179e2ca8   mongo:latest                                                   "docker-entrypoint.s…"   15 months ago   Exited (255) 7 weeks ago    0.0.0.0:27017->27017/tcp   log-mongo
f1752205028a   ccr.ccs.tencentyun.com/mssql/sqlserver:2019-CU6-ubuntu-16.04   "/opt/mssql/bin/perm…"   19 months ago   Up 6 hours                  0.0.0.0:1433->1433/tcp     mssql

退出容器

exit                     #停止并退出容器
ctrl + p + Q             #容器不停止 退出 

启动和停止容器

docker start 容器ID        #启动指定现有容器
docker restart 容器id        #重启容器
docker stop 容器id        #停止容器    优雅退出 
docker kill 容器id        #停止容器    应用程序直接退出(强制)

删除容器

docker rm 容器id                #删除指定现有容器,不能删除正在运行的容器。如果强制删除 rm -f  全称是force:强制
docker rm -f $(docker ps -aq)   #删除所有容器
docker ps -a -q|xargs docker rm #删除所有容器

rm删除容器 rmi删除镜像

常用其他命令

后台启动容器

# 命令 docker run -d 容器名称
C:\Users\lookchem>docker run -d centos
# 问题docker ps 发现 centos停止了

# 常见的坑:docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
# nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了 

查看日志

docker logs --help 

容器数据卷

什么是容器数据卷

docker的理念回顾

将应用和环境打包成一个镜像!

数据?如果数据都在容器中,那么我们容器删除,数据就会丢失! 需求:数据持久化

MySQL,容器删了,就等于删库跑路 需求:MySQL可以存储在本地!(数据持久化)

容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!

这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!

总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的!

使用数据卷

分十一:直接使用命令来挂载 -v
docker run -it -v -p 主机端口:容器内端口
最后修改:2022 年 11 月 21 日
如果觉得我的文章对你有用,请随意赞赏