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

 

 

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

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)

-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退出容器的,可以查看然后启动。

从上图可以看见我们这个容器不是处于开启状态,首先我们将他开启。

docker start   [容器ID]

docker   restart  [ID]     (重启容器)

docker   stop  [id]     (关闭容器)

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

10)删除容器

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

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

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

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

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

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

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

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

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

docker attach 29cea4f77830   (进入一个启动在运行的容器,进入使用ls查看与本地centos文件没什么两样,因为是简易版的centos) 

docker exec -it 29cea4f77830 ls /root    (不用进入容器,直接得到结果)

docker exec -it 29cea4f77830 /bin/bash   (也可以进入容器操作,后面要运行/bin/bash)

attach:直接进入容器启动命令终端,不会启动新的进程

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

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

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

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

docker  cp  宿主机文件    [容器ID]:容器的具体目录

将容器内的文件拷贝至宿主机的/root目录下,需要备份容器中的数据,就可以使用此命令将容器内的数据拷贝至宿主机

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

docker  cp [容器id]:容器具体目录   宿主机目的目录

查看容器内运行的进程

docker  top  [已经运行的容器ID]

查看容器细节

docker   inspect   [容器id] (已经在运行的容器详细信息)

13) 主机提供端口外部访问

docker run -it -p 80:80 nginx

-p 参数:-p指定一个端口访问nginx   -p  外部提供访问的端口:容器的端口

通过浏览器访问

docker run -it -P nginx:latest

-P 参数:随机分配一个端口

查看是否随机分配端口

测试使用外部的32769查看是否能访问nginx

14)commit 从容器创建一个新的镜像

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

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

启动一个tomcat容器

然后本地创建一个index.html到tomcat的docs目录然后访问

然后我们通过浏览器访问

我们自己定义的网页已经访问成功,但是想将这个运行的容器创建成一个镜像,批量部署时直接运行就行。

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

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

-a :提交的镜像作者;

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

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

-p :在commit时,将容器暂停。

启动通过tomcat容器创建的新镜像

访问测试

15)存出镜像,载入镜像

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

导出本地的镜像

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

                             导出添加路径名字及后缀         导出指定镜像

删除原有的镜像,我们尝试导入。

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

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

                           root目录下镜像载入 

在导出镜像时定义的名称不影响镜像的名称,在docker中镜像的名称是什么载入后就是什么。

导入的镜像使用docker  images查看与你导出的是一样的,运行起来也是一样的。

二、数据卷,数据卷容器

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

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

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

将本地的/data目录共享至容器/mydata

docker   inspect   04d637defda9  通过inspect查看运行的容器目录是否挂载成功。

测试文件是否能从宿主机同步至容器中

容器内查看

可多个容器共享一个/data,启动时都指定这一个目录。

2、数据卷容器,各容器之间共享(volumes-from)

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

docker  run  -itd  --name  server1  -v  /data:/mydata  centos  (server1是父容器卷)

 docker  run  -it --name server2 --volumes-from server1 centos (启动server2并进入查看,我们并没有设置数据卷但是通过volumes-from继承的server1的数据卷)

在启动一个server3看是否还能继承server1的容器卷。

docker  run  -it --name server3 --volumes-from server1 centos

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

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

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

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

 

posted @ 2020-11-28 13:52  點燈的人  阅读(182)  评论(1编辑  收藏  举报