docker的基本命令

mark

一、底层原理

1、Docker是怎么工作的?

Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Docket客户端访问!DockerServer接收到Docker-Client的指令,就会执行这个命令!

mark

2、Docker的优势

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

2、docker利用的时宿主机的内核,vm需要的是Guest OS。

mark

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

二、Docker的常用命令

1、帮助命令

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

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

2、镜像命令

1 docker images #查看所有本地主机的镜像
[root@localhost ~]#docker images

REPOSITORY		TAG			IMAGE ID		CREATED			SIZE
he11o-world		latest		bf756fb1ae65	4 months ago	13.3kB
#解释
REPOSITORY		镜像的仓库源

TAG				镜像的标签
IMAGE ID		镜像的id
CREATED			镜像的创建时间
SIZE			镜像的大小

#可选项
-a, --all		#列出所有镜像
-q,	--quiet		#只显示镜像的id
2 docker search #搜索镜像
[root@localhost ~] # docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10631     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   3989      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   779                  [OK]
percona                           Percona Server is a fork of the MySQL relati…   528       [OK]       

#可选项,通过搜藏来过滤
--filter=STARS=3000		#搜索出来的镜像就是STARS大于3000的
[root@localhost ~] # docker search mysql --filter=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   10631     [OK]       
mariadb   MariaDB Server is a high performing open sou…   3989      [OK]       

[root@localhost ~] # docker search mysql --filter=STARS=5000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   10631     [OK]    
3 docker pull #下载镜像
下载镜像命令格式:
docker pull 镜像名[:tag]
[root@localhost ~] # docker pull mysql
Using default tag: latest				#如果不指定tag,默认是latest(最新版本)
latest: Pulling from library/mysql
#分层下载,docker image的核心,联合文件系统
a076a628af6f: Pull complete 			
f6c208f3f991: Pull complete 
88a9455a9165: Pull complete 
406c9b8427c6: Pull complete 
7c88599c0b25: Pull complete 
25b5c6debdaf: Pull complete 
43a5816f1617: Pull complete 
1a8c919e89bf: Pull complete 
9f3cf4bd1a07: Pull complete 
80539cea118d: Pull complete 
201b3cad54ce: Pull complete 
944ba37e1c06: Pull complete 
Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c	#签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest		#真实地址

#docker pull mysql 等价于 docker pull docker.io/library/mysql:latest
#指定版本下载
docker pull 镜像名[:版本(tag)]
[root@localhost ~] # docker pull mysql:5.7
5.7: Pulling from library/mysql
a076a628af6f: Already exists 
f6c208f3f991: Already exists 
88a9455a9165: Already exists 
406c9b8427c6: Already exists 
7c88599c0b25: Already exists 
25b5c6debdaf: Already exists 
43a5816f1617: Already exists 
1831ac1245f4: Pull complete 
37677b8c1f79: Pull complete 
27e4ac3b0f6e: Pull complete 
7227baa8c445: Pull complete 
Digest: sha256:b3d1eff023f698cd433695c9506171f0d08a8f92a0c8063c1a4d9db9a55808df
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

下载的版本一定要是docker官网支持的版本
寻找 Docker Hub 网址为: https://hub.docker.com/

4 docker rmi #删除镜像
docker rmi -f 镜像id						#删除指定的容器
docker rmi -f 镜像id 镜像id 镜像id 镜像id	#删除多个容器
docker rmi -f $(docker images -aq)		 #删除全部的容器
[root@localhost ~] # docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
mysql         5.7       a70d36bc331a   2 months ago    449MB
mysql         latest    c8562eaf9d81   2 months ago    546MB
hello-world   latest    bf756fb1ae65   14 months ago   13.3kB

[root@localhost ~] # docker rmi -f a70d36bc331a		
Untagged: mysql:5.7		#这里只删除mysql5.7版本独有的镜像文件,和mysql最新版的相同文件没有删除,这里就是前面说的 联合文件系统
Untagged: mysql@sha256:b3d1eff023f698cd433695c9506171f0d08a8f92a0c8063c1a4d9db9a55808df
Deleted: sha256:a70d36bc331a13d297f882d3d63137d24b804f29fa67158c40ad91d5050c39c5
Deleted: sha256:50c77bf7bcddd1f1d97789d80ac2404eec22c860c104e858620d2a2e321f0ef7
Deleted: sha256:14244329b83dfc8982398ee4104a548385652d2bffb957798ff86a419013efd6
Deleted: sha256:6d990477f90af28473eb601a9bca22253f6381e053c5a8edda0a4f027e124a3c
Deleted: sha256:ee0449796df204071589162fc16f8d65586312a40c68d1ba156c93c56f5e5ce8

[root@localhost ~] # docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
mysql         latest    c8562eaf9d81   2 months ago    546MB
hello-world   latest    bf756fb1ae65   14 months ago   13.3kB

