Docker:docker在项目中常用的一些命令

简介

Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包到一个可移植的容器中,并发布到任何安装了 Docker 引擎的机器上。这些容器是轻量级的,包含了应用程序运行所需的所有东西,如代码、系统库、系统工具、运行时环境等,以确保应用程序在不同环境中都能一致地运行。

这使得应用程序可以在几乎任何环境中轻松部署,并且能够快速扩展和管理。Docker极大地简化了应用程序的交付和部署流程,同时提高了资源利用率和可移植性。因此,Docker被广泛应用于DevOps、持续集成/持续部署以及云计算等领域。

Docker的应用场景

1.面向开发人员的Web应用自动化打包和发布

在没有Docker之前,开发、测试、生产环境可能不同,这可能导致文件配置上的不一致。然而,使用Docker,在容器内的程序端口都是一致的,而容器对外暴露的端口可能不同,但不影响程序的交付和运行,从而保证了开发环境与生产环境的一致性,并实现了快速部署。

Docker还可以为应用程序提供稳定的运行环境,使开发人员可以轻松在不同的系统上测试和运行软件,而无需考虑与操作系统或其他应用程序的冲突。

2.面向运维人员的运维成本降低

部署程序时搭建运行环境是很费时间的工作,同时还要解决环境的各种依赖。而Docker通过镜像机制,将需要部署运行的代码和环境直接打包成镜像,上传到容器即可启动,节约了部署各种软件的时间。

Docker可以帮助管理员自动化应用程序的部署和操作,也可以轻松地横向扩展和缩小服务器,以便根据需要扩展或减少服务。

3.面向企业的PaaS层实现

使用Docker,在一台物理机上就可以部署多个轻量化的容器,运行效率上会有很大的提升。

4.DevOps和持续集成/持续部署(CI/CD ):

Docker支持DevOps流程,通过容器化应用程序,实现了在不同环境中一致的构建、测试和部署。CI/CD工具(如Jenkins、GitLab CI)能够更高效地与Docker集成,实现自动化的构建和部署流程。

5.微服务架构

Docker为构建和管理微服务提供了理想的解决方案。每个微服务可以被打包成一个独立的容器,方便部署、扩展和管理。容器的隔离性保证了微服务之间的相互独立运行。

6.大数据和分布式系统

Docker也可以用于大数据和分布式系统的部署和管理,因为它可以轻松地扩展和缩小资源,以满足大数据处理的需求。

7.云计算和容器服务

Docker可以作为云计算平台的基础架构,例如Kubernetes、Mesos或Docker Swarm,提供高度扩展、可靠性和安全性。

8.多租户应用程序的隔离

Docker可以为多租户应用程序提供隔离的容器,从而不同租户之间的应用程序和数据可以彼此隔离,提高了安全性。

掌握项目中一些常用命令

查看容器信息

java 复制代码
docker ps -a

-a:显示所有的容器,包括正在运行和已经停止的容器。

-q:仅显示容器的ID,而不显示其他信息。

--filter:根据指定的条件过滤要显示的容器,例如根据状态、标签等。

--format:指定输出的格式,可以自定义输出的信息。

-l:显示最近创建的容器,包括已经停止的容器。

-n:显示最近创建的N个容器,N为数字。


查看镜像信息

java 复制代码
docker images
-a: 列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
--digests: 显示镜像的摘要信息;
-f: 显示满足条件的镜像;
--format: 指定返回值的模板文件;
--no-trunc: 显示完整的镜像信息;
-q: 只显示镜像ID。
java 复制代码
runoob@runoob:~$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
mymysql                 v1                  37af1236adef        5 minutes ago       329 MB
redis                   latest              4465e4bcad80        3 weeks ago         185.7 MB
python                  3.5                 045767ddf24a        3 weeks ago         684.1 MB

重启容器

java 复制代码
docker restart  容器id/容器名称

启动容器

java 复制代码
docker start 容器id

停止容器

java 复制代码
docker stop  容器id

删除容器

java 复制代码
docker rm  容器id

停止所有容器

java 复制代码
docker stop $(docker ps -a -q)

删除所有容器

java 复制代码
docker rm $(docker ps -a -q)

删除所有镜像

java 复制代码
docker rmi $(docker images -q)

