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 stop $(docker ps -a -q)
使用该命令要注意了,如果有一些重要的容器的话,就不要用这个命令了,一个一个容器停止为好。
清除所有未运行的容器
docker rm $(docker ps -a -q)
进入容器内部
要想进入容器内部,该容器必须是正在运行中的容器。
docker exec -it <容器ID> bash
解释:为什么要进入容器内部呢?
因为有时候我们需要把容器的文件夹或文件映射到宿主机上修改,然后自动同步到容器中。所以这样子改动起来就很方便了。
拷贝容器中的文件到宿主机上
注意:一定是要正在运行的容器。
语法: docker cp <容器ID或容器名称>:容器中的文件夹或文件 宿主机中的文件夹或文件
如:有一个正在运行的容器的id为69038cce96d4,我想拷贝容器中的文件夹/app/src到宿主机中的文件夹/root/src:
docker cp 69038cce96d4:/app/src /root/src
- /app/src 容器中的文件夹
- /root/src 宿主机中的文件夹
然后,你会看到在root下生成了一个src文件夹。
而拷贝宿主机的文件到容器中的语法: docker cp 宿主机中的文件夹或文件 <容器ID或容器名称>:容器中的文件夹或文件
实战运行容器
如:有一个正在运行的镜像的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的镜像)。
docker设置国内镜像
修改配置文件
vim /etc/docker/daemon.json
如果daemon.json文件不存在就自行创建。
内容如下:
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
重启docker服务
systemctl restart docker.service
相关镜像
- Docker国内镜像:registry.docker-cn.com
- 网易:hub-mirror.c.163.com
- 中国科技大学:docker.mirrors.ustc.edu.cn