docker基础
镜像
查看当前所有镜像
docker images
拉取镜像
docker pull 镜像名:标签
如果不输入标签的话,默认采用最新的标签。如下:
docker pull nginx
删除镜像
docker rmi 镜像名:标签 或 镜像id
查看镜像历史
docker history <镜像名或镜像id>
查看镜像信息
docker inspect <镜像名或镜像id>
容器命令
查看所有容器
docker ps -a
查看正在运行的容器
docker ps
删除容器
docker rm 容器名或容器id
注意: 容器还在运行中时是不能删除的。要先停止容器才能删除。
重启容器
docker restart 容器名或容器id
停止容器
docker stop 容器名或容器id
清除所有未运行的容器
docker rm $(docker ps -a -q)
进入容器内部
要想进入容器内部,该容器必须是正在运行中的容器。
docker exec -it <容器ID> bash
解释:为什么要进入容器内部呢?
因为有时候我们需要把容器的文件夹或文件映射到宿主机上修改,然后自动同步到容器中。所以这样子改动起来就很方便了。
拷贝容器中的文件到宿主机上
注意:一定是要正在运行的容器。
语法: docker cp <容器ID或容器名称:tag>:容器中的文件夹或文件 宿主机中的文件夹或文件
如:有一个正在运行的容器的id
为69038cce96d4
,我想拷贝容器中的文件夹/app/src
到宿主机中的文件夹/root/src
:
docker cp 69038cce96d4:/app/src /root/src
- /app/src 容器中的文件夹
- /root/src 宿主机中的文件夹
然后,你会看到在root
下生成了一个src
文件夹。
实战运行容器
如:有一个正在运行的镜像的id
为69038cce96d41
,容器内部的端口是1000
:
docker run -itd -p 1000:1000 –name demo1 69038cce96d41
- -p 1000:1000 : 宿主机端口:容器端口,这是一种端口映射。
- --name demo1 把这个容器的名字更改为
demo1
。
问题来了:假如我要修改该容器中的部分代码怎么办呢? 就好比,我想增加一些接口或者功能, 我是不是得从容器的代码文件中修改呀,但是我怎么修改容器中的代码文件呢? 这就出现了文件挂载了。
步骤:
- 首先第一步:我想先确认容器的代码文件是放在容器中的哪个文件夹中的。
- 第二步:我想把容器中的文件挂载在哪个宿主机哪个文件夹中。
通过docker ps
可以知道该容器的id
为69038cce96d42
实战第一步
进入容器内部
docker exec -it 69038cce96d42 bash
自行通过pwd
可以知道容器中代码的文件夹路径 ,假如我进入容器内部发现代码都在/app/src
文件夹中。
实战第二步
我想把容器中的代码文件夹/app/src
映射到宿主机/root/data/code
文件夹中。这里要注意一下:因为/root/data/code
文件夹中什么文件也没有,而容器中的/app/src
文件夹下是有很多代码文件的,所以在使用文件挂载的时候,这两个文件夹要统一。我们得把容器中的代码文件夹/app/src
拷贝到宿主机的/root/data/code
文件夹。
docker cp 69038cce96d42:/app/src /root/data/code
重置容器并挂载文件
停止容器
docker stop 69038cce96d42
删除容器
docker rm 69038cce96d42
重新运行并挂载文件
docker run -itd -p 1000:1000 -v /root/data/code:/app/src –name demo2 69038cce96d41
日志
查看容器日志
docker logs 容器id或容器名
查看日志大小及日志文件所在地
ls -lh $(find /var/lib/docker/containers/ -name *-json.log)
清理日志文件内容
truncate -s 0 /var/lib/docker/containers/3ee1a49546e369049836c07f6asdfasdf2b9e4af4b6ef8ff13393ed5a2b5c2bf528372/3ee1a49546e369049836c07f6c92b9e4af4b6ef8ff13393ed5a2b5c2sadfbf528372-json.log
怎么删除日志呢?
cd /var/lib/docker
rm -rf containers/*
查看容器映射路径
docker inspect -f "{{.Mounts}}" <容器id或容器名称>
其他命令
清理磁盘
docker system prune
可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。