Docker是一个开源的应用容器引擎,使用Docker可以更轻松地创建、部署和运行应用程序。下面介绍Docker的一些基本操作,主要包括镜像操作、容器操作、仓库操作这几个方面:
docker search
命令可以搜索Docker Hub上的镜像。例如,搜索Nginx镜像:docker search nginx
该命令会列出与Nginx相关的镜像,包含镜像的名称、描述、星级评价等信息。
docker pull
命令将镜像从仓库拉取到本地。比如拉取最新版本的Nginx镜像:docker pull nginx
也可以指定镜像的标签(版本号),例如拉取Nginx的1.23.3版本:
docker pull nginx:1.23.3
docker images
命令查看本地已下载的镜像列表,包括镜像的仓库名、标签、镜像ID、创建时间和大小等信息。docker images
docker rmi
命令可以删除本地镜像。例如删除名为nginx
的镜像:docker rmi nginx
如果镜像被多个容器引用,需要先停止并删除相关容器才能删除镜像;若要强制删除,可以使用-f
选项。
Dockerfile
文件,然后使用docker build
命令构建。例如,在包含Dockerfile
的目录下执行以下命令构建镜像,-t
参数用于指定镜像的名称和标签:docker build -t my-nginx .
.
表示Dockerfile所在的当前目录。
docker tag
命令用于给镜像添加标签,方便镜像的管理和分发。比如给本地的nginx
镜像添加一个新标签my-nginx:v1
:docker tag nginx my-nginx:v1
docker run
命令可以基于镜像创建并运行一个容器。例如,运行一个Nginx容器,并将容器的80端口映射到主机的8080端口:docker run -d -p 8080:80 nginx
其中,-d
表示以后台模式运行容器;-p
指定端口映射规则,格式为主机端口:容器端口
。
docker ps
命令用于查看正在运行的容器列表,包括容器的ID、镜像、状态、端口映射等信息。如果要查看所有容器(包括已停止的),可以使用docker ps -a
命令。docker ps
docker ps -a
docker stop
命令可以停止正在运行的容器,例如停止ID为container_id
的容器:docker stop container_id
要重新启动已停止的容器,使用docker start
命令:
docker start container_id
docker exec
命令允许在正在运行的容器中执行命令。例如,进入正在运行的Nginx容器的Shell环境:docker exec -it container_id bash
-i
选项表示交互式操作,-t
选项分配伪终端。
docker rm
命令删除已停止的容器。例如删除ID为container_id
的容器:docker rm container_id
如果要删除正在运行的容器,可以使用-f
选项强制删除。
docker logs
命令用于查看容器的日志信息。例如查看Nginx容器的日志:docker logs container_id
docker login
命令登录Docker Hub仓库,需要输入用户名和密码:docker login
docker push
命令可以将本地镜像推送到Docker Hub仓库。例如推送名为my-nginx:v1
的镜像:docker push my-nginx:v1
docker pull
命令外,当镜像推送至私有仓库时,登录私有仓库后,同样使用docker pull
命令拉取指定镜像。以上就是Docker的一些基本操作,通过这些操作,能够满足日常开发、测试和部署容器化应用的大部分需求。
在Docker中查看容器日志是排查应用问题、监控运行状态的关键操作。以下是查看容器日志的常用方法及场景说明:
docker logs
docker logs <容器ID或名称>
docker logs nginx-container
tail -f
)docker logs -f <容器ID或名称>
docker logs -f my-app
docker logs --tail <行数> <容器ID或名称>
docker logs --tail 50 my-container
docker logs --since <时间点> <容器ID或名称>
docker logs --since "2023-01-01T00:00:00" my-container
docker logs --timestamps <容器ID或名称>
2023-10-15T12:34:56.789000000Z Hello from container
grep
搜索关键词docker logs <容器ID或名称> | grep "ERROR"
docker logs my-app | grep "Exception"
docker logs --details <容器ID或名称>
docker inspect <容器ID或名称> | grep LogDriver
json-file
(默认)、journald
、syslog
、fluentd
等在docker run
时通过--log-opt
参数配置:
docker run --log-opt max-size=10m --log-opt max-file=3 ...
kubectl logs
命令kubectl logs <Pod名称>
docker-compose logs
命令docker-compose logs -f service-name
none
(禁用日志)docker system prune -a
# 创建/etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
重启Docker服务生效:systemctl restart docker
docker logs
+ 选项(-f
, --tail
, --since
)grep
、时间过滤、JSON格式合理利用这些方法,可高效定位容器运行问题,提升运维效率。
在Docker中执行命令主要有以下几种常见的方式,分别适用于不同的场景,以下是详细介绍:
使用docker run
命令在基于镜像创建并启动容器的同时,可以指定要执行的命令。
docker run
命令后加上要执行的命令。例如,使用busybox
镜像来执行一个简单的echo
命令:docker run busybox echo "Hello, Docker!"
上述命令会基于busybox
镜像启动一个容器,在容器中执行echo "Hello, Docker!"
命令,输出结果后容器就会停止运行。
-it
选项。例如,进入一个基于ubuntu
镜像的容器的Shell:docker run -it ubuntu bash
这里,-i
表示以交互模式运行容器,-t
为容器分配一个伪终端,bash
是要在容器中执行的Shell命令。进入后,就可以在容器内执行诸如apt update
、apt install
等其他命令了,操作完成后,输入exit
即可退出容器。
对于已经在运行的容器,可以使用docker exec
命令来执行命令。
nginx
容器,现在想查看容器内nginx
的配置文件内容,可以使用以下命令:docker exec <容器ID或容器名称> cat /etc/nginx/nginx.conf
将<容器ID或容器名称>
替换为实际的容器标识,上述命令会在运行的nginx
容器中执行cat /etc/nginx/nginx.conf
命令,输出nginx
的配置文件内容。
-it
选项,例如进入正在运行的ubuntu
容器的Shell:docker exec -it <容器ID或容器名称> bash
进入后,就可以进行各种交互式操作,如安装软件、查看日志等,退出时同样输入exit
。
docker cp
命令),然后再通过docker exec
来执行。例如,将本地的test.sh
脚本复制到容器my-container
的/tmp
目录下,然后执行:docker cp test.sh my-container:/tmp/
docker exec my-container bash /tmp/test.sh
在编写Dockerfile
时,可以使用CMD
或ENTRYPOINT
指令来定义容器启动时默认执行的命令。
CMD
指令用于指定一个容器启动时要执行的默认命令。一个Dockerfile
中只能有一个CMD
指令,如果指定了多个,只有最后一个会生效。例如:FROM ubuntu
CMD ["echo", "This is a default command"]
当使用这个镜像创建并启动容器时,会执行echo "This is a default command"
这条命令。
ENTRYPOINT
指令也用于指定容器启动时要执行的命令,但它更常用于设置一个可执行的“入口点”,后续通过docker run
传入的参数会被当作该命令的参数。例如:FROM ubuntu
ENTRYPOINT ["bash", "-c"]
CMD ["echo", "This is a default command"]
此时,你可以在启动容器时传入额外的参数来覆盖CMD
中的命令,如:
docker run <镜像名称> echo "Override default command"
上述命令会执行bash -c echo "Override default command"
,覆盖了原来CMD
指定的默认命令。
通过以上不同方式,你可以根据具体需求在Docker容器中灵活地执行各种命令,实现对容器内应用的管理和操作。