底层原理
Docker是怎么工作的?
Docker是一个C-S结构的系统,Docker的守护进程运行在服务主机上,通过Socket从客户端访问。
DockerServer接收到DockerClient的指令就会执行这个命令。
Docker为什么比VM快?
Docker有着比虚拟机更少的抽象层
Docker利用的是宿主机的内核,VM需要有Guest OS。所以新建一个容器的时候,docker不需要像VM一样重新加载一个操作系统内核,避免引导
Docker常用命令
docker的默认工作路径
帮助命令
1 2 3 docker version # 显示docker的版本信息 docker info # 显示docker的系统信息,包括镜像和容器的数量 docker <命令> --help # 查看帮助命令
镜像命令
docker images 查看所有本地的主机上的镜像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest bf756fb1ae65 9 months ago 13.3kB # 解释 REPOSITORY 镜像的仓库源 TAG 镜像的标签 IMAGE ID 镜像的ID CREATED 镜像的创建时间 SIZE 镜像的大小 # 命令可选项 -a, --all 列出所有镜像 -q, --quiet 只显示镜像的id
docker search 搜索镜像
1 2 3 4 5 6 7 [root@localhost ~]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 10046 [OK] mariadb MariaDB is a community-developed fork of MyS… 3680 [OK] # 可选项,通过收藏数过滤 --filter=STAR=3000 搜索出来的镜像是STARS大于3000的
docker pull [:tag] 下载镜像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 [root@localhost ~]# docker pull mysql Using default tag: latest # 如果不写tag,默认是latest latest: Pulling from library/mysql d121f8d1c412: Pull complete # 分层下载,docker镜像的核心 联合文件系统 f3cebc0b4691: Pull complete 1862755a0b37: Pull complete 489b44f3dbb4: Pull complete 690874f836db: Pull complete baa8be383ffb: Pull complete 55356608b4ac: Pull complete dd35ceccb6eb: Pull complete 429b35712b19: Pull complete 162d8291095c: Pull complete 5e500ef7181b: Pull complete af7528e958b6: Pull complete Digest: sha256:e1bfe11693ed2052cb3b4e5fa356c65381129e87e38551c6cd6ec532ebe0e808 Status: Downloaded newer image for mysql:latest docker.io/library/mysql:latest # 真实地址 # 下载指定版本,共用的层会复用,不用重复下载 [root@localhost ~]# docker pull mysql:5.7 5.7: Pulling from library/mysql d121f8d1c412: Already exists f3cebc0b4691: Already exists 1862755a0b37: Already exists 489b44f3dbb4: Already exists 690874f836db: Already exists baa8be383ffb: Already exists 55356608b4ac: Already exists 277d8f888368: Pull complete 21f2da6feb67: Pull complete 2c98f818bcb9: Pull complete 031b0a770162: Pull complete Digest: sha256:14fd47ec8724954b63d1a236d2299b8da25c9bbb8eacc739bb88038d82da4919 Status: Downloaded newer image for mysql:5.7 docker.io/library/mysql:5.7
docker rmi 删除镜像
1 2 docker rmi -f <镜像id> [<镜像id> <镜像id>] # 删除指定的镜像 docker rmi -f $(docker images -aq) # 删除所有镜像
容器命令
**注:**有了镜像才可以创建容器,以centos镜像为例
docker run [可选参数] 新建并启动容器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # 参数说明 --name="<Name>" 容器名字,自定义,用来区分容器 -d 后台方式运行 -it 使用交互方式运行,进入容器查看内容 -p 指定容器的端口,配置端口转发 -p ip:主机端口:容器端口 -p 主机端口:容器端口(常用) -p 容器端口 -P 随机指定端口 例: # 启动并进入容器 [root@localhost ~]# docker run -it centos /bin/bash # 退出容器并关闭容器 [root@bebbdced119e /]# exit # 退出容器但不关闭容器 Ctrl + p + q
docker ps [可选参数] 列出运行的容器
1 2 3 4 # 参数说明 -a 列出所有运行过的容器 -n=<n> 列出最近创建的n个容器 -q 只显示容器编号
**docker rm 删除容器
1 2 3 docker rm <容器id> 删除指定容器,不能删除正在运行的容器,若要强制删除加参数-f docker rm -f $(docker ps -aq) 删除所有的容器 docker ps -a -q|xargs docker rm 删除所有的容器
启动和停止容器
1 2 3 4 docker start <容器id> 启动容器 docker restart <容器id> 重启容器 docker stop <容器id> 停止容器 docker kill <容器id> 强制停止容器
常用其他命令
后台启动容器
1 2 3 4 docker run -d centos # 问题:docker ps发现centos停止了 # 常见的坑:docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
查看日志
1 2 docker logs -ft <容器id> # 查看所有日志 docker logs -ft --tail <n> <容器id> # 查看最新的n条日志
**查看容器中的进程信息 **
查看容器的元数据
进入正在后台运行的容器
1 2 3 4 5 6 7 # 方法1 docker exec -it <容器id> <bashshell> # 进入容器后开启一个新的终端,可以在里面操作(常用) # 方法2 docker attach <容器id> # 进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件
1 docker cp <容器id>:<容器内路径> <目的主机路径>