3、容器命令

有了镜像才可以创建容器

可以下载一个centos镜像来学习

docker pull centos
1 新建容器,并启动
docker run [可选参数] image
#参数说明
--name="Name"		#容器名字,用来区分容器
-d					#后台方式运行
-it					#使用交互方式进行,进入容器查看内容
-p					#指定容器的端口
	1-p ip:主机端口:容器端口
	2-p 主机端口:容器端口(常用)
	3-p 容器端口
	4、容器端口
-P					#随机指定端口
测试,启动并进入容器
[root@localhost ~] # docker run -it centos /bin/bash
[root@533b50918b01 /]# ls		#查看容器内的centos,基础版本,很多命令不完善
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
2 列出所有的运行容器
docker ps 命令

docker ps 空格 	#列出当前正在运行的容器
		  -a	 #列出当前正在运行的容器+带出历史运行过的容器
		  -n=?	 #显示最近创建的容器,?表示显示几条信息,-n=1表示只显示最近创建的一个容器
		  -q	 #只显示容器的编号
[root@localhost ~] # docker ps		
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
e86417a66570   centos    "/bin/bash"   57 seconds ago   Up 57 seconds             recursing_elbakyan

[root@localhost ~] # docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS                      PORTS     NAMES
533b50918b01   centos        "/bin/bash"   27 minutes ago   Exited (0) 37 seconds ago             stoic_benz
22382b298e19   hello-world   "/hello"      12 hours ago     Exited (0) 12 hours ago               happy_visvesvaraya
128d2cf7e35c   hello-world   "/hello"      14 hours ago     Exited (0) 14 hours ago               quizzical_kirch

[root@localhost ~] # docker ps -n=2
CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS                      PORTS     NAMES
533b50918b01   centos        "/bin/bash"   27 minutes ago   Exited (0) 55 seconds ago             stoic_benz
22382b298e19   hello-world   "/hello"      12 hours ago     Exited (0) 12 hours ago               happy_visvesvaraya

[root@localhost ~] # docker ps -aq
533b50918b01
22382b298e19
128d2cf7e35c
3 退出容器
exit 			#直接容器停止运行并退出
Ctrl+Q+P		#容器在后台运行并退出
4 删除容器
docker rm 容器id					#删除指定的容器,不能删除正在运行的容器,如果要强制删除要加-f
docker rm -f $(docker ps -aq)	 #删除所有的容器
docker ps -aq | xargs docker rm  #删除所有的容器
5 启动和停止容器的操作
docker start 容器id		#启动容器
docker restart 容器id		#重启容器
docker stop 容器id		#停止当前正在运行的容器
docker kill 容器id		#强制停止当前容器
[root@localhost ~] # docker stop a7c83b47f5b2
a7c83b47f5b2
[root@localhost ~] # docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost ~] # docker start a7c83b47f5b2
a7c83b47f5b2
[root@localhost ~] # docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
a7c83b47f5b2   centos    "/bin/bash"   2 minutes ago   Up 2 seconds             affectionate_jemison

三、docker的其他命令

1、后台启动命令

格式:
docker run -d 镜像名
[root@localhost /etc/docker] # docker run -d centos
c3793ed5b6a0ce85fe7f7311c7e91e32d857537eb043e8fd6a3138d48de283b5

#问题
docker ps 发现centos停止了
#常见的坑,docker容器使用后台运行,就必须要有一个前台的进程,docker发现没有应用,就会自动停止
#比如安装nginx服务,容器启动后,发现自己没有提供服务,就会立刻停止,也就是谁没有程序了。

2、查看日志

格式:
docker logs -t -f --tail number 容器

#显示日志
-tf				#显示日志
--tail number	#要显示日志的条数
若是新建的容器没有日志,可以自己写一个shell脚本,来尝试查看
docker run -d centos /bin/bash -c "while true;do echo mxx;sleep 1;done"		#一直输入mxx

[root@localhost /etc/docker] # docker run -d centos /bin/bash -c "while true;do echo mxx;sleep 1;done"
d4a2d085333b56480e3f8ef92ca1dfca765b84bdf947afcf54a847f622a3a6c4

[root@localhost /etc/docker] # docker ps 
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
d4a2d085333b   centos    "/bin/bash -c 'while…"   19 seconds ago   Up 18 seconds             quirky_tharp
73e9ef1e057c   centos    "/bin/bash"              2 minutes ago    Up 2 minutes              elated_robinson

[root@localhost /etc/docker] # docker logs -tf --tail 10 d4a2d085333b
2021-03-22T07:07:48.546239079Z mxx
2021-03-22T07:07:49.549686630Z mxx
2021-03-22T07:07:50.551859961Z mxx
2021-03-22T07:07:51.558737827Z mxx
2021-03-22T07:07:52.561124212Z mxx
2021-03-22T07:07:53.564247660Z mxx
2021-03-22T07:07:54.567197971Z mxx
2021-03-22T07:07:55.570299179Z mxx
2021-03-22T07:07:56.573367987Z mxx
2021-03-22T07:07:57.576551959Z mxx
2021-03-22T07:07:58.579282573Z mxx
2021-03-22T07:07:59.582745826Z mxx
^C
[root@localhost /etc/docker] # 

