docker入门实操基础命令干货(一)

img
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。具体的这边就不介绍了,主要是docker基础操作命令。

一、基础 操作命令

1)启动关闭docker

systemctl start docker (启动docker)

systemctl stop docker (关闭docker)

2)docker帮助命令

docker --version (查看docker版本号)

docker info (查看docker容器安装后的描述)

docker --help (帮助命令)

3)docker基础命令

docker images (查看镜像)

-a 参数:显示所有本地镜像(含中间层)

-q 参数:显示镜像ID

-qa:合起来显示本地所有镜像的镜像ID

img
docker search nginx (从git上面搜寻镜像 https://hub.docker.com)

-s 参数:显示点赞数

4)下载所需镜像

docker search -s 30 nginx (查寻点赞数超过30的点赞数)

docker pull redis (下载最新版redis镜像)

docker pull nginx:1.16.1 (指定下载nginx1.16.1版本)

5)删除镜像

docker rmi centos:xc (删除一个镜像,不加标签的话就是删除所有的centos镜像,xc是我镜像的标签)

docker rmi ashince/tomcat8:latest nginx:1.16.1 (一次删除多个镜像)

docker rmi -f $(docker images -qa) (删除所有的镜像)

6)交互式启动容器

docker pull centos (首先拉取一个centos镜像做实验)

docker run -it 0d120b6ccaa8 (通过centos的id启动,启动后就是一个容器,或者通过镜像名+镜像标签启动:docker run -it centos:latest)

img
-i 参数:以交互模式运行容器,通常与t同时使用

-t 参数:为容器重新分配一个伪终端,通常与i同时使用

–name 参数:为容器指定一个名称,不指定则使用系统默认(docker run -it --name ‘centos-test’ centos:latest)

7)退出容器相关命令

exit:退出并关闭容器

ctrl+p+q:容器不停止退出

8)查看容器命令

docker ps (查看正在运行的容器)

-a 参数:列出当前所有正在运行的容器+历史上运行过的容器(docker ps -a )

-n [数字参数] 将上几次运行过的容器显示:docker ps -n 3 查看上3次运行的容器

-q 参数:静默模式,直线式容器编号 (docker ps -q)

-l 参数:显示最近创建的容器(docker ps -l)

9)启动关闭重启容器

如果使用exit退出容器的,可以查看然后启动。
img
从上图可以看见我们这个容器不是处于开启状态,首先我们将他开启。

docker start [容器ID]
img
docker restart [ID] (重启容器)

docker stop [id] (关闭容器)

docker kill [id] (强制关闭容器)

10)删除容器

docker rm -f e3984ec5e07a (删除一个已经在运行的容器)

如果在运行的容器删除时不加-f会报错,如果容器已经使用stop停止,删除时可以不加-f。

img
docker rm -f $(docker ps -qa) (删除所有在运行的容器)

10)以守护的形式启动容器

在上面6的内容中,使用的是交互式启动容器并登录进容器。如果我们不想交互式登录,只想启动一个容器就需要使用守护形式启动容器,需要的时候在进行登陆。

docker run -itd centos:latest (交互式登录并以守护的方式启动运行)

-d 参数:以守护的方式启动,可以跟-i,-t同时使用

img
11)进入正在运行的容器以命令交互

如果你退出容器了,或者使用的是守护式启动,需要进入就使用如下命令。

docker attach 29cea4f77830 (进入一个启动在运行的容器,进入使用ls查看与本地centos文件没什么两样,因为是简易版的centos)
img
docker exec -it 29cea4f77830 ls /root (不用进入容器,直接得到结果)
img
docker exec -it 29cea4f77830 /bin/bash (也可以进入容器操作,后面要运行/bin/bash)
img
attach:直接进入容器启动命令终端,不会启动新的进程

exec :是在容器打开新的终端,并且可以启动新的进程,在容器外边就可以使用命令操作。

12)拷贝文件查看进程及,容器内部细节

将宿主机/root目录下的文件拷贝至容器的tmp目录下,需要将本地的文件上传至容器中就使用该命令。

docker cp /root/tmpfile.txt 29cea4f77830:/tmp

docker cp 宿主机文件 [容器ID]:容器的具体目录
img
将容器内的文件拷贝至宿主机的/root目录下,需要备份容器中的数据,就可以使用此命令将容器内的数据拷贝至宿主机