如何进入容器中

1.首先使用下面的命令,查看容器ID(CONTAINER ID):

java 复制代码
docker ps -a

2.然后用下面的命令进入容器,就可以使用bash命令浏览容器里的文件:

java 复制代码
docker exec -it [CONTAINER ID] bash

有的镜像没有bash命令,可以用对应的shell,比如sh
docker exec -it [CONTAINER ID] sh

如何进行跟踪查看日志

1.首先使用下面的命令,查看容器ID(CONTAINER ID):

java 复制代码
docker ps -a

2.查看日志

java 复制代码
docker logs -f CONTAINER_ID
-f: 跟踪日志输出
--since: 显示某个开始时间的所有日志
-t: 显示时间戳
--tail: 仅列出最新N条容器日志
java 复制代码
查看日志,只显示最后200行
docker logs --tail 200 CONTAINER_ID

查看最近30分钟的日志
docker logs --since 30m CONTAINER_ID

查看某时间之后的日志
dockere logs -t --since "2020-10-25T14:06:30" CONTAINER_ID

docker 删除镜像

1.先查看镜像是否有对应的容器

java 复制代码
docker ps -a

2.有容器的话,先删除容器,不然会删除失败

java 复制代码
docker rm 容器id

3.再删除镜像文件

java 复制代码
docker rmi 镜像id

运行容器

java 复制代码
docker run

docker run -i(保持容器一直运行)-t(给容器一个伪终端)-d(后台运行,不直接进入容器) --name=tomcat9.2(给启动容器起名字)-p 8080:8080(宿主:docker容器)tomcat:9.2(启动的容器)  

通过 -it 启动的容器有两个特点 一创建就进入容器 exit退出容器 容器就会停止运行  ---交互式容器

通过 -id 创建的容器 docker exec -it tomcat9.2(--name起的名称)进入容器 exit退出容器 容器不会停止运行   ---守护式容器

数据卷添加的方式

Docker数据卷(Data Volumes)是宿主机中的一个目录或文件,它可以在容器之间共享和重用,使得本地与容器间传递数据更高效。

数据卷--添加两种方式

java 复制代码
1.	直接命令形式添加  docker run -it -v 宿主机绝对路径目录:容器内目录 镜像文件名称
2.	Dockerfile方式添加

docker run --name nginx81 -d -p 81:80 -v /data/nginx/html:/usr/share/nginx/html nginx

-v /data/nginx/html: linux虚拟机目录

/usr/share/nginx/html 容器中html目录

项目实践:安装MySQL5.7

1.查询mysql版本

java 复制代码
docker search mysql

2.下载MySQL5.7版本

java 复制代码
docker pull mysql:5.7  (这里选择的是第一个mysql镜像, :5.7选择的5.7版本)

3.等待下载完成、创建MySQL容器

java 复制代码
创建容器名称为mysql3308,密码为root

docker create --name mysql3308 -e MYSQL_ROOT_PASSWORD=root -p 3308:3306 mysql:5.7

4.操作容器,连接mysql

java 复制代码
启动容器
docker start mysql3308

进入到容器
docker exec -it mysql3308 bash

mysql连接
mysql -uroot --p

以上是项目中一些经常使用的命令。

相关推荐
SimonKing10 分钟前
无需重启!动态修改日志级别的神技,运维开发都哭了
java·后端·程序员
架构精进之路29 分钟前
多智能体系统不是银弹
后端·架构·aigc
摇滚侠43 分钟前
程序里的依赖和中间件的依赖冲突,怎么解决
中间件
涡能增压发动积1 小时前
MySQL数据库为何逐渐黯淡,PostgreSQL为何能新王登基
人工智能·后端
架构精进之路1 小时前
多智能体系统架构解析
后端·架构·ai编程
Java中文社群1 小时前
重磅!Ollama发布UI界面,告别命令窗口!
java·人工智能·后端
程序员清风2 小时前
程序员代码有Bug别怕,人生亦是如此!
java·后端·面试
就是帅我不改2 小时前
告别996!高可用低耦合架构揭秘:SpringBoot + RabbitMQ 让订单系统不再崩
java·后端·面试
用户6120414922132 小时前
C语言做的区块链模拟系统(极简版)
c语言·后端·敏捷开发