Docker运行流程和原理

启动流程

图片来源于搜狗搜索

原理

Docker 架构


常用命令

详见 帮助文档

1.基础命令

命令

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

执行

[root@iZbp1goskzrblqlckwzt6iZ test]# docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Docker Buildx (Docker Inc., v0.7.1-docker)
  scan: Docker Scan (Docker Inc., v0.12.0)

Server:
 Containers: 9
  Running: 1
  Paused: 0
  Stopped: 8
 Images: 21
 Server Version: 20.10.12
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc version: v1.0.2-0-g52b36a2
 init version: de40ad0

2.镜像命令

执行

docker images  # 查看本地所有镜像
docker search  # 搜索镜像
    # docker search mysql --filter=STARS=3000 # 添加过滤
docker pull    # 拉取镜像,后面可加tag,否则下载的就是最新的
    # docker pull mysql:5.7

删除镜像

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

3.容器命令

运行

docker run [可选参数] image

#参数说明
--name="xxxxx"           指定容器名字
-d                     后台运行
-it                    交互方式运行,进入shell
-p                     指定容器端口

( 
    -p ip:主机端口:容器端口  
    -p 主机端口:容器端口
    -p 容器端口
)
-P                     随机指定端口(大写的P)

进入容器

#  进入容器
docker run -it [容器ID] /bin/bash

退出容器

#exit 停止并退出容器(后台方式运行则仅退出)
#Ctrl+P+Q  不停止容器退出
[root@bd1b8900c547 /]# exit
exit
[root@iZbp1goskzrblqlckwzt6iZ ~]#

列出容器

#docker ps 
     # 列出当前正在运行的容器
-a   # 列出所有容器的运行记录
-n=? # 显示最近创建的n个容器
-q   # 只显示容器的编号

删除容器

docker rm [容器id]                 #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f

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]            #强制停止当前容器

查看日志

docker logs -tf [容器id] 
docker logs --tail number [容器id]  # number为要显示的日志条数

查看进程信息

docker top c7538c4a4060

查看容器元数据

docker inspect [容器id]  

进入正在运行的容器

  • docker exec 进入容器后开启一个新的终端,可以在里面操作
  • docker attach 进入容器正在执行的终端,不会启动新的进程
# 1. way1 新建shell打开,不会有当前进程正在打印的影响
docker exec -it c7538c4a4060 /bin/bash
# 2.way2,  不是新建shell,可能打开的shell正在执行任务,比如打印
docker attach c7538c4a4060

拷贝文件到主机

docker cp 容器id:容器内路径 目的主机Centos路径
docker cp c7538c4a4060:/home/test.go /home/ceshi

小结



Docker 数据卷

使用数据卷之后,以后修改只需要在本地修改,容器内会自动同步

理念
将应用和环境打包成一个镜像!
数据 如果数据都在容器中,那么我们容器删除,数据就会丢失!需求∶数据可以持久化MySQL,容器删了,删库跑路!需求:MySQL数据可以存储在本地!
容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!
卷的使用 为了容器的持久化和同步操作, 容器间也可以数据共享

shell命令

docker run -it -v 主机目录:容器目录

哪怕容器关了,也可以同步
通过 docker inspect 容器ID 查看

分类: docker

浙公网安备33011302000604

辽ICP备20003309号