docker cp 29cea4f77830:/tmp/ks-script-xm1o5azb /root/

docker cp [容器id]:容器具体目录 宿主机目的目录
img
查看容器内运行的进程

docker top [已经运行的容器ID]
img
查看容器细节

docker inspect [容器id] (已经在运行的容器详细信息)
img
13) 主机提供端口外部访问

docker run -it -p 80:80 nginx

-p 参数:-p指定一个端口访问nginx -p 外部提供访问的端口:容器的端口
img
通过浏览器访问
img
docker run -it -P nginx:latest

-P 参数:随机分配一个端口
img
查看是否随机分配端口
img
测试使用外部的32769查看是否能访问nginx
img
14)commit 从容器创建一个新的镜像

commit就是将一个运行的容器,做过修改的,重新提交成一个新的镜像。在做批量部署时直接运行即可。

做一个测试演示,我在本地创建一个index.html的文件上传至docker,然后将这个运行的容器创建成一个新的镜像。

启动一个tomcat容器
img
然后本地创建一个index.html到tomcat的docs目录然后访问
img
然后我们通过浏览器访问
img
我们自己定义的网页已经访问成功,但是想将这个运行的容器创建成一个镜像,批量部署时直接运行就行。

docker commit -a ‘zuozhe’ -m ‘create docs file’ 0abac4750b5e test/tomcat:1.2

​ 作者 提交文字说明 正在运行容器 新镜像的名字

-a :提交的镜像作者;

-c :使用Dockerfile指令来创建镜像;

-m :提交时的说明文字;

-p :在commit时,将容器暂停。
img
启动通过tomcat容器创建的新镜像
img
访问测试
img
15)存出镜像,载入镜像

上面已经知道如何commit镜像了,commit后怎么传给其他服务器呢,或者分享给你的朋友,这时就可以使用save,跟load下载及上传。

导出本地的镜像

docker save -o /root/test-tomcat.tar test/tomcat:1.2

​ 导出添加路径名字及后缀 导出指定镜像
img
img
删除原有的镜像,我们尝试导入。
img

删除后我们导入我们刚刚导出的镜像,就像是一个备份一样。

docker load -i /root/test-tomcat.tar

​ root目录下镜像载入

在导出镜像时定义的名称不影响镜像的名称,在docker中镜像的名称是什么载入后就是什么。
img
导入的镜像使用docker images查看与你导出的是一样的,运行起来也是一样的。

二、数据卷,数据卷容器

1、数据卷可在容器之间共享或者重用数据、卷中的更改可以直接生效、数据卷中的更改不会包含在镜像更新中、数据卷的生命周期一直持续到没有容器使用它为止。实现容器间继承及数据共享。

docker run -it -v /data:/mydata centos

docker run -it -v /宿主机绝对路径:/容器内目录 centos

将本地的/data目录共享至容器/mydata
img
docker inspect 04d637defda9 通过inspect查看运行的容器目录是否挂载成功。
img
测试文件是否能从宿主机同步至容器中
img
容器内查看
img
可多个容器共享一个/data,启动时都指定这一个目录。
img
2、数据卷容器,各容器之间共享(volumes-from)

以案例说明,这边三台服务使用同一个共享目录,首先启动一个主服务并指定数据卷,就好比是一个父容器卷,后面启动的继承父容器的数据卷。

docker run -itd --name server1 -v /data:/mydata centos (server1是父容器卷)
img
docker run -it --name server2 --volumes-from server1 centos (启动server2并进入查看,我们并没有设置数据卷但是通过volumes-from继承的server1的数据卷)
img
在启动一个server3看是否还能继承server1的容器卷。

docker run -it --name server3 --volumes-from server1 centos
img
当在一个容器中的容器卷中修改,三个容器都是同步。
img
在真实项目中如果后期项目变更,由原来的三台服务器改为两台时,需要将server1干掉,server2-server3是否还能继承容器卷。我们将server1容器删除做测试。
img
进入server3或者server2查看是否容器卷还在。
img
tos

当在一个容器中的容器卷中修改,三个容器都是同步。

在真实项目中如果后期项目变更,由原来的三台服务器改为两台时,需要将server1干掉,server2-server3是否还能继承容器卷。我们将server1容器删除做测试。

进入server3或者server2查看是否容器卷还在。

由此可见删除父容器后对,子容器是不影响的,除非你删除一个不剩。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值