【Docker基本原理和常用命令】
文章目录
- Run的流程和Docker的原理
- 一、回顾Hello Word的流程
- 二、底层原理
- Dockers的基本命令
- 三、帮助命令
- 帮助文档的地址:
- 四、镜像命令
- 五、容器命令
- 常用其它命令
Run的流程和Docker的原理
一、回顾Hello Word的流程
run的流程运行图
二、底层原理
(1)、Docker是什么工作的?
Docker是一个 Client - Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问!DockerServer接收到Docker-Client的指令,就会执行这个命令!
(2)、为什么Dockers比VM虚拟机快?
1、Docker有着比虚拟机更少的抽象层。
2、docker利用的是宿主机的内核,vm 需要是Guest Os.
所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载Guest OS,分钟级别的,而docker是利用宿主机的操作系统吗,省略了这个复杂的过程,秒级!
Dockers的基本命令
三、帮助命令
docker version #显示Docker的版本信息
docker info #显示Docker的系统信息,包括镜像和容器数量
docker 命令 --help #万能命令
帮助文档的地址:
https://docs.docker.com/engine/reference/commandline/build/
四、镜像命令
(1)、docker imagers 查看所有本地的主机镜像
#查看本地主机上所有的镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 6 months ago 13.3kB#解释
repository 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小#可选项
Options:-a, --all #列出所有镜像 -q, --quiet #只显示镜像的id
docker images
(2)、docker search 搜索镜像
[root@localhost ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12418 [OK]
mariadb MariaDB Server is a high performing open sou… 4784 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 918 [OK]
percona Percona Server is a fork of the MySQL relati… 575 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 505 [OK]#可选项,通过搜藏来过滤
mysql --filter=stars=4000#查询STARS值大于4000的镜像
[root@localhost ~]# docker search mysql --filter=stars=4000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12418 [OK]
mariadb MariaDB Server is a high performing open sou… 4784 [OK]
docker search mysql
docker search mysql --filter=stars=4000
(3)、docker pull 下载镜像
#下载镜像 docker pull 镜像名【:tag】[root@localhost ~]# docker pull mysql
Using default tag: latest #如果不写tag那么默认就是latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete #分层下载,docker images的核心 联合文件系统
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址#等价于它
docker pull mysql
docker pull docker.io /library/mysql:latest#指定版本下载
[root@localhost ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Already exists
93619dbc5b36: Already exists
99da31dd6142: Already exists
626033c43d70: Already exists
37d5d7efb64e: Already exists
ac563158d721: Already exists
d2ba16033dad: Already exists
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
docker pull mysql
docker pull docker.io /library/mysql:latest
docker pull mysql:5.7
(4)、docker rmi删除镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 c20987f18b13 3 months ago 448MB
mysql latest 3218b38490ce 3 months ago 516MB
hello-world latest feb5d9fea6a5 6 months ago 13.3kB#删除指定容器
[root@localhost ~]# docker rmi -f c20987f18b13 //容器ID
Untagged: mysql:5.7
Untagged: mysql@sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Deleted: sha256:c20987f18b130f9d144c9828df630417e2a9523148930dc3963e9d0dab302a76
Deleted: sha256:6567396b065ee734fb2dbb80c8923324a778426dfd01969f091f1ab2d52c7989
Deleted: sha256:0910f12649d514b471f1583a16f672ab67e3d29d9833a15dc2df50dd5536e40f
Deleted: sha256:6682af2fb40555c448b84711c7302d0f86fc716bbe9c7dc7dbd739ef9d757150
Deleted: sha256:5c062c3ac20f576d24454e74781511a5f96739f289edaadf2de934d06e910b92#删除所有之前启动过的容器
[root@localhost ~]# docker rm -f $(docker ps -aq)
docker rmi -f c20987f18b13
五、容器命令
说明:我们有了镜像才可以创建容器,Linux,下载一个CentOS镜像来测试学习
(1)、新建容器并启动
docker pull centos
(2)、新建容器并启动
docker run [可选参数] images#参数说明
--name=“name” 容器名字 tomcat01 tomcat02 ,用来区分容器
--d 后台方式运行
--it 使用交互方式运行,进入容器查看内容
--f 使用交互方式运行,进入容器查看内容
--P(这个p是大写的) 指定端口,-p 8080:8080-p ip:主机端口:容器端口-p主机端:容器端口(常用)-p容器端口容器端口--p 指定随机端口#测试,启动、、并进入容器
[root@localhost ~]# docker run -it centos /bin/bash#查看容器内的CentOS,基础版本,很多命令是不完善的
[root@c51cad0515c8 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var#退出容器,回到主机
[root@a59464d1b953 /]# exit
exit
[root@localhost ~]#
(3)、列出所有的运行的容器
docker ps
列出当前正在运行的容器
docker ps -a
列出当前正在运行的容器,带出历史运行过的容器
docker ps -a -n=1
显示最近创建的容器
docker ps -aq
只显示容器编号
#查看所有运行中的容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a59464d1b953 centos "/bin/bash" About a minute ago Exited (0) About a minute ago awesome_yonath
c51cad0515c8 centos "/bin/bash" 6 minutes ago Exited (130) 2 minutes ago charming_cray
af8387ece97c feb5d9fea6a5 "/hello" About an hour ago Exited (0) About an hour ago happy_raman
056d36ae8336 feb5d9fea6a5 "/hello" 23 hours ago Exited (0) 23 hours ago festive_satoshi[root@localhost ~]# docker ps -a -n=1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a59464d1b953 centos "/bin/bash" 5 minutes ago Exited (0) 5 minutes ago awesome_yonath[root@localhost ~]# docker ps -aq
a59464d1b953
c51cad0515c8
af8387ece97c
056d36ae8336
docker ps
docker ps -a
docker ps -a -n=1
docker ps -aq
(4)、退出容器
exit //直接退出
Ctrl + P + Q //容器不停止退出
(5)、删除容器
#删除所有的容器
[root@localhost ~]# docker rm -f $(docker ps -aq)
bae9036427e1
a59464d1b953
c51cad0515c8
af8387ece97c
056d36ae8336#删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -f
[root@localhost ~]# docker rm 容器id#删除所有的容器
[root@localhost ~]# docker ps -a -q |xargs docker rm
docker rm -f $(docker ps -aq)
docker rm 容器ID
docker ps -a -q |xargs docker rm
停止和启动容器
#启动容器
docker start 容器id#重启容器
docker restart 容器id# 停止当前正在运行的容器
docker stop 容器id#强制停止当前容器
docker kill 容器id
常用其它命令
(1)、docker启动容器
[root@localhost ~]# docker run -d centos
00e999c05bc91095a6de73ef908d5a207a4cb846c6e07941f14a8c3a7b11739e#发现docker ps centos停止了#常见的坑: docker容器使用后台运行,就必须要有要一个前台进程,
docker发现没有应用,就会自动停止# nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
docker run -d centos
(2)、查看容器日志
#可以发现这里面没有日志[root@localhost ~]# docker logs -f -t --tail d76188e7cf20
"docker logs" requires exactly 1 argument.
See 'docker logs --help'.Usage: docker logs [OPTIONS] CONTAINERFetch the logs of a container#自己编写一个shell脚本
[root@localhost ~]# docker run -d centos /bin/sh -c "while true;do echo kuangsheng 1;sleep;done"
4f200a4d2729a815d5bc3a95c6842d9c64100768626e3c87efc87271014a47c4[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4f200a4d2729 centos "/bin/sh -c 'while t…" 6 seconds ago Up 5 seconds angry_wescoff# 显示日志# -tf 显示日志
# tail number 要是显示日志的条数[root@localhost ~]# docker logs -f -t --tail 4f200a4d2729
"docker logs" requires exactly 1 argument.
See 'docker logs --help'.Usage: docker logs [OPTIONS] CONTAINERFetch the logs of a container
docker logs -f -t --tail d76188e7cf20
docker run -d centos /bin/sh -c “while true;do echo kuangsheng 1;sleep;done”
docker ps
docker logs -f -t --tail 4f200a4d2729
(3)、查看容器中的进程信息
[root@localhost ~]# docker top 4f200a4d2729
UID PID PPID C STIME TTY TIME CMD
root 2786 2766 15 16:48 ? 00:01:08 /bin/sh -c while true;do echo kuangsheng 1;sleep;done
docker top 容器ID
查看镜像的元数据
# docker inspect 镜像ID[root@localhost ~]# docker inspect 4f200a4d2729
[{"Id": "4f200a4d2729a815d5bc3a95c6842d9c64100768626e3c87efc87271014a47c4","Created": "2022-04-18T08:48:39.847648119Z","Path": "/bin/sh","Args": ["-c","while true;do echo kuangsheng 1;sleep;done"],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 2786,"ExitCode": 0,"Error": "","StartedAt": "2022-04-18T08:48:40.408308326Z","FinishedAt": "0001-01-01T00:00:00Z"},"Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6","ResolvConfPath": "/var/lib/docker/containers/4f200a4d2729a815d5bc3a95c6842d9c64100768626e3c87efc87271014a47c4/resolv.conf","HostnamePath": "/var/lib/docker/containers/4f200a4d2729a815d5bc3a95c6842d9c64100768626e3c87efc87271014a47c4/hostname","HostsPath": "/var/lib/docker/containers/4f200a4d2729a815d5bc3a95c6842d9c64100768626e3c87efc87271014a47c4/hosts","LogPath": "/var/lib/docker/containers/4f200a4d2729a815d5bc3a95c6842d9c64100768626e3c87efc87271014a47c4/4f200a4d2729a815d5bc3a95c6842d9c64100768626e3c87efc87271014a47c4-json.log","Name": "/angry_wescoff","RestartCount": 0,"Driver": "overlay2","Platform": "linux","MountLabel": "","ProcessLabel": "","AppArmorProfile": "","ExecIDs": null,"HostConfig": {"Binds": null,"ContainerIDFile": "","LogConfig": {"Type": "json-file","Config": {}},"NetworkMode": "default","PortBindings": {},"RestartPolicy": {"Name": "no","MaximumRetryCount": 0},"AutoRemove": false,"VolumeDriver": "","VolumesFrom": null,"CapAdd": null,"CapDrop": null,"CgroupnsMode": "host","Dns": [],"DnsOptions": [],"DnsSearch": [],"ExtraHosts": null,"GroupAdd": null,"IpcMode": "private","Cgroup": "","Links": null,"OomScoreAdj": 0,"PidMode": "","Privileged": false,"PublishAllPorts": false,"ReadonlyRootfs": false,"SecurityOpt": null,"UTSMode": "","UsernsMode": "","ShmSize": 67108864,"Runtime": "runc","ConsoleSize": [0,0],"Isolation": "","CpuShares": 0,"Memory": 0,"NanoCpus": 0,"CgroupParent": "","BlkioWeight": 0,"BlkioWeightDevice": [],"BlkioDeviceReadBps": null,"BlkioDeviceWriteBps": null,"BlkioDeviceReadIOps": null,"BlkioDeviceWriteIOps": null,"CpuPeriod": 0,"CpuQuota": 0,"CpuRealtimePeriod": 0,"CpuRealtimeRuntime": 0,"CpusetCpus": "","CpusetMems": "","Devices": [],"DeviceCgroupRules": null,"DeviceRequests": null,"KernelMemory": 0,"KernelMemoryTCP": 0,"MemoryReservation": 0,"MemorySwap": 0,"MemorySwappiness": null,"OomKillDisable": false,"PidsLimit": null,"Ulimits": null,"CpuCount": 0,"CpuPercent": 0,"IOMaximumIOps": 0,"IOMaximumBandwidth": 0,"MaskedPaths": ["/proc/asound","/proc/acpi","/proc/kcore","/proc/keys","/proc/latency_stats","/proc/timer_list","/proc/timer_stats","/proc/sched_debug","/proc/scsi","/sys/firmware"],"ReadonlyPaths": ["/proc/bus","/proc/fs","/proc/irq","/proc/sys","/proc/sysrq-trigger"]},"GraphDriver": {"Data": {"LowerDir": "/var/lib/docker/overlay2/898985e8d57b4c9018bff56ca88ee9e1763ba31341762057a2dd994e40ba7574-init/diff:/var/lib/docker/overlay2/ee73028b139e6b329c78786b9704b63adf2b4ce344929a2fb3020a404f12a8c2/diff","MergedDir": "/var/lib/docker/overlay2/898985e8d57b4c9018bff56ca88ee9e1763ba31341762057a2dd994e40ba7574/merged","UpperDir": "/var/lib/docker/overlay2/898985e8d57b4c9018bff56ca88ee9e1763ba31341762057a2dd994e40ba7574/diff","WorkDir": "/var/lib/docker/overlay2/898985e8d57b4c9018bff56ca88ee9e1763ba31341762057a2dd994e40ba7574/work"},"Name": "overlay2"},"Mounts": [],"Config": {"Hostname": "4f200a4d2729","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd": ["/bin/sh","-c","while true;do echo kuangsheng 1;sleep;done"],"Image": "centos","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": {"org.label-schema.build-date": "20210915","org.label-schema.license": "GPLv2","org.label-schema.name": "CentOS Base Image","org.label-schema.schema-version": "1.0","org.label-schema.vendor": "CentOS"}},"NetworkSettings": {"Bridge": "","SandboxID": "279fe030fdf5e8d8b185347e299e4fe98e8d1edbd6a74d5ceaa909f17e398395","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"Ports": {},"SandboxKey": "/var/run/docker/netns/279fe030fdf5","SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "e3824d8e3307569420148658c4d6af8ef10489e98177e82e8d65bcefffb26c22","Gateway": "172.17.0.1","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","MacAddress": "02:42:ac:11:00:02","Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"NetworkID": "ebd53639a63f6686efac0148b1459e339bd02575ba73b0686b497fda8813ca4b","EndpointID": "e3824d8e3307569420148658c4d6af8ef10489e98177e82e8d65bcefffb26c22","Gateway": "172.17.0.1","IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:11:00:02","DriverOpts": null}}}}
]
docker inspect 镜像ID
进入当前正在运行的容器
#通常使用后台方式运行的,需要进入一些容器,修改一些配置#docker exec -it 容器id shellbash#测试
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4f200a4d2729 centos "/bin/sh -c 'while t…" 26 minutes ago Up 26 minutes angry_wescoff
[root@localhost ~]# docker exec -it 4f200a4d2729 /bin/bash
[root@4f200a4d2729 /]#
[root@4f200a4d2729 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 15 08:48 ? 00:04:10 /bin/sh -c while true;do echo kuangsheng 1;sleep;done
root 54643 0 4 09:15 pts/0 00:00:00 /bin/bash
root 58460 54643 0 09:15 pts/0 00:00:00 ps -ef#方法二#docker attach CONTAINER ID
[root@localhost ~]# docker attach 4f200a4d2729 # docker exec #进入容器后开启一个新的终端(常用)
# docker attach #进入容器正在执行的终端,不开启新的进程!#进入容docker容器
[root@localhost ~]# docker run -it 5d0da3dc9764 /bin/bash
WARNING: IPv4 forwarding is disabled. Networking will not work.
[root@495037bf2a54 /]# cd /home
#在容器内新建文件
[root@495037bf2a54 home]# touch test.java
[root@495037bf2a54 home]# ls
test.java
[root@495037bf2a54 home]# exit
exit
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
495037bf2a54 5d0da3dc9764 "/bin/bash" 39 seconds ago Exited (0) 16 seconds ago vigorous_hellman
056d36ae8336 hello-world "/hello" 3 days ago Exited (0) 3 days ago festive_satoshi
#将docker容器内的文件拷贝出来到主机上
#使用运行中的容器ID(不是镜像ID)
[root@localhost ~]# docker cp 495037bf2a54:/home/test.java /home
[root@localhost ~]# ls /home |grep test.java
test.java#拷贝只是一个手动过程,未来我们使用-V卷技术,可以实现
【Docker基本原理和常用命令】相关推荐
- docker 安装与常用命令与常用容器(containers)环境
注意区别 container 与 image 的关系,container 的建立需要 image 的承载,也即 container 依赖 image,停止并删除了 container 并不会删除 im ...
- Docker系列之常用命令操作手册
Docker系列之常用命令操作手册 继上一篇博客Docker系列之原理简单介绍之后,本博客对常用的Docker命令进行实践 文章目录 1.安装虚拟机 2.安装Docker 3.Docker镜像操作 4 ...
- docker之容器常用命令及基本操作
docker之容器常用命令及基本操作 文章目录 docker之容器常用命令及基本操作 一.查看容器 `docker ps`常用选项 二.查看容器日志 `docker logs`命令选项 三.运行容器 ...
- Docker理解及常用命令一
doccker学习笔记二:docker理解及常用命令 docker run理解 docker工作原理 Docker的常用命令 帮助命令 镜像命令 容器命令 docker run理解 回顾刚刚安装doc ...
- Docker Compose搭建consul群集环境(了解Docker Compose及常用命令,Docker四种网络,Doker指定端口)
文章目录 Docker Compose搭建consul群集环境 认识Docker Compose IConsul Docker Compose容器编排 Dasker Compose配置常用字段 Bos ...
- Docker架构、常用命令和示例
文章内容参考了<Docker容器实战:原理.架构与应用>. 镜像和容器 容器:运行在操作系统上的一个进程,只不过加入了对资源的隔离和限制.在Docker中,其容器技术的三大核心功能:CGr ...
- docker 容器 exited_docker常用命令整理
docker常用命令整理 代码狂魔 • 5 天前 • 技术积累 • 14 • 0 前面已经把docker是什么和 docker怎么安装已经写了,现在我将常用命令做一个整理,方便日后查阅 常用命令 do ...
- Docker入门之常用命令
写在前面 细数当前最流行的技术莫过于容器化和人工智能了,而容器化技术能有今天的热度,Docker可谓功不可没. 让我们一起来回顾一下Docker 是什么? 是一种虚拟化技术 能够将应用程序自动部署到容 ...
- Docker(安装常用命令)
前言 提示:CentOS Linux 8的yum源配置: 本人Linux镜像为CentOS 8所以需要配置yum源,其他版本可省略 yum源配置 一.Docker安装 1.安装gcc yum -y i ...
最新文章
- 人与机器——解析人工智能的三大类别以及哲学家的相关思想实验
- 修复efi引导的win7
- centos7 LNMP
- Redmine 数据库连接错误
- 通过pxe从网络启动安装Windows XP
- pandas 读写 excel
- linux主频限制服务,linux抵御DDOS攻击 通过iptables限制TCP连接和频率
- UI界面设计中的5个实用版面排版技巧
- python基础之字典、集合
- 更改自定义按钮显示值并对单元格赋值
- Kconfig语法详解--结合示例
- QQ大盗 - 巧用clientkey
- 工具武装的前端开发工程师
- 【数据库】Redis
- x.norm(p=2,dim=1,keepdim=True)
- 005 |《共同富裕背景下党支部领办新型农村集体经济发展路径研究—以X村合作社为例》 | 大学生创新训练项目申请书 | 极致技术工厂
- angular2跳转路由, 获取路由参数
- pcs+corosync+pacemaker+haproxy负载均衡环境部署
- 【芝麻IP代理】8大高效的Python爬虫框架,你用过几个?
- vnc 红帽linux版下载,redhat安装 vnc
热门文章
- UiAUtomator基础入门级学习
- A or B Equals C Gym - 101028C
- 对比不同主流存储格式(csv, feather, jay, h5, parquet, pickle)的读取效率
- 百度编辑器ueditor-在线图片管理,想修改下默认的排序管理
- 【自我解析】2020华为杯数学建模比赛C题
- Selenium-actions
- 数据结构最常用的排序算法一(冒泡、插入、选择)-Java实现
- Python中的BMI指数
- 2018 秋招 百度二轮面试---血淋淋的经历写实
- ffmpeg 多个音频合并 截取 拆分