3、查看容器中的进程信息

格式:
docker top 容器id
[root@localhost /etc/docker] # docker top 73e9ef1e057c
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                3178                3158                0                   15:04               pts/0               00:00:00            /bin/bash

4、查看镜像的元数据

格式:
docker inspect 容器id

5、进入正在运行的容器

#我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置

#格式一:
docker exer -it 容器id /bin/bash

#测试

[root@localhost /etc/docker] # docker ps -aq
7d14a187ad43
[root@localhost /etc/docker] # docker exec -it 7d14a187ad43 /bin/bash
[root@7d14a187ad43 /]# ls
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@7d14a187ad43 /]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 07:25 pts/0    00:00:00 /bin/bash
root         15      0  0 07:26 pts/1    00:00:00 /bin/bash
root         31     15  0 07:26 pts/1    00:00:00 ps -ef
格式二:
docker attach 7d14a187ad43

[root@localhost /etc/docker] # docker attach 7d14a187ad43
[root@7d14a187ad43 /]# ls
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@7d14a187ad43 /]# 
两者的区别:
docker exec 	 #进入容器后开启一个新的终端,可以再里面进行操作(常用)
docker attach 	 #进入容器正在执行的终端,不会启动新的进程

6、从容器内复制文件到主机上

格式:
docker cp 容器id:容器内路径 目的主机路径
#查看当前主机目录的内容
[root@localhost /opt] # ls
containerd                     mha4mysql-node-0.57         redis-5.0.7.tar.gz  sarg-2.3.7.tar.gz
mha4mysql-manager-0.57         mha4mysql-node-0.57.tar.gz  rh                  squid-3.5.28
mha4mysql-manager-0.57.tar.gz  redis-5.0.7                 sarg-2.3.7          squid-3.5.28.tar.gz
[root@localhost /opt] # 

#进入docker容器内部
[root@localhost /opt] # docker attach 7d14a187ad43
[root@7d14a187ad43 opt]# ls

#创建test目录
[root@7d14a187ad43 opt]# touch test
[root@7d14a187ad43 opt]# ls
test
[root@7d14a187ad43 opt]# 

#把容器内的文件复制到目的主机指定目录内
[root@localhost /opt] # docker cp 7d14a187ad43:/opt/test /opt

#查看,已经有了test目录
[root@localhost /opt] # ls
containerd                     mha4mysql-node-0.57.tar.gz  sarg-2.3.7           test
mha4mysql-manager-0.57         redis-5.0.7                 sarg-2.3.7.tar.gz
mha4mysql-manager-0.57.tar.gz  redis-5.0.7.tar.gz          squid-3.5.28
mha4mysql-node-0.57            rh                          squid-3.5.28.tar.gz

四、命令小结

mark

attach					#当前shell下attach连接指定运行镜像
bui1d					#通过Dockerfile定制镜像
commit 					#提交当前容器为新的镜像cp
Copy 					#从容器中拷贝指定文件或者目录到宿主机中
create					#创建一个新的容器,同run,但不启动容器
diff					#查看docker容器变化
events 					#从docker服务获取容器实时事件
exec					#在已存在的容器上运行命令
export 				    #导出容器的内容流作为一个 tar归档文件[对应import ]
history					#展示一个镜像形成历史
images 					#列出系统当前镜像
import 					#从tar包中的内容创建一个新的文件系统映像[对应export]
info 					#显示系统相关信息
inspect 				#查看容器详细信息
kill					#ki1l指定docker容器
load					#从一个tar包中加较一个镜像[对应save]
login				    #注册或者登陆一个docker源服务器
logout 					#从当前 Docker registry退出
1ogs					#输出当前容器日志信息
port					#查看映射端口对应的容器内部源端口
pause					#暂停容器
ps						#列出容器列表
pull					#从docker镜像源服务器拉取指定镜像或者库镜像
push					#推送指定镜像或者库镜像至docker源服务器
restart					#重启运行的容器
rm						#移除一个或者多个容器
rmi						#移除一个或多个镜像[无容器使用该镜像才可删除,否则需要删除相关容器才可继续或-f强制删除]
run						#创建一个新的容器并运行一个命令
save					#保存一个镜像为一个tar 包[对应load]
search					#在docker hub中搜索镜像
start					#启动容器
stop					#停止容器
tag						#给源中镜像打标签
top						#查看容器中运行的进程信息
unpause					#取消暂停容器
version					#查看docker版本号
wait					#截取容器停止时的退出状态值
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值