前言
在学会如何进行项目的开发以后,发现仅仅会项目的开发还算不上一个合格的Java程序员,还要学会如何将项目在服务器上进行部署。之前通过Linux的方式将项目部署到了服务器上,但是Linux方式部署的过程相较于docker来说过于繁琐,因此决定学习docker这种更为简便的方法,将学习docker的过程在此进行记录。
学习资料:狂神说Java_Docker
使用软件:MobaXterm
一、Docker是什么?
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。是完全使用沙箱机制,彼此之间没有任何接口。
来源:Docker_百度百科:https://baike.baidu.com/item/Docker/13344470?fr=aladdin
二、Docker常用命令
1. 帮助命令
dockerversion#显示docker的版本信息dockerinfo#显示docker的系统信息,包括镜像和容器数量docker命令--help#帮助命令
docker帮助文档的地址:https://docs.docker.com/engine/reference/commandline/docker/
2. 镜像命令
docker images
dockerimages#查看本机上的所有镜像
[root-16-16-centos/]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEredislatest5d89766432d06weeksago105MBnginxlatestf8f4ffc8092c6weeksago133MBmysqllatest2fe4637626806weeksago514MBrabbitmqmanagement2121b269a5086weeksago253MBhello-worldlatestfeb5d9fea6a56weeksago13.3kBelasticsearch7.9.2caa7a21ca06e13monthsago763MBdaocloud.io/library/mysql8.0.13102816b1ee7d2yearsago486MB#解释REPOSITORY仓库的镜像源TAG镜像的标签,显示镜像的版本信息IMAGEID镜像IDCREATED镜像的创建时间SIZE镜像的大小#可选项Options: -a, --all#显示所有的镜像--digestsShowdigests-f, --filterfilterFilteroutputbasedonconditionsprovided--formatstringPretty-printimagesusingaGotemplate--no-truncDon't truncate output-q, --quiet#只显示镜像的ID
docker search
docker search # 搜索镜像
[root-16-16-centos/]#dockersearchmysqlNAMEDESCRIPTIONSTARSOFFICIALAUTOMATEDmysqlMySQLisawidelyused, open-sourcerelation…11665 [OK] mariadbMariaDBServerisahighperformingopensou…4444 [OK] mysql/mysql-serverOptimizedMySQLServerDockerimages. Create…867 [OK] perconaPerconaServerisaforkoftheMySQLrelati…561 [OK] phpmyadminphpMyAdmin-AwebinterfaceforMySQLandM…366 [OK] #可选项,通过收藏数来进行过滤Options: -f, --filterfilterFilteroutputbasedonconditionsprovided--formatstringPretty-printsearchusingaGotemplate--limitintMaxnumberofsearchresults (default25) --no-truncDon't truncate output--filter=STARS=3000#搜索出来的镜像就是STARS数量大于3000的镜像
docker pull
docker pull # 拉取镜像 => docker pull 镜像名[:tag]
[root-16-16-centos/]#dockerpullmysqlUsingdefaulttag: latest#如果下载时不指定tar版本,默认就是latest最新版本latest: Pullingfromlibrary/mysqlb380bbd43752: Pullcomplete#分层下载,dockerimage的核心,联合文件系统f23cbf2ecc5d: Pullcomplete30cfc6c29c0a: Pullcompleteb38609286cbe: Pullcomplete8211d9e66cd6: Pullcomplete2313f9eeca4a: Pullcomplete7eb487d00da0: Pullcomplete4d7421c8152e: Pullcomplete77f3d8811a28: Pullcompletecce755338cba: Pullcomplete69b753046b9f: Pullcompleteb2e64b0ab53c: PullcompleteDigest: sha256:6d7d4524463fe6e2b893ffc2b89543c81dec7ef82fb2020a1b27606666464d87#签名信息Status: Downloadednewerimageformysql:latestdocker.io/library/mysql:latest#真实地址#等价于dockerpullmysqldockerpulldocker.io/library/mysql:latest#指定版本下载dockerpullmysql:5.7
下载指定版本的docker
docker rmi
docker rmi 镜像Id # 删除指定镜像
批量删除镜像
方法一
docker rmi -f $(docker images -aq) # 删除所有镜像
方法二:
docker rmi -f 镜像Id1 镜像Id2 镜像Id3... # 以空格作为分隔符
在删除过程中可能会遇到无法删除的错误,是因为此时该镜像的容器正在运行,要想删除该镜像应该先将容器关闭,执行命令docker stop 容器Id
即可
3. 容器命令
有了镜像才可以创建容器
在这里跟着狂神以CentOS系统为例
docker pull centos # 拉取最新的centos镜像
拉取最新版的centos镜像,此时相当于在服务器上跑一个centos系统
容器启动命令
docker run [可选参数] 容器名称 # 可选参数 --name="Name" # 容器名称 例如:tomcat01 tomcat02,用来区分容器 -d # 以后台方式运行容器 -it # 使用交互方式运行容器,进入容器查看内容 -p # 指定容器的端口,例如 -p 8080:8080 -P # 随机指定容器端口 # -p常用命令 -p ip:主机端口:容器端口 -p 主机端口:容器端口 (最常用) -p 容器端口 容器端口
[root@VM-16-16-centos /]# docker run -it centos /bin/bash 启动并进入容器 [root@d59c91417c86 /]# ls 查看容器内的内容 bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@d59c91417c86 /]# exit 退出容器,从容器中退回到主机 exit [root@VM-16-16-centos /]# ls 查看容器外的内容 bin boot data dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
退出容器命令
exit # 从容器中退出到主机的命令
这个命令会直接将容器进行退出,但是在退出时会将容器关闭停止,如果想要退出时不停止容器,按下Ctrl + P + Q
在容器不停止运行的情况下退出容器
查看容器命令
docker ps # 查看当前正在运行的容器 -a # 查看当前正在运行的容器+带出历史运行过的容器 -n=? # 显示最近创建的容器 -q # 只显示容器的编号
删除容器命令
docker rm 容器Id # 删除指定容器,不能删除正在运行的容器 docker rm -f $(docker ps -aq) # 删除所有的容器
启动容器命令
docker start 容器Id # 启动容器 docker restart 容器Id # 重启容器
停止容器命令
docker stop 容器Id # 停止当前正在运行的容器 docker kill 容器Id # 强制停止当前正在运行的容器
三、Docker常用进阶命令
1. 容器命令
后台启动容器
docker run -d 镜像名称 # 后台启动容器
问题:当在后台启动centos时,发现容器自动停止了
原因:docker容器使用后台运行就必须要有一个前台进程,当docker启动后发现自己没有提供服务时就会自动停止。
查看日志命令
docker logs [可选参数] [容器Id] # 查看指定容器的日志 # 可选项 -f, --follow # 只输出指定的日志 -n, --tail string # 输出的日志条数,使用-n或--tail命令时必须加行数 -t, --timestamps # 输出的日志前有时间信息
进入正在运行的容器
方法一:
docker exec -it 容器Id bashShell # 以交互模式进入当前正在运行的容器 # 测试 # 查看当前正在运行的容器 [root@VM-16-16-centos ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8b58f0b6cfb0 centos "/bin/bash" 20 minutes ago Up 20 minutes laughing_nash # 进入到指定容器的/bin/bash目录下 [root@VM-16-16-centos ~]# docker exec -it 8b58f0b6cfb0 /bin/bash # 成功的进入了指定目录 [root@8b58f0b6cfb0 /]#
方法二:
docker attach 容器Id # 测试 # 查看当前正在运行的容器 [root@VM-16-16-centos ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8b58f0b6cfb0 centos "/bin/bash" 27 minutes ago Up 27 minutes laughing_nash # 进入到指定的容器 [root@VM-16-16-centos ~]# docker attach 8b58f0b6cfb0 # 成功的进入了指定容器内部 [root@8b58f0b6cfb0 /]#
两种方法的区别:
- docker exec:进入容器后开启一个新的终端,可以在里面操作(常用)
- docker attach:进入容器正在执行的终端,不会启动新的进程
查看容器的进程命令
查看容器的进程信息时要查看的容器必须是正在运行的容器
docker cp 容器Id:容器内容路径 目的的主机路径
2. 镜像命令
查看镜像元数据
docker inspect 容器Id
总结
以上便是docker中基本的镜像命令和容器命令,在docker中还有很多的命令,要想学好docker,只有不断的使用命令才能将其理解和记忆,除此以外没有其它捷径。
当坚强成为唯一的选择,才知道自己可以有多坚强。在坚持不住的时候,记得告诉自己,再坚持一下。想一千次,不如去做一次!